엘라스틱서치:: Cluster-level shard allocation and routing settings
🙈

엘라스틱서치:: Cluster-level shard allocation and routing settings

Created
Jul 2, 2024 01:26 AM
Last edited time
Last updated July 11, 2024
Tags
ElasticSearch
Language
URL

Intro::

엘라스틱서치 공식문서 정리본입니다.
 

Cluster-level shard allocation and routing settings

샤드 할당은 노드에 샤드를 할당하는 프로세스입니다. 이는 초기 복구, 복제본 할당, 리밸런싱 또는 노드를 추가하거나 제거할 때 발생할 수 있습니다.
마스터의 주요 역할 중 하나는 어떤 샤드를 어떤 노드에 할당할지, 클러스터의 균형을 재조정하기 위해 언제 노드 간에 샤드를 이동할지 결정하는 것입니다.
샤드 할당 프로세스를 제어하는 데 사용할 수 있는 여러 가지 설정이 있습니다:
  • 클러스터 수준 샤드 할당 설정은 할당 및 리밸런싱 작업을 제어합니다.
  • 디스크 기반 샤드 할당 설정에서는 Elasticsearch가 사용 가능한 디스크 공간을 고려하는 방법과 관련 설정에 대해 설명합니다.
  • 샤드 할당 인식 및 강제 인식은 샤드를 여러 랙 또는 가용성 영역에 분하는 방법을 제어합니다.
  • 클러스터 수준의 샤드 할당 필터링을 사용하면 특정 노드 또는 노드 그룹을 할당에서 제외하여 해당 노드를 해제할 수 있습니다.
이 외에도 몇 가지 기타 클러스터 수준 설정이 있습니다.
 

Cluster-level shard allocation settings

다음 설정을 사용하여 샤드 할당 및 복구를 제어할 수 있습니다:
cluster.routing.allocation.enable
(Dynamic) 특정 종류의 샤드에 대한 할당을 활성화 또는 비활성화합니다:
  • all - (기본값) 모든 종류의 샤드에 대해 샤드 할당을 허용합니다.
  • primaries - 기본 샤드에 대해서만 샤드 할당을 허용합니다.
  • new_primaries - 새 인덱스의 기본 샤드에 대해서만 샤드 할당을 허용합니다.
  • none - 모든 인덱스에 대해 어떤 종류의 샤드 할당도 허용하지 않습니다.
