본문 바로가기
Dev/Article

Elasticsearch Shard, Rack

by Luigi.yoon 2025. 6. 27.

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