인덱스와 샤드 (Index & Shards)
1. 인덱스(Index)란?
- Elasticsearch에서 데이터 저장 단위로, 여러 개의 문서(Document)를 포함.
- 관계형 데이터베이스(RDBMS)의 테이블(Table) 개념과 유사.
- 인덱스는 기본적으로 샤드(Shard)라는 단위로 분할되어 저장됨.
2. 샤드(Shard)란?
- 인덱스의 데이터를 저장하는 기본 단위.
- Elasticsearch는 대량의 데이터를 효과적으로 저장하고 검색하기 위해 샤드를 여러 개로 나누어 분산 저장함.
- 샤드는 **프라이머리 샤드(Primary Shard)와 복제본(Replica Shard)**으로 구분됨.
프라이머리 샤드(Primary Shard)와 복제본(Replica Shard)
샤드 유형 설명
프라이머리 샤드 (Primary Shard) | 데이터가 처음 저장되는 기본 샤드. |
복제본 샤드 (Replica Shard) | 프라이머리 샤드의 복제본으로, 장애 발생 시 데이터 손실 방지. |
✅ 샤드 개수 설정
- Elasticsearch 7.0 이상에서는 기본적으로 프라이머리 샤드 1개, 복제본 1개로 설정됨.
- Elasticsearch 6.x 이하에서는 기본적으로 프라이머리 샤드 5개로 설정됨.
샤드와 노드 분산 구조
샤드는 클러스터 내 여러 개의 노드(Node)에 분산 저장됩니다.
✅ 샤드 분배 예시
- 5개의 프라이머리 샤드(Primary Shards)
- 각각 1개의 복제본(Replica Shards)
- 총 10개의 샤드(Primary + Replica)
- 4개의 노드에 분산 저장됨
노드(Node) 저장된 샤드
Node-1 | 프라이머리 샤드 #1, 복제본 #3 |
Node-2 | 프라이머리 샤드 #2, 복제본 #4 |
Node-3 | 프라이머리 샤드 #3, 복제본 #5 |
Node-4 | 프라이머리 샤드 #4, 복제본 #1 |
✅ 샤드와 복제본은 반드시 서로 다른 노드에 저장됨 (데이터 손실 방지).
노드 장애 발생 시 샤드 복구
✅ 노드(Node) 유실 시 복제본 자동 복구
- 예를 들어, Node-3이 장애로 다운되면 프라이머리 샤드 #3, 복제본 #5가 손실됨.
- Elasticsearch는 남아 있는 복제본 중 하나를 프라이머리 샤드로 승격(Promotion)하고, 새로운 복제본을 생성하여 데이터 일관성을 유지함.
상태 설명
Node 장애 발생 | Node-3이 사라지면서 0번, 4번 샤드 유실 |
복제본 승격 | Node-1 또는 Node-2의 0번, 4번 복제본이 프라이머리 샤드로 승격 |
새로운 복제본 생성 | 남은 노드에서 새로운 복제본 샤드 자동 생성 |
✅ Elasticsearch는 클러스터 장애 발생 시 자동으로 데이터를 복구하여 가용성을 유지.
샤드 개수 설정 방법
✅ (1) 인덱스 생성 시 샤드 개수 지정
프라이머리 샤드 수는 인덱스를 처음 생성할 때만 설정 가능하며, 생성 후 변경할 수 없습니다.
복제본 샤드는 나중에 변경할 수 있습니다.
curl -XPUT "http://localhost:9200/books" -H 'Content-Type: application/json' -d'
{
"settings": {
"number_of_shards": 5,
"number_of_replicas": 1
}
}'
- 프라이머리 샤드 5개, 복제본 1개 설정 → 총 10개의 샤드 생성 (5 Primary + 5 Replica).
✅ (2) 복제본(Replica) 개수 변경
복제본 개수는 동적으로 변경할 수 있습니다.
curl -XPUT "http://localhost:9200/books/_settings" -H 'Content-Type: application/json' -d'
{
"number_of_replicas": 0
}'
- 복제본 개수를 0으로 설정하여 샤드 수를 줄임.
샤드 개수 설정 시 고려할 요소
✅ (1) 프라이머리 샤드 개수
- 너무 적게 설정하면: 검색 속도가 느려질 수 있음.
- 너무 많게 설정하면: 관리 오버헤드 증가 및 성능 저하 가능.
- 일반적으로 샤드 하나의 크기는 10~50GB로 유지하는 것이 성능적으로 유리.
✅ (2) 복제본 개수
- 복제본 개수를 늘리면 검색 성능 향상 및 장애 복구 가능.
- 하지만 쓰기 성능은 감소(데이터를 여러 번 복제해야 하므로).
샤드 관련 주요 API 정리
API 설명
GET /_cat/shards?v | 클러스터 내 모든 샤드 정보 조회 |
GET /_cat/indices?v | 클러스터 내 모든 인덱스 조회 |
PUT /{index}/_settings | 기존 인덱스의 복제본 개수 변경 |
DELETE /{index} | 인덱스 삭제 |
샤드 개수 설정의 장단점
항목 장점 단점
프라이머리 샤드 많음 | 병렬 검색 속도 증가 | 노드 리소스 사용 증가 |
프라이머리 샤드 적음 | 인덱스 관리가 쉬움 | 검색 성능 저하 가능 |
복제본 많음 | 검색 성능 향상, 장애 복구 가능 | 저장 공간 및 리소스 증가 |
복제본 적음 | 저장 공간 절약 | 장애 발생 시 데이터 손실 위험 |
결론
- Elasticsearch는 데이터를 저장할 때 샤드(Shard)라는 단위로 분산 저장함.
- 샤드는 **프라이머리 샤드(Primary Shard)와 복제본 샤드(Replica Shard)**로 구성됨.
- 복제본 샤드는 노드 장애 시 자동 복구를 수행하여 데이터 무결성을 유지.
- 프라이머리 샤드는 생성 후 변경할 수 없으므로 처음 설정할 때 신중해야 함.
- 복제본 샤드는 검색 성능과 장애 복구를 위해 중요한 요소이며, 운영 중에도 변경 가능.
'Elastic Search > Elastic 시스템 구조' 카테고리의 다른 글
[Elasticsearch] 클러스터 구성 (0) | 2025.02.01 |
---|---|
[Elasticsearch] 마스터 노드와 데이터 노드 (Master & Data Nodes) (0) | 2025.02.01 |