이 설정은 노드를 다시 시작할 때 로컬 프라이머리 샤드의 복구에는 영향을 미치지 않습니다. 할당되지 않은 기본 샤드의 복사본이 있는 재시작된 노드는 할당 ID가 클러스터 상태의 활성 할당 ID 중 하나와 일치한다고 가정하여 해당 기본 샤드를 즉시 복구합니다.
cluster.routing.allocation.same_shard.host
(Dynamic) true이면 샤드의 여러 복사본이 동일한 호스트의 서로 다른 노드, 즉 동일한 네트워크 주소를 가진 노드에 할당되는 것을 금지합니다. 기본값은 false로, 샤드 사본이 때때로 동일한 호스트의 노드에 할당될 수 있습니다. 이 설정은 각 호스트에서 여러 노드를 실행하는 경우에만 관련이 있습니다.
cluster.routing.allocation.node_concurrent_incoming_recoveries
(Dynamic) 노드에서 동시에 수행할 수 있는 수신 샤드 복구의 수입니다. 들어오는 복구는 대상 샤드(샤드를 재배치하지 않는 경우 대부분 복제본)가 노드에 할당되는 복구입니다. 기본값은 2입니다. 이 설정을 늘리면 샤드 이동이 클러스터의 다른 활동에 성능 영향을 미칠 수 있지만 샤드 이동이 눈에 띄게 빨리 완료되지는 않을 수 있습니다. 이 설정을 기본값인 2에서 조정하지 않는 것이 좋습니다.
cluster.routing.allocation.node_concurrent_outgoing_recoveries
(Dynamic) 노드에서 동시에 수행할 수 있는 나가는 샤드 복구의 수입니다. 나가는 복구는 소스 샤드(샤드를 재배치하지 않는 한 대부분 기본 샤드)가 노드에 할당되는 복구입니다. 기본값은 2입니다. 이 설정을 늘리면 샤드 이동이 클러스터의 다른 활동에 성능 영향을 미칠 수 있지만 샤드 이동이 눈에 띄게 빨리 완료되지는 않을 수 있습니다. 이 설정을 기본값인 2에서 조정하지 않는 것이 좋습니다.
cluster.routing.allocation.node_concurrent_recoveries
(Dynamic) cluster.routing.allocation.node_concurrent_incoming_recoveries와 cluster.routing.allocation.node_concurrent_outgoing_recoveries를 모두 설정하는 바로 가기입니다. 이 설정의 값은 더 구체적인 설정이 구성되지 않은 경우에만 적용됩니다. 기본값은 2입니다. 이 설정을 높이면 샤드 이동이 클러스터의 다른 활동에 성능에 영향을 미칠 수 있지만 샤드 이동이 눈에 띄게 빨리 완료되지는 않을 수 있습니다. 이 설정을 기본값인 2에서 조정하지 않는 것이 좋습니다.
cluster.routing.allocation.node_initial_primaries_recoveries
(Dynamic) 복제본 복구는 네트워크를 통해 이루어지지만, 노드 재시작 후 할당되지 않은 기본 복구는 로컬 디스크의 데이터를 사용합니다. 각 노드에서 더 많은 초기 프라이머리 복구가 병렬로 수행될 수 있도록 복구 속도가 빨라야 합니다. 기본값은 4입니다. 이 설정을 늘리면 샤드 복구가 클러스터의 다른 활동에 성능에 영향을 미칠 수 있지만 샤드 복구가 눈에 띄게 빨리 완료되지는 않을 수 있습니다. 이 설정을 기본값인 4에서 조정하지 않는 것이 좋습니다.
 

Shard rebalancing settings

클러스터는 각 노드에 동일한 수의 샤드가 있고 모든 노드에 동일한 리소스가 필요하며 어떤 인덱스의 샤드가 어느 한 노드에 집중되지 않을 때 균형이 잡힌 것입니다. Elasticsearch는 클러스터의 균형을 개선하기 위해 클러스터의 노드 간에 샤드를 이동하는 리밸런싱이라는 자동 프로세스를 실행합니다. 리밸런싱은 allocation filtering 및 forced awareness과 같은 다른 모든 샤드 할당 규칙을 따르기 때문에 클러스터의 균형을 완전히 맞추지 못할 수 있습니다. 이 경우 리밸런싱은 사용자가 구성한 규칙 내에서 가능한 한 가장 균형 잡힌 클러스터를 달성하기 위해 노력합니다. 데이터 티어를 사용하는 경우, Elasticsearch는 자동으로 allocation filtering 규칙을 적용하여 각 샤드를 적절한 티어 내에 배치합니다. 이러한 규칙은 밸런서가 각 티어 내에서 독립적으로 작동한다는 것을 의미합니다.
다음 설정을 사용하여 클러스터 전체에서 샤드의 리밸런싱을 제어할 수 있습니다:
cluster.routing.allocation.allow_rebalance
(Dynamic) 샤드 리밸런싱 허용 시기를 지정합니다:
  • always - 항상 리밸런싱을 허용합니다.
  • indices_primaries_active - 클러스터의 모든 프라이머리가 할당된 경우에만.
  • indices_all_active - (기본값) 클러스터의 모든 샤드(프라이머리 및 복제본)가 할당된 경우에만.
cluster.routing.rebalance.enable
(Dynamic) 특정 종류의 샤드에 대해 리밸런싱을 활성화 또는 비활성화합니다:
  • all- (기본값) 모든 종류의 샤드에 대해 샤드 밸런싱을 허용합니다.
  • primaries- 프라이머리 샤드에 대해서만 샤드 밸런싱을 허용합니다.
  • replicas - 복제 샤드에 대해서만 샤드 밸런싱을 허용합니다.
  • none - 모든 인덱스에 대해 어떤 종류의 샤드 밸런싱도 허용하지 않습니다.
