Red 클러스터 상태 해결: 단계별 Elasticsearch 문제 해결 가이드

'red' 또는 'yellow' Elasticsearch 클러스터 상태 문제를 해결하세요. 이 종합 가이드는 할당되지 않은 샤드, 불충분한 디스크 공간 및 노드 장애와 같은 일반적인 문제에 대한 단계별 진단법을 제공합니다. `_cluster/health` 및 `_cluster/allocation/explain`과 같은 필수 API를 사용하여 근본 원인을 파악하고 효과적인 해결책을 구현하여 Elasticsearch 클러스터가 항상 정상적이고 가용하도록 유지하는 방법을 배웁니다.

32 조회수

빨간색 클러스터 상태 해결: 단계별 Elasticsearch 문제 해결 가이드

Elasticsearch 클러스터의 상태는 운영 효율성과 데이터 가용성에 매우 중요합니다. 클러스터 상태가 빨간색 또는 노란색으로 변경되면 즉각적인 주의가 필요한 근본적인 문제가 발생했음을 나타냅니다. 빨간색 상태는 인덱스 또는 샤드가 할당되지 않았음을 의미하며, 이는 데이터에 액세스할 수 없거나 작업이 실패할 수 있음을 나타냅니다. 노란색 상태는 기본 샤드는 할당되었지만 일부 복제본 샤드가 할당되지 않았음을 나타냅니다. 빨간색보다 덜 중요하지만 데이터 내구성에도 여전히 위험을 초래합니다. 이 가이드에서는 이러한 일반적인 Elasticsearch 클러스터 상태 문제를 진단하고 해결하는 체계적인 접근 방식을 제공합니다.

이러한 상태 문제의 근본 원인을 이해하는 것이 해결의 첫걸음입니다. 일반적인 원인으로는 디스크 공간 부족, 노드 과부하, 네트워크 문제 또는 샤드 할당과 관련된 잘못된 구성이 있습니다. 아래에 설명된 진단 단계를 따르면 정확한 문제를 파악하고 효과적인 솔루션을 구현하여 클러스터를 정상적인 초록색 상태로 복원할 수 있습니다.

Elasticsearch 클러스터 상태 이해

Elasticsearch는 클러스터 상태 및 샤드 할당에 대한 스냅샷을 제공하는 클러스터 상태 API를 제공합니다. 이 API는 상태 문제 진단에 있어 주요 도구입니다.

GET _cluster/health

이 명령의 출력에는 status 필드가 포함되며, 이는 green(초록색), yellow(노란색) 또는 red(빨간색)이 될 수 있습니다. 또한 활성 샤드 및 할당되지 않은 샤드 수에 대한 정보도 제공합니다.

  • Green (초록색): 모든 기본 및 복제본 샤드가 할당되고 올바르게 작동합니다.
  • Yellow (노란색): 모든 기본 샤드가 할당되었지만 일부 복제본 샤드가 할당되지 않았습니다.
  • Red (빨간색): 하나 이상의 기본 샤드가 할당되지 않아 해당 샤드에 대한 데이터에 액세스할 수 없습니다.

빨간색/노란색 상태에 대한 일반적인 원인 및 문제 해결 단계

클러스터가 green(초록색)이 아닐 때는 조사할 때입니다. 할당되지 않은 샤드의 가장 일반적인 이유는 다음과 같으며 해결 방법은 다음과 같습니다.

1. 디스크 공간 부족

Elasticsearch에는 디스크가 꽉 차서 데이터가 손상되는 것을 방지하기 위한 안전 장치가 있습니다. 노드에 디스크 공간이 부족하면 새 샤드가 할당되거나 기존 샤드가 복구되는 것을 방지합니다.

진단:

  • 각 노드의 디스크 사용량을 확인합니다.
  • 클러스터 할당 설명 API(_cluster/allocation/explain)를 사용하여 샤드가 할당되지 않은 이유를 이해합니다.
GET _cluster/allocation/explain

이 API는 종종 디스크 워터마크를 가리키는 자세한 이유를 제공합니다.

