샤드 할당 필터링 — include/exclude/require로 샤드가 갈 노드를 통제하기
Elasticsearch Point in Time API 및 샤드 할당 필터링 공식 문서 종합 (웹 리서치, 2026) — Elastic 공식 문서(api/doc/elasticsearch/operation/operation-open-point-in-time, reference/elasticsearch/index-settings/shard-allocation) Elastic 공식 문서 Index-level shard allocation settings
이 모듈을 다 읽으면
- include/exclude/require 세 필터가 각각 어떤 조건으로 노드를 매칭하는지 설명할 수 있다
- 세 필터를 함께 쓸 때 노드가 만족해야 하는 조합 규칙을 설명할 수 있다
elasticsearch-learn-01에서 다룬 클러스터의 노드/샤드 구조를 전제로, 특정 인덱스의 샤드 사본이 어느 노드에 배치될 수 있는지를 노드 속성 기준으로 세밀하게 통제하는 인덱스 레벨 샤드 할당 필터링을 정리한다.
include/exclude/require — 세 가지 서로 다른 매칭 규칙
index.routing.allocation.include.{속성}은 노드의 그 속성이 쉼표로 나열된 값 중 '적어도 하나'와 일치하면 배치를 허용하고, exclude.{속성}은 반대로 지정된 값과 일치하는 노드를 배치 대상에서 제외한다. require.{속성}는 가장 엄격한 규칙으로, 지정된 모든 속성 조건을 노드가 전부 만족해야만 배치를 허용한다 — 즉 include는 '여러 후보 중 하나만 맞으면 OK', require는 '지정한 조건을 전부 만족해야 OK'라는 차이가 있다.
핵심 포인트
- include.{속성}: 노드 속성이 나열된 값 중 하나라도 일치하면 배치 허용 (OR 조건)
- exclude.{속성}: 일치하는 노드를 배치 대상에서 제외, require.{속성}: 지정된 모든 조건을 전부 만족해야 배치 허용(AND 조건) — include보다 훨씬 엄격
여러 필터를 함께 쓸 때의 조합 규칙
세 종류를 동시에 지정하면 노드는 다음 조건을 모두 동시에 만족해야 샤드를 받을 수 있다 — require 조건이 있으면 그 전부를 만족해야 하고, exclude 조건이 있으면 그중 어느 하나도 만족하면 안 되며, include 조건이 있으면 그중 적어도 하나는 만족해야 한다. 예를 들어 index.routing.allocation.require.size=big과 require.rack=rack1을 함께 지정하면, size 속성이 big'이면서 동시에' rack 속성이 rack1인 노드로만 그 인덱스를 옮길 수 있다.
핵심 포인트
- 여러 필터를 동시에 쓰면 노드가 require 전부 만족 + exclude 전부 불만족 + include 중 하나 이상 만족을 동시에 충족해야 함
- 예: require.size=big + require.rack=rack1을 함께 지정하면 두 조건을 '동시에' 만족하는 노드로만 인덱스 이동 가능
실무 용도 — 유지보수 대피와 hot/warm 계층
가장 흔한 실무 용도 중 하나는 특정 노드에서 유지보수 작업을 하기 전에 exclude로 그 노드를 배치 대상에서 빼 샤드들을 다른 노드로 미리 대피시키는 것이다. 또 다른 용도는 elasticsearch-learn-07에서 다룬 Hot-Warm 계층 구조를 실제로 구현하는 방법이기도 하다 — 노드에 node.attr로 hot/warm 같은 속성 태그를 붙여두고, ILM 정책이 인덱스를 계층 간 이동시킬 때 이 할당 필터링 설정으로 실제 물리적 노드 이동을 지시한다.
핵심 포인트
- 특정 노드 유지보수 전 exclude로 배치 대상에서 빼서 샤드를 다른 노드로 미리 대피시키는 게 흔한 용도
- elasticsearch-learn-07의 Hot-Warm 계층 구조를 실제로 구현하는 방법 — node.attr로 태그를 붙이고 ILM이 할당 필터링 설정을 조작해 물리적 이동을 지시