리밸런싱은 중단 후 클러스터가 건강하고 완전히 복원력 있는 상태로 돌아가도록 하는 데 중요합니다. 이 설정을 조정한 경우 가능한 한 빨리 모두로 다시 설정하는 것을 잊지 마세요.
cluster.routing.allocation.cluster_concurrent_rebalance
(Dynamic) 전체 클러스터에서 허용되는 샤드 리밸런싱 동시 횟수를 정의합니다. 기본값은 2입니다. 이 설정은 클러스터의 불균형으로 인한 동시 샤드 재배치 횟수만 제어합니다. 이 설정은 allocation filtering 또 forced awareness으로 인한 샤드 재배치를 제한하지 않습니다. 이 설정을 늘리면 클러스터가 노드 간에 샤드를 이동하는 데 추가 리소스를 사용할 수 있으므로 일반적으로 이 설정을 기본값인 2에서 조정하지 않는 것이 좋습니다.
cluster.routing.allocation.type
클러스터 밸런스를 계산하는 데 사용되는 알고리즘을 선택합니다. 기본값은 원하는 잔액 할당자를 선택하는 desired_balance입니다. 이 할당자는 클러스터에서 샤드의 원하는 밸런스 계산하는 백그라운드 작업을 실행합니다. 이 백그라운드 작업이 완료되면 Elasticsearch는 샤드를 원하는 위치로 이동합니다.
레거시 밸런스드 할당자를 선택하려면 밸런스드로 설정할 수도 있습니다. 이 얼로케이터는 8.6.0 이전 버전의 Elasticsearch에서 기본 얼로케이터였습니다. 포그라운드에서 실행되므로 마스터가 다른 작업을 병렬로 수행하는 것을 방지합니다. 클러스터의 균형을 즉시 개선하는 소수의 샤드 이동을 선택하는 방식으로 작동하며, 이러한 샤드 이동이 완료되면 다시 실행되어 이동시킬 또 다른 몇 개의 샤드를 선택합니다. 이 할당자는 클러스터의 현재 상태만을 기반으로 결정을 내리기 때문에, 클러스터의 균형을 맞추는 동안 샤드를 여러 번 이동하는 경우도 있습니다.
 

Shard balancing heuristics settings

