분산 아키텍처의 핵심 개념
Elasticsearch는 JSON 문서를 단위로 저장하는 분산 시스템입니다. 클러스터의 여러 노드에 문서가 자동으로 분배되므로 어떤 노드에서든 즉시 검색할 수 있습니다. 이 분산 특성이 수평적 확장을 가능하게 합니다.
샤드: 데이터 분할의 핵심
인덱스는 여러 개의 샤드로 나뉩니다. 각 샤드는 독립적인 Lucene 인덱스이며 전체 데이터의 부분집합을 보유합니다. 문서 색인 시 해시 알고리즘이 어느 샤드에 저장할지 결정하므로 데이터가 균등하게 분배됩니다. 쿼리 실행 시 조정 노드는 모든 샤드로 동시에 쿼리를 전달하고, 각 샤드가 로컬 결과를 반환하면 이를 병합하여 최종 결과를 생성합니다.
레플리카: 고가용성과 병렬 처리
각 프라이머리 샤드마다 기본적으로 최소 1개의 레플리카가 생성됩니다. 레플리카는 프라이머리 샤드와 서로 다른 노드에 배치되어 노드 장애 시에도 데이터 손실을 방지합니다. 레플리카는 검색 요청을 처리할 수 있으므로 검색 부하를 여러 노드에 분산시켜 처리량을 증가시킵니다.
실무 설계 시 주의점
프라이머리 샤드 수는 인덱스 생성 시 설정되며 이후 변경할 수 없습니다. 따라서 데이터 성장과 쿼리 volume을 고려하여 초기에 적절히 설정해야 합니다. 반면 레플리카 수는 언제든 동적으로 변경 가능합니다. 과도한 샤드 수는 메모리 오버헤드와 조정 비용을 증가시키므로, 샤드당 데이터 크기가 20~50GB 범위가 되도록 계획하는 것이 권장됩니다.