문제 해결: Elasticsearch 클러스터 상태 확인 및 해석

Elasticsearch 클러스터 상태 진단을 위한 필수 기술을 마스터하십시오. 이 가이드는 `_cat/health` API를 사용하여 상태를 확인하고 중요한 녹색(Green), 노란색(Yellow), 빨간색(Red) 지표를 해석하는 방법을 자세히 설명합니다. 할당되지 않은 샤드(unassigned shards)의 근본 원인, 심층 진단을 위해 `_cat/shards` 및 `_cluster/allocation/explain`과 같은 고급 API를 사용하는 방법, 그리고 심각한 클러스터 불안정성을 빠르고 효과적으로 해결하는 데 필요한 실행 가능한 단계를 알아보십시오.

44 조회수

문제 해결: Elasticsearch 클러스터 상태 확인 및 해석

Elasticsearch는 강력한 분산 검색 및 분석 엔진이지만, 분산 특성상 데이터 무결성과 고가용성을 보장하기 위해 지속적인 모니터링이 필요합니다. 관리의 첫 번째이자 가장 중요한 단계는 클러스터 상태를 확인하는 것입니다. 건강한 상태는 모든 기본 및 복제 데이터 세그먼트(샤드)가 노드에 올바르게 할당되고 운영 중임을 보장합니다.

이 가이드에서는 필수 _cat/health API를 사용하여 클러스터 상태를 확인하는 실용적인 접근 방식을 제공합니다. 색상으로 구분된 상태(녹색, 노란색, 빨간색)를 해석하는 방법을 자세히 설명하고, 일반적인 불안정 문제를 진단하고 해결하기 위한 실행 가능한 단계를 제공하여 관리자가 최적의 클러스터 성능을 신속하게 복원하도록 돕겠습니다.


Elasticsearch 상태 이해하기

Elasticsearch는 클러스터의 인덱스와 샤드의 운영 상태를 전달하기 위해 간단한 색상 신호등 시스템을 사용합니다. 이 상태는 기본 및 복제 샤드의 할당 상태를 반영합니다.

세 가지 핵심 상태

상태 의미 데이터 가용성 중복성 필요한 조치
녹색 모든 기본 및 복제 샤드가 할당되고 운영 중입니다. 100% 사용 가능 완전 모니터링만
노란색 모든 기본 샤드는 할당되었지만 하나 이상의 복제 샤드가 할당되지 않았습니다. 100% 사용 가능 손상됨 복제 할당 조사/해결
빨간색 하나 이상의 기본 샤드가 할당되지 않았습니다. 부분적 또는 전체 데이터 손실/사용 불가 심각하게 손상됨 즉시 개입

_cat/health로 클러스터 상태 확인하기

_cat API는 빠르고 사람이 읽을 수 있는 진단용으로 설계되었습니다. _cat/health 엔드포인트는 클러스터의 현재 상태에 대한 개요를 얻는 가장 빠른 방법입니다.

기본 명령어

cURL, Kibana Dev Tools 콘솔 또는 HTTP 클라이언트를 사용하여 이 명령을 실행할 수 있습니다.

# cURL 사용 (사람이 읽을 수 있는 형식)
curl -X GET "localhost:9200/_cat/health?v&pretty"

_cat/health 출력 해석하기

성공적인 쿼리는 주요 메트릭이 포함된 테이블을 반환합니다:

설명
epoch 요청이 실행된 시간 (Unix 타임스탬프).
timestamp HH:MM:SS 형식의 시간.
cluster 클러스터 이름.
status 중요한 색상 표시기 (녹색, 노란색 또는 빨간색).
node.total 현재 클러스터에 참여 중인 총 노드 수.
node.data 클러스터의 데이터 노드 수.
shards 활성화되어야 하는 총 샤드 수 (기본 + 복제).
pri 총 기본 샤드 수.
relo 현재 노드 간에 이전 중인 샤드 수.
init 현재 초기화 중인 샤드 수.
unassign 현재 할당되지 않은 샤드 수.