리밸런싱은 샤드 할당을 기반으로 각 노드의 가중치를 계산한 다음, 노드 간에 샤드를 이동하여 무거운 노드의 가중치를 줄이고 가벼운 노드의 가중치를 높이는 방식으로 작동합니다. 클러스터는 어떤 노드의 가중치가 다른 노드의 가중치에 구성 가능한 임계값 이상으로 가까워질 수 있는 샤드 이동이 없을 때 균형이 잡힙니다.
노드의 가중치는 보유하고 있는 샤드의 수와 디스크에 있는 샤드의 크기와 샤드에 대한 쓰기 트래픽을 지원하는 데 필요한 스레드 수로 표현되는 해당 샤드의 총 예상 리소스 사용량에 따라 달라집니다. Elasticsearch는 롤오버에 의해 생성될 때 데이터 스트림에 속하는 샤드의 리소스 사용량을 추정합니다. 새 샤드의 예상 디스크 크기는 데이터 스트림에 있는 다른 샤드의 평균 크기입니다. 새 샤드의 예상 쓰기 로드는 데이터 스트림에 있는 최근 샤드의 실제 쓰기 로드의 가중 평균입니다. 데이터 스트림의 쓰기 인덱스에 속하지 않는 샤드는 예상 쓰기 부하가 0입니다.
다음 설정은 Elasticsearch가 이러한 값을 각 노드의 가중치에 대한 전체 측정값으로 결합하는 방법을 제어합니다.
cluster.routing.allocation.balance.threshold
(float, Dynamic) 리밸런싱 샤드 이동을 트리거하는 최소 가중치입니다. 기본값은 1.0f입니다. 이 값을 높이면 Elasticsearch가 샤드 리밸런싱을 더 빨리 중지하여 클러스터가 더 불균형한 상태로 남게 됩니다.
cluster.routing.allocation.balance.shard
(float, Dynamic) 각 노드에 할당된 총 샤드 수에 대한 가중치 계수를 정의합니다. 기본값은 0.45f입니다. 이 값을 높이면 다른 균형 조정 변수보다 먼저 노드 간에 총 샤드 수를 균등화하려는 Elasticsearch의 경향이 증가합니다.
cluster.routing.allocation.balance.index
(float, Dynamic) 각 노드에 할당된 인덱스당 샤드 수에 대한 가중치 계수를 정의합니다. 기본값은 0.55f입니다. 이 값을 높이면 Elasticsearch가 다른 균형 조정 변수보다 먼저 노드 간에 각 인덱스의 샤드 수를 균등화하는 경향이 증가합니다.
cluster.routing.allocation.balance.disk_usage
(float, Dynamic) 예상 디스크 크기(바이트)에 따라 샤드 밸런싱을 위한 가중치 계수를 정의합니다. 기본값은 2e-11f입니다. 이 값을 높이면 다른 균형 조정 변수보다 먼저 노드 간에 총 디스크 사용량을 균등화하려는 Elasticsearch의 경향이 높아집니다.
cluster.routing.allocation.balance.write_load
(float, Dynamic) 샤드에 필요한 예상 인덱싱 스레드 수로 각 샤드의 쓰기 부하에 대한 가중치 계수를 정의합니다. 기본값은 10.0f입니다. 이 값을 높이면 Elasticsearch가 다른 균형 조정 변수보다 먼저 노드 간에 총 쓰기 부하를 균등화하려는 경향이 증가합니다.
NOTE
  • 대규모 클러스터의 경우 항상 완벽한 균형 상태를 유지할 필요가 없을 수 있습니다. 클러스터가 완벽한 균형을 이루는 데 필요한 모든 샤드 이동을 수행하는 것보다 어느 정도 불균형 상태로 작동하는 것이 리소스 집약적입니다. 그렇다면 cluster.routing.allocation.balance.threshold 값을 늘려 노드 간 허용 가능한 불균형을 정의하세요. 예를 들어 노드당 평균 샤드가 500개이고 노드 간에 5%(일반적인 샤드 25개)의 차이를 허용할 수 있는 경우, cluster.routing.allocation.balance.threshold를 25로 설정합니다.
  • 휴리스틱 가중치 계수 설정 값은 조정하지 않는 것이 좋습니다. 기본값은 모든 합리적인 클러스터에서 잘 작동합니다. 다른 값을 사용하면 현재 균형이 어느 정도 개선될 수 있지만, 향후 예기치 않은 문제가 발생하거나 예기치 않은 중단을 원활하게 처리하지 못할 수 있습니다.
  • 밸런싱 알고리즘의 결과와 관계없이 강제 인식 및 할당 필터링과 같은 할당 규칙으로 인해 재밸런싱이 허용되지 않을 수도 있습니다. Cluster allocation explain API를 사용하여 현재 샤드 할당을 설명하세요.
 

Disk-based shard allocation settings

