전체 그래프
Elasticsearch

Shard & Replication

data-engineeringelasticsearcharchitectureshardreplication

상위: Elasticsearch

요약

샤드(Shard)는 데이터를 분산 저장하는 단위이며, 레플리카(Replica)는 데이터의 가용성과 검색 성능을 위해 샤드를 복제한 것입니다.

Shard (Primary Shard)

  • 인덱스의 데이터를 나누어 저장하는 논리적/물리적 단위입니다.
  • 불변성: 인덱스 생성 시 설정한 Primary Shard 개수는 변경할 수 없습니다 (Reindex 필요).
  • 각 샤드는 독립적인 Lucene 인덱스입니다.

Replica (Replica Shard)

  • Primary Shard의 복제본입니다.
  • 역할:
    • 고가용성 (High Availability): Primary Shard 유실 시 Replica가 Primary로 승격되어 서비스 중단을 방지합니다.
    • 성능 향상: 읽기(검색) 요청을 Primary와 Replica가 분산 처리합니다.
  • 개수는 운영 중에 언제든지 변경 가능합니다.

Replication 동작 원리

  1. 쓰기 (Write): 요청이 Primary Shard에 전달되어 저장된 후, 모든 Replica Shard로 복제됩니다.
  2. 읽기 (Read): Coordinating Node가 Primary 또는 Replica 중 부하가 적은 곳으로 요청을 라우팅합니다.

고려 사항

  • Primary와 Replica는 같은 노드에 저장될 수 없음 → 충분한 노드 필요
  • 복제본 유지에 따른 비용 증가 (네트워크 트래픽, 저장소)
  • 트레이드오프: 복제본 수 증가 → 안정성↑, 비용↑

설정 예제

PUT books
{
  "settings": {
    "index": {
      "number_of_shards": 5,
      "number_of_replicas": 1
    }
  }
}
es.indices.create(
  index="book",
  body={
    "settings": {
      "index": {
        "number_of_shards": 5,
        "number_of_replicas": 1
      }
    }
  }
)