Elasticsearch에서의 rack과 sharding은 고가용성과 확장성, 성능 최적화에 매우 중요한 개념입니다.
✅ 1. Elasticsearch의 Shard (샤드)
🔷 샤드란?
Elasticsearch에서 인덱스는 너무 커질 수 있기 때문에 하나의 인덱스를 여러 개의 작은 단위로 나눈 것이 바로 **샤드(Shard)**입니다.
- Elasticsearch의 인덱스는 기본적으로:
- Primary Shard (기본 샤드)
- Replica Shard (복제 샤드)
로 구성됩니다.
🔷 Shard의 특징
항목 | 설명 |
기본 단위 | 데이터를 분산 저장하기 위한 최소 단위 |
Primary Shard | 원본 데이터를 저장 |
Replica Shard | Primary를 복제, 장애 복구나 조회 성능 향상에 사용 (Replica 가 증가하면 읽기속도 증가, 쓰기속도 감소, 용량 증가) |
분산 처리 | 각 샤드는 클러스터 내 여러 노드에 분산 배치되어 처리 |
병렬성 향상 | 여러 샤드에 분산해 쿼리 성능 개선 가능 |
권장 설정 | 크기 기준 10GB~50GB 사이 문서 건수 기준 2억 이하 |
🔷 샤드 구성 예
예: 인덱스 하나에 Primary Shard 3개, Replica Shard 1개 설정
→ 총 6개 샤드 (3개 원본, 3개 복제)
✅ 2. Elasticsearch의 Rack (Rack Awareness)
🔷 Rack Awareness란?
Elasticsearch의 고가용성을 위해 Replica Shard가 Primary Shard와 같은 물리적 장애 도메인에 존재하지 않도록 하는 설정입니다.
- 여기서 Rack은 실제 데이터센터의 "랙" 또는 "가용성 영역(AZ)" 등을 의미합니다.
- Elasticsearch는 node.attr.rack 설정을 통해 노드에 rack 태그를 부여하고, 샤드 배치 정책에 이 정보를 활용합니다.
🔷 Rack Awareness의 목적
목적 | 설명 |
장애 격리 | 동일 랙/노드에서 동시에 장애가 나도, Replica가 다른 Rack에 있으면 데이터 보존 가능 |
고가용성 | 장애 발생 시 자동 failover 가능 |
데이터 손실 방지 | 복제본이 다른 AZ, 물리 서버에 있도록 강제 |
🔷 설정 예시
# elasticsearch.yml
node.attr.rack: rack-a
그리고 cluster.routing.allocation.awareness.attributes: rack 설정을 통해 Replica는 다른 rack에 배치되도록 강제할 수 있음.
✅ Shard vs Rack 비교 요약
항목 | Shard | Rack Awareness |
개념 | 데이터를 쪼개어 분산 저장하는 단위 | 장애 도메인 분리 개념 (AZ, 랙) |
목적 | 성능 및 분산 저장 | 고가용성 및 장애 복구 |
주요 설정 | number_of_shards, number_of_replicas | node.attr.rack, cluster.routing.allocation.awareness.attributes |
적용 범위 | 인덱스 단위 | 노드/클러스터 단위 |
효과 | 쿼리 병렬화, 저장 분산 | 장애 시 안정적 복구 가능 |
✅ 실무 활용 팁
- 샤드 수는 너무 많아도 안 좋음 → Lucene 인스턴스가 늘어 자원 낭비
- Replica는 Rack-Aware하게 분산 배치 → 장애 대비
- Elasticsearch 클러스터 노드는 AZ마다 최소 1개씩 구성 → Rack Awareness 제대로 작동하게
✅ 1. Shard 설정은 자동? 직접?
항목 | 설명 |
✅ 기본 자동 | 인덱스를 생성하면 기본으로 1개의 primary shard와 1개의 replica shard가 생성됩니다. (1P + 1R) |
✅ 자동 분산 배치 | 클러스터 내 사용 가능한 노드에 샤드를 자동으로 분산합니다. |
⚠️ 그러나 "직접 설정"이 필요한 경우도 있음 |
- 대용량 인덱스일 경우 적절한 샤드 수를 직접 설정해야 함
- 샤드 수는 인덱스 생성 시점에만 설정 가능하며, 이후엔 변경 불가
- 너무 많은 샤드는 오히려 성능 저하를 일으킬 수 있음
🔹 예:
PUT /my-index
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
}
}
✅ 2. Rack Awareness는 직접 설정해야만 작동함
Elasticsearch는 노드의 rack(또는 AZ) 정보를 기본적으로 알지 못합니다.
🔷 필요한 설정 (예: 3개 AZ에 노드 구성 시)
1. 노드에 rack 속성 부여
# elasticsearch.yml on node1 (AZ1)
node.attr.rack: rack-a
2. 클러스터에 awareness 활성화
cluster.routing.allocation.awareness.attributes: rack
3. (선택) forced awareness 설정: 특정 rack 수만큼만 샤드가 생성되도록 강제
cluster.routing.allocation.awareness.force.rack.values: rack-a,rack-b,rack-c
'Dev > Article' 카테고리의 다른 글
Elasticsearch Tips (0) | 2025.06.30 |
---|---|
Feature Toggle(기능 토글) (0) | 2025.06.30 |
글리치 문제(Glitch) (1) | 2025.06.16 |
정지 문제(Halting Problem) (0) | 2025.06.11 |
컬러 함수 문제(Function Color Problem) (1) | 2025.06.11 |