디스크 기반 샤드 할당기는 필요 이상으로 많은 샤드 이동을 수행하지 않고도 모든 노드가 충분한 디스크 공간을 확보할 수 있도록 합니다. 이는 낮은 워터마크와 높은 워터마크라고 하는 한 쌍의 임계값을 기준으로 샤드를 할당합니다. 주요 목표는 어떤 노드도 높은 워터마크를 초과하지 않도록 하거나 적어도 그러한 초과가 일시적인 것임을 보장하는 것입니다. 노드가 높은 워터마크를 초과하는 경우 Elasticsearch는 샤드 중 일부를 클러스터의 다른 노드로 이동하여 이 문제를 해결합니다.
NOTE
노드가 때때로 일시적으로 높은 워터마크를 초과하는 것은 정상적인 현상입니다.
또한 할당자는 낮은 워터마크를 초과하는 노드에 더 많은 샤드를 할당하는 것을 금지하여 노드가 높은 워터마크에서 벗어나지 않도록 합니다. 중요한 것은 모든 노드가 낮은 워터마크를 초과한 경우 새 샤드를 할당할 수 없으며 Elasticsearch는 디스크 사용량을 높은 워터마크 아래로 유지하기 위해 노드 간에 샤드를 이동할 수 없다는 것입니다. 클러스터의 총 디스크 공간이 충분한지, 그리고 항상 낮은 워터마크 아래에 일부 노드가 있는지 확인해야 합니다.
디스크 기반 샤드 할당자에 의해 트리거된 샤드 이동은 할당 필터링 및 강제 인식과 같은 다른 모든 샤드 할당 규칙도 충족해야 합니다. 이러한 규칙이 너무 엄격하면 노드의 디스크 사용량을 제어하는 데 필요한 샤드 이동이 차단될 수도 있습니다. 데이터 티어를 사용하는 경우 Elasticsearch는 적절한 티어 내에 샤드를 배치하도록 할당 필터링 규칙을 자동으로 구성하므로, 디스크 기반 샤드 할당기는 각 티어 내에서 독립적으로 작동합니다.
노드가 샤드를 다른 곳으로 옮길 수 있는 속도보다 더 빨리 디스크를 채우고 있다면 디스크가 완전히 채워질 위험이 있습니다. 이를 방지하기 위해 최후의 수단으로, 디스크 사용량이 플러드 단계 워터마크에 도달하면 Elasticsearch는 영향을 받는 노드에서 샤드가 있는 인덱스에 대한 쓰기를 차단합니다. 또한 클러스터의 다른 노드로 샤드를 계속 이동합니다. 영향을 받는 노드의 디스크 사용량이 높은 워터마크 아래로 떨어지면 Elasticsearch는 자동으로 쓰기 블록을 제거합니다. 영구적인 워터마크 오류를 해결하려면 워터마크 오류 해결을 참조하세요.
TIP
클러스터의 노드들이 매우 다른 양의 디스크 공간을 사용하는 것은 정상입니다. 클러스터의 균형은 각 노드의 샤드 수, 해당 샤드가 속한 인덱스, 디스크 크기와 CPU 사용량 측면에서 각 샤드의 리소스 필요량 등 여러 가지 요소의 조합에 따라 달라집니다. Elasticsearch는 이러한 모든 요소를 서로 상쇄해야 하며, 이러한 모든 요소의 조합을 볼 때 균형 잡힌 클러스터는 그 중 하나에만 주의를 집중하면 균형 잡힌 것처럼 보이지 않을 수 있습니다.
다음 설정을 사용하여 디스크 기반 할당을 제어할 수 있습니다:
cluster.routing.allocation.disk.threshold_enabled
(Dynamic) 기본값은 true입니다. 디스크 할당 결정자를 비활성화하려면 false로 설정합니다. 비활성화하면 기존 index.blocks.read_only_allow_delete 인덱스 블록도 제거됩니다.
cluster.routing.allocation.disk.watermark.low.max_headroom
(Dynamic) 낮은 워터마크의 최대 헤드룸을 제어합니다(백분율/비율 값의 경우). cluster.routing.allocation.disk.watermark.low가 명시적으로 설정되지 않은 경우 기본값은 200GB입니다. 이 값은 필요한 여유 공간의 양을 제한합니다.
cluster.routing.allocation.disk.watermark.high.max_headroom
(Dynamic) 높은 워터마크의 최대 헤드룸을 제어합니다(백분율/비율 값의 경우). cluster.routing.allocation.disk.watermark.high가 명시적으로 설정되지 않은 경우 기본값은 150GB입니다. 이 값은 필요한 여유 공간의 양을 제한합니다.
cluster.routing.allocation.disk.watermark.enable_for_single_data_node
(Static) 이전 릴리스에서는 할당 결정을 내릴 때 단일 데이터 노드 클러스터에 대한 디스크 워터마크를 무시하는 것이 기본 동작이었습니다. 이 동작은 7.14부터 더 이상 사용되지 않으며 8.0에서 제거되었습니다. 이제 이 설정에 유효한 유일한 값은 true입니다. 이 설정은 향후 릴리스에서 제거될 예정입니다.
cluster.routing.allocation.disk.watermark.flood_stage.max_headroom
(Dynamic) 플러드 스테이지 워터마크의 최대 헤드룸을 제어합니다(백분율/비율 값의 경우). cluster.routing.allocation.disk.watermark.flood_stage가 명시적으로 설정되지 않은 경우 기본값은 100GB입니다. 이 값은 필요한 여유 공간의 양을 제한합니다.
NOTE 백분율/비율 값과 바이트 값은 cluster.routing.allocation.disk.watermark.low, cluster.routing.allocation.disk.watermark.high 및 cluster.routing.allocation.disk.watermark.flood_stage 설정에서 혼합하여 사용할 수 없습니다. 모든 값이 백분율/비율 값으로 설정되거나 모두 바이트 값으로 설정됩니다. 이 적용은 Elasticsearch가 설정이 내부적으로 일관성이 있는지 확인하여 낮은 디스크 임계값이 높은 디스크 임계값보다 작고 높은 디스크 임계값이 플러드 단계 임계값보다 작은지 확인하기 위한 것입니다. 최대 헤드룸 값에 대해서도 비슷한 비교 검사가 수행됩니다.
cluster.info.update.interval
(Dynamic) 클러스터의 각 노드에 대해 Elasticsearch가 디스크 사용량을 확인하는 빈도입니다. 기본값은 30초입니다.
NOTE 백분율 값은 사용된 디스크 공간을 나타내고 바이트 값은 사용 가능한 디스크 공간을 나타냅니다. 이는 높음과 낮음의 의미가 뒤바뀌기 때문에 혼란스러울 수 있습니다. 예를 들어, 낮은 워터마크는 10GB로 설정하고 높은 워터마크는 5GB로 설정하는 것이 합리적이지만 그 반대의 경우는 그렇지 않습니다.
로우 워터마크는 최소 100기가바이트 여유 용량, 하이 워터마크는 최소 50기가바이트 여유 용량, 플러드 스테이지 워터마크는 10기가바이트 여유 용량으로 업데이트하고 클러스터에 대한 정보를 1분마다 업데이트하는 예시입니다:
PUT _cluster/settings { "persistent": { "cluster.routing.allocation.disk.watermark.low": "100gb", "cluster.routing.allocation.disk.watermark.high": "50gb", "cluster.routing.allocation.disk.watermark.flood_stage": "10gb", "cluster.info.update.interval": "1m" } }
워터마크의 최대 헤드룸 설정과 관련하여, 워터마크 설정이 백분율/비율인 경우에만 적용된다는 점에 유의하시기 바랍니다. 최대 헤드룸 값의 목적은 각 워터마크에 도달하기 전에 필요한 디스크 여유 공간을 제한하는 것입니다. 이는 특히 디스크가 큰 서버에 유용하며, 백분율/비율 워터마크가 큰 디스크 여유 공간 요구 사항을 의미할 수 있고 최대 헤드룸을 사용하여 필요한 디스크 여유 공간의 양을 제한할 수 있습니다. 플러드 워터마크의 기본 설정을 예로 들어 보겠습니다. 기본값은 95%이며, 플러드 최대 헤드룸 설정의 기본값은 100GB입니다.
  • 예를 들어 100GB의 작은 디스크의 경우, 5GB는 최대 헤드룸 값인 100GB보다 작기 때문에 플러드 워터마크는 95%, 즉 5GB의 여유 공간에 도달하게 됩니다.
  • 100TB와 같이 더 큰 디스크의 경우, 플러드 워터마크는 100GB의 여유 공간에 도달합니다. 이는 95% 플러드 워터마크에만 5TB의 디스크 여유 공간이 필요하지만 최대 헤드룸 설정이 100GB로 제한되어 있기 때문입니다.