해결:

  • 디스크 공간 확보: 오래된 인덱스를 삭제하거나, 세그먼트 병합을 수행하거나, 불필요한 데이터를 제거합니다.
  • 디스크 공간 추가: 노드의 저장 용량을 늘립니다.
  • 디스크 워터마크 구성: Elasticsearch가 디스크가 꽉 찼다고 판단하기 시작하는 시점을 제어하기 위해 cluster.routing.allocation.disk.watermark.low, high, flood_stage 설정을 조정합니다. 이러한 설정은 근본적인 용량 문제를 가릴 수 있으므로 주의해서 사용하십시오.

2. 노드가 클러스터를 떠남 (노드 제외)

노드는 네트워크 문제, 충돌 또는 의도적으로 제거되어 클러스터를 떠날 수 있습니다. 샤드(특히 기본 샤드)를 보유한 노드가 떠나면 해당 샤드는 할당되지 않습니다.

진단:

  • 최근에 떠난 노드에 대한 클러스터 로그를 확인합니다.
  • 노드 간 네트워크 연결을 모니터링합니다.
  • 모든 노드가 서로를 검색할 수 있는지 확인합니다 (discovery.seed_hostscluster.initial_master_nodes 설정을 확인).

해결:

  • 노드 재시작: 노드가 충돌했거나 응답하지 않는 경우 재시작해 봅니다.
  • 네트워크 문제 해결: 노드 간 네트워크 연결 문제를 해결합니다.
  • 노드 다시 추가: 노드가 의도적으로 제거된 경우 클러스터에 다시 추가하기 전에 올바르게 구성되었는지 확인합니다.

3. 샤드 할당 필터링 및 인식

부적절하게 구성된 샤드 할당 규칙은 샤드가 사용 가능한 노드에 할당되지 못하게 할 수 있습니다.

진단:

  • cluster.routing.allocation.* 설정을 검토합니다. 특히 cluster.routing.allocation.include, excluderequire 필터를 확인합니다.
  • 영역 또는 랙 인식을 사용하는 경우 cluster.routing.allocation.awareness.attributes를 확인합니다.

해결:

  • 할당 필터 조정: 필터를 수정하여 샤드가 적절한 노드에 할당되도록 허용합니다.
  • 인식 속성 수정: 사용 중인 경우 노드가 인식 속성으로 올바르게 태그되었는지, 그리고 할당 규칙이 이를 존중하는지 확인합니다.

4. 할당을 위한 디스크 공간 부족 (인덱스 생성 후)

디스크가 꽉 차지 않았더라도 Elasticsearch는 할당 후 디스크가 높은 워터마크를 초과할 것으로 예상하면 샤드 할당을 방지할 수 있습니다. 이는 디스크 워터마크와 관련이 있지만 특히 새 할당에 영향을 미칩니다.

진단:

  • _cluster/allocation/explain API가 매우 유용합니다.
  • 예상 샤드 크기와 비교하여 사용 가능한 여유 공간을 확인합니다.

해결:

  • 일반적인 디스크 공간 문제와 유사합니다. 공간을 확보하거나, 추가 스토리지를 추가하거나, 워터마크를 주의해서 조정합니다.

5. 샤드 크기 및 노드 용량

매우 큰 샤드 또는 많은 수의 샤드는 노드 리소스(CPU, 메모리)에 부담을 주어 할당에 영향을 줄 수 있습니다. 또한 노드가 샤드 제한(cluster.routing.allocation.total_shards_per_node)에 도달하면 새 샤드가 해당 노드에 할당되지 않습니다.

진단:

  • 샤드 크기를 확인합니다 (GET _cat/shards?v).
  • 노드 리소스 사용량(CPU, 메모리)을 모니터링합니다.
  • cluster.routing.allocation.total_shards_per_node 설정을 검토합니다.

해결:

  • 샤드 크기 줄이기: 샤드 수가 적거나 샤드 크기가 작은 인덱스로 데이터를 다시 인덱싱하는 것을 고려합니다. 일반적으로 샤드 크기를 10GB에서 50GB 사이로 유지하는 것이 좋습니다.
  • 노드 용량 늘리기: 더 강력한 노드 또는 더 많은 메모리/CPU를 가진 노드를 추가합니다.
  • 샤드 제한 조정: 필요한 경우 리소스가 충분하다면 cluster.routing.allocation.total_shards_per_node를 늘립니다.

