Skip to content

클러스터 구성 전략 node.roles, node.attr, 샤드 분산 설계

1. node.roles – 노드 역할 정의

OpenSearch 클러스터는 각 노드에 역할을 부여함으로써 기능을 분리하고 리소스를 효율적으로 분산시킬 수 있다.

역할 키워드 설명
클러스터 관리자 "cluster_manager" 클러스터 메타데이터(노드 등록, 마스터 선출 등)를 관리하는 노드이다.
데이터 노드 "data" 인덱스의 샤드 데이터를 저장하고 읽기 및 쓰기 요청을 처리한다.
인제스트 노드 "ingest" 데이터 수집 시 전처리 파이프라인을 적용하는 노드이다.
머신러닝 노드 "ml" 모델 서빙, 이상 탐지 등의 ML 기능을 수행하는 노드이다.
검색 전용 노드 "search" 읽기(검색) 작업만 수행하도록 제한할 수 있는 노드이다.
조정 전용 노드 빈 배열 [] 쿼리 라우팅 등만 수행하며 클러스터 메타데이터나 데이터 샤드를 가지지 않는다. 주로 OpenSearch Dashboards에서 사용한다.

권장 노드 배치

  • m1: ["cluster_manager"]

  • d1, d2: ["data", "ingest"]

  • ml1: ["ml"]

  • c1: []

2. node.attr – 사용자 정의 노드 속성

node.attr.<속성명>=<값> 형식으로 노드에 메타데이터를 설정할 수 있으며, 샤드 분산 정책, 수명 기반 티어링(Hot/Warm/Cold), 장애 도메인 분산 등에 활용된다.

속성명 예시 용도
zone zone-a, zone-b 가용 영역(AZ) 기반으로 샤드 복제본 분산에 사용된다.
temp hot, warm, cold 데이터의 수명 주기에 따라 핫/웜/콜드 티어를 지정한다.
rack rack1, rack2 물리적 장애 도메인 분산을 위해 설정할 수 있다.

예시 설정

node.attr.zone: zone-a
node.attr.temp: hot

3. 샤드 및 복제 설정 정책

OpenSearch는 인덱스를 생성할 때 Primary Shard와 Replica Shard를 지정하여 데이터를 분산 저장하고, 고가용성과 병렬처리를 보장한다.

주요 개념

  • Primary Shard: 원본 데이터를 저장하는 샤드이다.

  • Replica Shard: Primary의 복제본으로, 장애 복구 및 읽기 처리에 활용된다.

샤드 배치 공식

샤드 수 × (복제 수 + 1) = 클러스터가 필요로 하는 총 샤드 수

이 공식은 데이터 노드 수에 기반하여 적절한 샤드 구성을 판단하는 기준이 된다.

샤드 수 복제 수 총 샤드 수 최소 권장 데이터 노드 수
3 1 6 2개 이상
5 2 15 3개 이상

인덱스 생성 시 설정 예시

PUT /my-index
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  }
}

4. 샤드 할당 인식 설정

cluster.routing.allocation.awareness 설정은 샤드가 특정 node.attr 값(zone, rack 등)을 기준으로 고르게 분산되도록 강제하는 기능이다. 이를 통해 특정 zone이나 rack에 모든 primary/replica가 몰리는 것을 방지할 수 있다.

클러스터 수준 설정 예시

PUT /_cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.awareness.attributes": "zone"
  }
}

이 설정을 통해 OpenSearch는 샤드를 zone 속성에 따라 자동으로 균등 분산하게 된다.

5. 실전 예시 시나리오

클러스터를 다음과 같이 구성하고자 한다.

  • m1 노드는 클러스터 관리자 역할만 수행한다.

  • d1, d2는 데이터 저장 및 인제스트 작업을 처리한다.

  • ml1은 ML 기능만 수행한다.

  • c1은 대시보드 연결 전용이다.

  • zone-a, zone-b로 나눠 이중화하고, hot/warm 티어도 적용한다.

이때 노드 설정은 다음과 같다.

노드 node.roles node.attr.zone node.attr.temp
m1 ["cluster_manager"] zone-a 없음
d1 ["data", "ingest"] zone-a hot
d2 ["data", "ingest"] zone-b warm
ml1 ["ml"] zone-b 없음
c1 [] (coordinating only) zone-a 없음

그리고 클러스터 설정은 다음과 같이 적용한다.

PUT /_cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.awareness.attributes": "zone"
  }
}

인덱스를 만들 때는 다음과 같이 샤드와 복제본 수를 설정한다.

PUT /your-index
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  }
}

요약

항목 설명 예시
node.roles 노드의 역할 정의 ["data", "ingest"], ["ml"], []
node.attr 샤드 분산 및 티어링 정책 zone: zone-a, temp: hot
number_of_shards 인덱스의 기본 샤드 수 3
number_of_replicas 복제본 수 1
cluster.routing.allocation.awareness zone/rack 기반 분산 샤드 배치 "zone"