마지막으로, 최대 헤드룸 설정은 해당 워터마크 설정이 명시적으로 설정되지 않은 경우에만 기본값을 갖습니다(따라서 기본 백분율 값을 갖습니다). 워터마크가 명시적으로 설정된 경우 최대 헤드룸 설정에는 기본값이 적용되지 않으므로 원하는 경우 명시적으로 설정해야 합니다.

Shard allocation awareness

사용자 정의 노드 속성을 인식 속성으로 사용하여 샤드를 할당할 때 Elasticsearch가 물리적 하드웨어 구성을 고려하도록 할 수 있습니다. 어떤 노드가 동일한 물리적 서버, 동일한 랙 또는 동일한 영역에 있는지 Elasticsearch가 알고 있으면 기본 샤드와 해당 복제 샤드를 분산하여 장애 발생 시 모든 샤드 복사본이 손실될 위험을 최소화할 수 있습니다.
cluster.routing.allocation.awareness.attributes 설정으로 샤드 할당 인식이 활성화된 경우, 샤드는 지정된 인식 속성에 대해 설정된 값을 가진 노드에만 할당됩니다. 여러 인식 속성을 사용하는 경우, Elasticsearch는 샤드를 할당할 때 각 속성을 개별적으로 고려합니다.
 
NOTE
속성 값의 수에 따라 각 위치에 할당되는 샤드 복사본 수가 결정됩니다. 각 위치의 노드 수가 불균형하고 복제본이 많으면 복제본 샤드가 할당되지 않은 채로 남아있을 수 있습니다.
 