건강한 (녹색) 클러스터 예시:

epoch      timestamp cluster       status node.total node.data shards pri relo init unassign
1678886400 10:30:00  my-cluster-dev green         3         3     30  15    0    0        0

상태 진단: 노란색

클러스터가 노란색 상태를 보고할 때, 이는 모든 데이터가 기술적으로 사용 가능하지만 (모든 기본 샤드가 할당됨) 정의된 중복성 수준이 충족되지 않았음을 의미합니다. 하나 이상의 복제 샤드가 할당되지 않았을 수 있습니다.

노란색 상태의 일반적인 원인

  1. 노드 손실 (일시적): 복제 샤드를 호스팅하던 데이터 노드가 오프라인 상태가 되었습니다. Elasticsearch는 해당 노드가 다시 온라인 상태가 되거나 새 노드가 참여하여 재할당을 시도할 때까지 기다립니다.
  2. 노드 부족: 복제본 2개 (총 데이터 3개 복사본)가 필요하지만 데이터 노드가 2개뿐인 경우, 세 번째 복사본을 배치할 수 없으므로 다른 노드가 추가될 때까지 영구적으로 노란색 상태가 됩니다.
  3. 할당 지연: 노드 장애 발생 후 노드가 빨리 복구될 경우 즉각적이고 비용이 많이 드는 재균형을 방지하기 위해 복제 할당을 지연하도록 클러스터가 구성되었습니다.
  4. 디스크 공간 제약: 노드에 복제 샤드를 호스팅하기에 충분한 디스크 공간이 없을 수 있습니다.

노란색 상태에 대한 실행 가능한 단계

  1. 할당되지 않은 샤드 확인: _cat/shards API를 사용하여 정확히 어떤 샤드가 할당되지 않았는지 (u) 그리고 왜 대기 중인지 식별합니다.

    bash curl -X GET "localhost:9200/_cat/shards?v"

  2. 할당 설명 API 사용: 특정 샤드가 할당되지 않은 이유에 대한 자세한 진단을 위해 할당 설명 API를 사용합니다. 아래 index_nameshard_id_cat/shards에서 찾은 실제 값으로 바꾸십시오.

    bash curl -X GET "localhost:9200/_cluster/allocation/explain?pretty" -H 'Content-Type: application/json' -d' { "index": "index_name", "shard": 0, "primary": false } '

    • CLUSTER_REBALANCE_ALLOCATION_DELAY 또는 NO_VALID_TARGET_NODE와 같은 이유로 unassigned_infodecisions 필드를 구체적으로 확인하십시오.*
  3. 노드 수 및 구성 확인: 데이터 노드 수가 필요한 복제본 수 + 1 (N 복제본 + 1 기본) 이상인지 확인합니다.

팁: 단기 유지 보수로 인해 클러스터가 노란색 상태인 경우, 일시적으로 무시할 수 있지만 중복성 없이 실행 중임을 인지하고 있어야 합니다.


상태 진단: 빨간색

빨간색 상태는 심각하며, 하나 이상의 기본 샤드가 할당되지 않았음을 나타냅니다. 이는 해당 샤드에 저장된 데이터가 인덱싱 또는 검색에 완전히 사용할 수 없음을 의미합니다.

빨간색 상태의 일반적인 원인

  1. 대규모 노드 장애: 기본 노드가 실패했고, 남은 클러스터에서 데이터가 손상되었거나 완전히 사용할 수 없었기 때문에 다른 노드가 기본 역할을 성공적으로 인계받지 못했습니다.
  2. 디스크 손상/장애: 기본 샤드를 포함하는 저장 장치가 실패했으며, 승격할 복제본이 없습니다.
  3. 인덱스 설정 문제: 파일 시스템 수준에서 인덱스 파일의 잘못된 구성 또는 잘못된 삭제.

빨간색 상태에 대한 즉각적인 개입