6. 마스터 노드 문제

불안정한 마스터 노드는 샤드 할당 문제를 일으킬 수 있습니다. 마스터를 사용할 수 없거나 해당 작업을 수행할 수 없는 경우 샤드가 할당되지 않을 수 있습니다.

진단:

  • 마스터 관련 오류 또는 경고에 대해 클러스터 로그를 확인합니다.
  • 분할 브레인 시나리오를 피하기 위해 홀수 개의 마스터 후보 노드(일반적으로 3개 또는 5개)가 있는지 확인합니다.
  • 마스터 후보 노드가 마스터를 선출할 수 있는지 확인합니다.

해결:

  • 마스터 안정화: 마스터 후보 노드가 정상이고, 충분한 리소스가 있으며, 연결이 잘 되어 있는지 확인합니다.
  • initial_master_nodes 수정: 클러스터를 처음 시작할 때 이 설정이 올바르게 구성되었는지, 그리고 안정적으로 유지되는지 확인합니다.

_cluster/allocation/explain을 사용한 고급 문제 해결

_cluster/allocation/explain API는 특정 샤드가 할당되지 않은 이유를 이해하는 데 가장 강력한 도구입니다.

예시:

GET _cluster/allocation/explain
{
  "index": "my-index",
  "shard": 0,
  "primary": true
}

이렇게 하면 my-index의 기본 샤드 0이 할당되지 않는 이유를 설명하는 자세한 JSON 출력이 반환됩니다. 할당되지 않은 이유(예: DISK_THRESHOLD, NODE_LEFT, NO_VALID_SHARD_COPY)를 나열하는 deciders와 같은 필드를 찾습니다.

노란색 클러스터 상태 해결

노란색 상태는 기본 샤드는 할당되었지만 복제본은 할당되지 않았음을 의미합니다. 이는 주로 데이터 중복성과 내결함성에 영향을 미칩니다.

일반적인 원인:

  • 노드 부족: 인덱스에 필요한 복제본 수를 수용할 만큼 노드가 충분하지 않습니다.
  • 샤드 할당 필터링: 빨간색 상태와 유사하게 필터가 복제본 할당을 방해할 수 있습니다.
  • 디스크 공간 제약: 노드에 기본 샤드에 대한 공간은 충분하지만 복제본에 대한 공간은 충분하지 않을 수 있습니다. 특히 디스크 워터마크가 활성화된 경우 더욱 그렇습니다.

해결:

  • 노드 추가: 클러스터의 노드 수를 늘립니다.
  • 복제본 수 조정: 모든 인덱스에 대해 장애 내성이 중요하지 않은 경우 인덱스당 복제본 수를 줄입니다(index.number_of_replicas).
  • 할당 설정 확인: 복제본 샤드가 사용 가능한 노드에 할당되도록 허용되었는지 확인합니다.

클러스터 상태 유지를 위한 모범 사례

  • 디스크 사용량 모니터링: 모든 노드의 디스크 공간을 사전에 모니터링하고 경고를 설정합니다.
  • 클러스터 크기 조정: 데이터 볼륨과 쿼리 로드에 충분한 노드와 리소스가 있는지 확인합니다.
  • 샤드 관리: 샤드 크기를 권장 범위 내로 유지하고 과도한 샤딩을 피합니다.
  • 클러스터 상태 정기 검토: 일상적인 모니터링의 일환으로 GET _cluster/healthGET _cluster/allocation/explain을 사용합니다.
  • 변경 사항 테스트: 할당 설정이나 디스크 워터마크에 중대한 변경을 하기 전에 스테이징 환경에서 테스트합니다.

결론

빨간색 또는 노란색 Elasticsearch 클러스터 상태를 해결하려면 체계적인 진단 접근 방식이 필요합니다. 클러스터 상태 API, 클러스터 할당 설명 API를 활용하고 디스크 공간, 네트워크 문제, 할당 구성과 같은 일반적인 실패 지점을 이해함으로써 클러스터를 효과적으로 문제 해결하고 최적의 상태로 복원할 수 있습니다. 일관된 모니터링과 모범 사례 준수는 이러한 문제가 처음 발생하는 것을 방지하는 열쇠입니다.