클러스터, 노드 역할, 샤드와 레플리카
Elasticsearch 공식 문서(elastic.co/docs) 및 기술 블로그 종합 — 아키텍처부터 운영까지 (웹 리서치, 2026) — Elastic 공식 문서 + 여러 기술 블로그(Opster, Baeldung 등) 교차 확인
이 모듈을 다 읽으면
- 클러스터-노드-인덱스-샤드의 계층 관계를 설명할 수 있다
- master/data/ingest/coordinating 4가지 노드 역할이 각각 무엇을 담당하는지 구분할 수 있다
- 샤드와 레플리카가 각각 어떤 문제(스케일/장애복구)를 해결하는지 설명할 수 있다
Elasticsearch의 물리적 구성 단위(클러스터/노드/샤드/레플리카)와 노드 역할 분화를 정리한다.
클러스터 — 노드들의 집합
클러스터는 데이터와 부하를 함께 나눠 갖는 하나 이상의 노드 집합이다. 각 노드는 독립된 Elasticsearch 서버 프로세스이며 클러스터에 합류해 데이터를 들고 있거나(data), 쿼리를 조정하거나(coordinating), 클러스터 메타데이터를 관리하는(master) 역할 중 하나 이상을 수행한다. 인덱스는 논리적 이름공간이고, 실제로는 여러 개의 샤드로 쪼개져 클러스터 전체 노드에 분산 배치된다.
핵심 포인트
- 클러스터 = 데이터/부하를 공유하는 노드 집합, 인덱스는 논리적 이름공간이고 실제 데이터는 샤드로 쪼개져 분산된다
노드 역할 — master / data / ingest / coordinating
master-eligible 노드는 클러스터 상태(어떤 인덱스가 있고, 샤드가 어디에 있는지 등)를 관리할 자격이 있는 노드로, 그중 선출된 하나가 실제 master 역할을 맡아 클러스터 메타데이터 변경을 조율한다. data 노드는 실제 문서를 저장하고 CRUD·검색·집계 연산을 수행하는 노드다. ingest 노드는 색인 전에 ingest pipeline(필드 추출, 파싱, 보강 등)을 문서에 적용한다. coordinating 노드는 master/data/ingest 역할을 다 빼고 나면 남는 역할 — 요청을 적절한 샤드로 라우팅하고, 검색의 reduce 단계(각 샤드 결과를 합쳐 최종 응답 생성)와 벌크 색인 요청 분배를 담당한다. 소규모 클러스터에서는 노드 하나가 여러 역할을 겸하는 게 보통이고, 대규모 프로덕션에서는 역할별로 노드를 분리해 부하를 격리한다.
핵심 포인트
- master: 클러스터 메타데이터 관리(선출제) / data: 문서 저장·CRUD·검색·집계 / ingest: 색인 전 파이프라인 처리 / coordinating: 요청 라우팅과 결과 병합
- 소규모는 노드 하나가 여러 역할 겸임, 대규모는 역할별 노드 분리로 부하 격리
샤드와 레플리카 — 스케일과 장애복구를 나눠서 해결한다
샤드(shard)는 인덱스를 나눈 조각으로, 그 자체가 독립적인 Lucene 인덱스다. 인덱스 하나를 여러 샤드로 나누면 그 샤드들을 여러 노드에 분산 배치할 수 있어 수평 확장이 가능해진다(하나의 노드/디스크 용량을 넘는 인덱스도 처리 가능). 레플리카(replica)는 프라이머리 샤드의 복제본을 다른 노드에 두는 것으로, 프라이머리를 가진 노드가 죽어도 레플리카가 승격돼 서비스가 계속되게 하는 장애복구 수단이자, 읽기 요청을 프라이머리와 레플리카 양쪽에 분산해 검색 처리량도 늘려준다. 즉 '샤드 수'는 확장성(얼마나 많은 데이터/부하를 병렬 처리할 것인가) 문제이고, '레플리카 수'는 가용성과 읽기 처리량 문제로, 서로 다른 목적의 다이얼이다.
핵심 포인트
- 샤드 = 인덱스를 나눈 조각(독립 Lucene 인덱스), 여러 노드에 분산해 수평 확장을 가능하게 한다
- 레플리카 = 프라이머리 샤드의 복제본, 장애복구 + 읽기 처리량 분산이 목적
- 샤드 수는 확장성 문제, 레플리카 수는 가용성/읽기처리량 문제 — 서로 다른 다이얼