클러스터가 빨간색 상태일 때 수동 복구 작업을 시도하기 전에 항상 스냅샷을 통해 클러스터를 백업하십시오.

  1. 즉시 로그 확인: 마스터 노드 및 실패한 기본 샤드를 호스팅하는 노드의 로그를 검토하여 정확한 예외 또는 충돌 이유 (종종 디스크 실패 또는 메모리 부족 오류와 관련됨)를 식별하십시오.

  2. 실패한 인덱스 식별: _cat/shards를 사용하여 할당되지 않은 기본 (p)과 관련된 인덱스를 찾습니다.

    ```bash

    상태가 'UNASSIGNED'이고 기본값이 'p'인 행을 찾습니다.

    curl -X GET "localhost:9200/_cat/shards?h=index,shard,prirep,state,unassigned.reason"
    ```

  3. 강제 재라우팅 시도 (위험 - 최후의 수단으로 사용): 데이터가 노드 중 하나에 존재한다고 확신하는 경우 (예: 노드가 다시 온라인 상태가 되었지만 라우팅이 수정되지 않은 경우), 수동 재라우팅을 시도할 수 있습니다. 이는 기본 샤드가 영구적으로 손실되고 데이터 손실을 폐기하고 건강한 노드에 새 기본 샤드를 강제로 할당하기로 결정한 경우 자주 사용됩니다.

    ```bash

    주의: 이 명령어는 잘못 사용하면 데이터 손실을 초래할 수 있습니다.

    노드에 기본 샤드를 할당하여 인덱스를 건강한 상태로 표시합니다.

    curl -X POST "localhost:9200/_cluster/reroute?pretty" -H 'Content-Type: application/json' -d'
    {
    "commands" : [
    {
    "allocate_empty_primary" : {
    "index" : "failed_index_name",
    "shard" : 0,
    "node" : "target_node_name",
    "accept_data_loss" : true
    }
    }
    ]
    }
    '
    ```

  4. 스냅샷에서 복원: 실패한 기본 샤드를 복구할 수 없는 경우, 데이터 무결성을 복원하는 유일하고 안전한 방법은 가장 최근의 성공적인 스냅샷에서 해당 인덱스를 복원하는 것입니다.


고급 진단: 클러스터 설정

때로는 관리 작업 또는 사전 구성된 운영 보호 기능으로 인해 클러스터 상태가 빨간색 또는 노란색이 될 수 있습니다.

클러스터 라우팅 할당 확인

_cluster/settings API를 사용하면 샤드의 자동 할당이 명시적으로 비활성화되었는지 확인할 수 있으며, 이 경우 클러스터가 자체적으로 복구되지 않습니다.

# 현재 클러스터 설정 검색
curl -X GET "localhost:9200/_cluster/settings?include_defaults=true&pretty"

다음 설정을 구체적으로 확인하십시오:

{
  "persistent": {
    "cluster": {
      "routing": {
        "allocation": {
          "enable": "none" 
        }
      }
    }
  }
}

cluster.routing.allocation.enablenone (또는 primaries)으로 설정된 경우 Elasticsearch는 샤드를 할당하지 않아 클러스터가 현재 상태 (아마도 노란색 또는 빨간색)에 고정됩니다.

할당 다시 활성화하기

정상적인 샤드 할당을 복원하려면 설정을 all로 업데이트하십시오:

curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'
{
  "persistent": {
    "cluster.routing.allocation.enable": "all"
  }
}
'

결론

Elasticsearch 클러스터 상태 해석은 모든 관리자에게 기본적인 기술입니다. _cat/health API는 데이터의 운영 무결성에 대한 즉각적인 통찰력을 제공합니다. 녹색 상태가 목표이지만, 노란색은 중복성이 감소했음을, 빨간색은 데이터가 사용할 수 없음을 의미한다는 것을 이해하면 _cat/shards 및 할당 설명 API와 같은 보조 도구를 사용하여 정확하고 즉각적인 문제 해결이 가능합니다. 정기적인 모니터링과 사전 스냅샷팅은 여전히 치명적인 클러스터 장애에 대한 최고의 방어책입니다.