Enabling shard allocation awareness

샤드 할당 인식을 활성화하려면:
  1. 사용자 정의 노드 속성으로 각 노드의 위치를 지정합니다. 예를 들어, Elasticsearch가 여러 랙에 샤드를 배포하도록 하려는 경우, rack_id라는 인식 속성을 사용할 수 있습니다.
    1. 사용자 정의 속성은 두 가지 방법으로 설정할 수 있습니다:
      • elasticsearch.yml 수정
      node.attr.rack_id: rack_one
      • 노드를 기동할때 -E 옵션 사용
      ./bin/elasticsearch -Enode.attr.rack_id=rack_one
  1. 모든 마스터 적격 노드의 elasticsearch.yml 구성 파일에서 cluster.routing.allocation.awareness.attributes을 설정하여 샤드를 할당할 때 하나 이상의 인식 속성을 고려하도록 Elasticsearch에 지시하세요.
    1. cluster.routing.allocation.awareness.attributes: rack_id
      클러스터 업데이트 설정 API를 사용하여 클러스터의 인식 속성을 설정하거나 업데이트할 수도 있습니다:
      PUT /_cluster/settings { "persistent" : { "cluster.routing.allocation.awareness.attributes" : "rack_id" } }
이 예제 구성에서 node.attr.rack_id가 rack_one으로 설정된 두 개의 노드를 시작하고 각 기본 샤드 5개와 각 기본의 복제본 1개로 인덱스를 생성하면 모든 기본과 복제본이 두 노드에 할당됩니다.
그림 1. 동일한 랙의 두 노드에 할당된 모든 프라이머리 및 복제본
그림 1. 동일한 랙의 두 노드에 할당된 모든 프라이머리 및 복제본
node.attr.rack_id가 rack_two로 설정된 두 개의 노드를 추가하면 Elasticsearch는 샤드를 새 노드로 이동하여 (가능한 경우) 동일한 샤드의 복사본이 동일한 랙에 두 개 있지 않도록 합니다.
그림 2. 2개의 랙에서 4개의 노드에 할당된 기본 및 복제본, 동일한 랙에 동일한 샤드의 복제본이 두 개가 없는 경우
그림 2. 2개의 랙에서 4개의 노드에 할당된 기본 및 복제본, 동일한 랙에 동일한 샤드의 복제본이 두 개가 없는 경우
rack_two에 장애가 발생하여 해당 노드가 모두 다운되는 경우, 기본적으로 Elasticsearch는 손실된 샤드 복사본을 rack_one의 노드에 할당합니다. 특정 샤드의 여러 복사본이 같은 위치에 할당되는 것을 방지하려면 강제 인식을 활성화하면 됩니다.
 
 
 
 
 
 
 
 
 

References::

Loading Comments...