Elasticsearch 클러스터란?
📌 Elasticsearch는 여러 개의 노드(Node)가 하나의 클러스터(Cluster)로 묶여 동작하는 분산 시스템입니다.
각 노드는 데이터를 저장하고 검색하며, 클러스터 내 다른 노드들과 통신하여 데이터를 공유합니다.
클러스터를 구성하는 요소
Elasticsearch 클러스터는 여러 개의 노드로 구성되며, 각 노드는 역할에 따라 구분됩니다.
노드 유형 설명
마스터 노드 (Master Node) | 클러스터 상태 관리 (샤드 할당, 노드 추가/삭제, 설정 변경 등) |
데이터 노드 (Data Node) | 실제 데이터를 저장하고 색인/검색 수행 |
코디네이팅 노드 (Coordinating Node) | 검색 요청을 받아 데이터 노드에 분산 후 결과를 취합 |
머신러닝 노드 (ML Node) | 이상 탐지 및 머신러닝 분석 수행 |
트랜스포트 노드 (Ingest Node) | 데이터 전처리(ETL) 및 파이프라인 처리 수행 |
클러스터에서 노드 간 통신
✅ (1) Elasticsearch 노드는 2개의 포트를 사용
- HTTP 포트 (9200~9299) → 클라이언트와의 통신 (REST API 요청 처리)
- TCP 포트 (9300~9399) → 클러스터 내부 노드 간 데이터 교환
✅ 기본적으로 1개의 물리 서버에 1개의 노드를 실행하는 것이 권장됨.
클러스터 구성 방법
✅ (1) 여러 서버에서 하나의 클러스터 실행
서버 3대를 사용하여 3개의 노드를 실행하고, 하나의 클러스터로 구성할 수 있습니다.
# Node-1 설정 (서버 1)
cluster.name: my-cluster
node.name: node-1
network.host: 192.168.1.10
discovery.seed_hosts: ["192.168.1.11", "192.168.1.12"]
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
# Node-2 설정 (서버 2)
cluster.name: my-cluster
node.name: node-2
network.host: 192.168.1.11
discovery.seed_hosts: ["192.168.1.10", "192.168.1.12"]
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
# Node-3 설정 (서버 3)
cluster.name: my-cluster
node.name: node-3
network.host: 192.168.1.12
discovery.seed_hosts: ["192.168.1.10", "192.168.1.11"]
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
✅ 모든 노드의 cluster.name이 동일해야 하나의 클러스터로 동작.
✅ (2) 하나의 서버에서 여러 개의 노드 실행
한 개의 물리 서버에서 여러 개의 Elasticsearch 노드를 실행할 수도 있습니다.
이 경우 각 노드는 다른 포트를 사용해야 하며, 클러스터명을 동일하게 설정해야 합니다.
🔹 Node-1 (es-cluster-1)
cluster.name: es-cluster-1
node.name: node-1
http.port: 9200
transport.port: 9300
🔹 Node-2 (es-cluster-1)
cluster.name: es-cluster-1
node.name: node-2
http.port: 9201
transport.port: 9301
🔹 Node-3 (es-cluster-2 - 다른 클러스터)
cluster.name: es-cluster-2
node.name: node-3
http.port: 9202
transport.port: 9302
✅ Node-1과 Node-2는 같은 클러스터에서 동작하며, Node-3은 별도의 클러스터로 동작.
클러스터 실행 및 확인
✅ (1) Elasticsearch 노드 실행
노드를 실행할 때 명령어를 사용하여 설정을 직접 입력할 수도 있습니다.
bin/elasticsearch -Ecluster.name=es-cluster-1 -Enode.name=node-1
✅ (2) 실행된 노드 확인
노드 실행 후, 터미널에 출력되는 메시지를 확인할 수 있습니다.
[INFO ][o.e.c.s.MasterService ] [node-1] elected-as-master ([1] nodes joined)
✅ elected-as-master 메시지를 통해 마스터 노드가 정상적으로 선출되었음을 확인 가능.
클러스터 노드 탐색 (Discovery)
✅ (1) Discovery란?
새로운 노드가 추가될 때 기존 노드를 검색하여 같은 클러스터로 묶이는 과정을 Discovery라고 합니다.
✅ (2) Discovery 과정
- discovery.seed_hosts에 설정된 노드 목록에서 검색을 시작.
- 해당 노드가 존재하면 cluster.name이 동일한지 확인.
- 동일하면 클러스터에 참여, 다르면 독립된 클러스터로 유지.
discovery.seed_hosts: ["192.168.1.10", "192.168.1.11", "192.168.1.12"]
✅ 최초 실행할 마스터 후보 노드 3~5개만 설정하면 자동으로 클러스터 탐색이 수행됨.
클러스터 상태 확인
✅ (1) 현재 실행 중인 노드 조회
GET _cat/nodes?v
IP 주소 노드명 역할 상태
192.168.1.10 | node-1 | 마스터 | 정상 |
192.168.1.11 | node-2 | 데이터 | 정상 |
192.168.1.12 | node-3 | 데이터 | 정상 |
✅ (2) 현재 클러스터 상태 확인
GET _cluster/health?pretty
응답 예시
{
"cluster_name": "my-cluster",
"status": "green",
"number_of_nodes": 3,
"number_of_data_nodes": 2,
"active_primary_shards": 5,
"active_shards": 10
}
✅ "status": "green"이면 정상 운영 중, "yellow" 또는 "red"는 문제 발생 가능.
Elasticsearch 클러스터 구성 시 고려 사항
✅ (1) 마스터 노드 최소 3개 유지
- Split Brain 방지를 위해 마스터 후보 노드는 항상 홀수 개(3, 5, 7개 등)로 설정.
✅ (2) 데이터 노드와 마스터 노드 분리
- 대규모 클러스터에서는 마스터 노드와 데이터 노드를 분리하여 성능 최적화.
✅ (3) Discovery 설정 필수
- discovery.seed_hosts를 설정하지 않으면 새로운 노드가 기존 클러스터에 합류하지 못할 수 있음.
결론
- Elasticsearch는 여러 개의 노드로 이루어진 분산 클러스터 구조.
- 클러스터를 구성하려면 모든 노드의 cluster.name을 동일하게 설정해야 함.
- 마스터 노드와 데이터 노드를 분리하여 성능과 안정성을 향상할 수 있음.
- Discovery 설정을 통해 노드가 자동으로 클러스터에 합류할 수 있도록 설정 필요.
'Elastic Search > Elastic 시스템 구조' 카테고리의 다른 글
[Elasticsearch] 마스터 노드와 데이터 노드 (Master & Data Nodes) (0) | 2025.02.01 |
---|---|
[Elasticsearch] Index & Shards (0) | 2025.02.01 |