레드 클러스터 상태 해결: 단계별 Elasticsearch 문제 해결 가이드
할당되지 않은 기본 샤드, 할당 설명, 디스크 워터마크, 노드 손실을 다루는 실용적인 Elasticsearch 레드 클러스터 체크리스트
레드 클러스터 상태 해결: 단계별 Elasticsearch 문제 해결 가이드
레드 Elasticsearch 클러스터 상태는 최소 하나의 기본 샤드가 할당되지 않았음을 의미합니다. 이것이 중요한 부분입니다. 일부 데이터를 사용할 수 없게 되며, 영향을 받은 인덱스에 대한 검색은 부분적이거나 실패한 결과를 반환할 수 있고, 해당 샤드에 대한 쓰기는 정상적으로 진행될 수 없습니다.
옐로우는 다릅니다: 기본 샤드는 할당되었지만 하나 이상의 복제본이 할당되지 않은 상태입니다. 옐로우도 중복성이 줄어들었기 때문에 여전히 주의가 필요하지만, 레드는 사고입니다. 데이터를 삭제하거나 수동으로 샤드를 재할당하는 것으로 시작하지 마십시오. 먼저 어떤 기본 샤드가 할당되지 않았는지, 그리고 Elasticsearch가 왜 할당을 거부하는지 찾으십시오.
Elasticsearch 클러스터 상태 이해하기
Elasticsearch는 클러스터 상태와 샤드 할당에 대한 스냅샷을 제공하는 클러스터 상태 API를 제공합니다. 이 API는 상태 문제를 진단하는 주요 도구입니다.
GET _cluster/health
이 명령의 출력에는 status 필드가 포함되며, 이는 green, yellow 또는 red일 수 있습니다. 또한 활성 및 할당되지 않은 샤드의 수에 대한 정보를 제공합니다.
- Green: 모든 기본 및 복제 샤드가 할당되어 정상적으로 작동합니다.
- Yellow: 모든 기본 샤드가 할당되었지만 일부 복제 샤드가 할당되지 않았습니다.
- Red: 하나 이상의 기본 샤드가 할당되지 않아 해당 샤드의 데이터를 사용할 수 없습니다.
사고 발생 시 더 자세한 상태 호출을 사용하십시오:
GET _cluster/health?level=indices
그런 다음 할당되지 않은 샤드를 나열하십시오:
GET _cat/shards?v&h=index,shard,prirep,state,unassigned.reason,node&s=state,index
레드/옐로우 상태의 일반적인 원인 및 문제 해결 단계
클러스터가 green이 아닌 경우 조사할 시간입니다. 다음은 할당되지 않은 샤드의 가장 일반적인 원인과 해결 방법입니다:
1. 디스크 공간 부족
Elasticsearch는 디스크가 가득 차서 데이터가 손상되는 것을 방지하기 위한 안전 장치가 있습니다. 노드의 디스크 공간이 부족하면 새 샤드 할당이나 기존 샤드 복구가 차단됩니다.
진단:
- 각 노드의 디스크 사용량을 확인하십시오.
- 클러스터 할당 설명 API를 사용하여 샤드가 할당되지 않은 이유를 파악하십시오.
GET _cluster/allocation/explain
이 API는 종종 디스크 워터마크를 가리키는 자세한 이유를 제공합니다.
해결 방법:
- 디스크 공간 확보: 오래된 인덱스를 삭제하고, 데이터를 다른 계층으로 이동하거나, 용량을 추가하십시오. 활성 인덱스를 강제 병합하는 것은 빠른 디스크 공간 확보 방법이 아니며 사고 중에 I/O 부하를 가중시킬 수 있습니다.
- 디스크 공간 추가: 노드의 저장 용량을 늘리십시오.
- 디스크 워터마크 구성: 현재 값이 환경에 맞지 않는 경우에만
cluster.routing.allocation.disk.watermark.low,high및flood_stage를 조정하십시오. 워터마크를 높이면 시간을 벌 수 있지만 실제 용량 문제를 숨길 수도 있습니다.
2. 노드가 클러스터를 떠남 (노드 축출)
네트워크 문제, 충돌 또는 의도적인 제거로 인해 노드가 클러스터를 떠날 수 있습니다. 샤드(특히 기본 샤드)를 보유한 노드가 떠나면 해당 샤드는 할당되지 않게 됩니다.
진단:
- 최근에 떠난 노드에 대한 클러스터 로그를 확인하십시오.
- 노드 간 네트워크 연결을 모니터링하십시오.
- 모든 노드가 서로 검색 가능한지 확인하십시오.
discovery.seed_hosts, 전송 연결 및 클러스터 로그를 확인하십시오. 이미 형성된 클러스터에 일반적인 수정 사항으로cluster.initial_master_nodes를 다시 도입하지 마십시오.
해결 방법:
- 노드 다시 시작: 노드가 충돌하거나 응답하지 않는 경우 다시 시작해 보십시오.
- 네트워크 문제 해결: 노드 간 네트워크 연결 문제를 해결하십시오.
- 노드 다시 추가: 노드가 의도적으로 제거된 경우 클러스터에 다시 합류하기 전에 올바르게 구성되었는지 확인하십시오.
3. 샤드 할당 필터링 및 인식
잘못 구성된 샤드 할당 규칙은 샤드가 사용 가능한 노드에 할당되는 것을 방지할 수 있습니다.
진단:
cluster.routing.allocation.*설정, 특히cluster.routing.allocation.include,exclude및require필터를 검토하십시오.- 영역 또는 랙 인식을 사용하는 경우
cluster.routing.allocation.awareness.attributes를 확인하십시오.
해결 방법:
- 할당 필터 조정: 샤드가 적절한 노드에 할당될 수 있도록 필터를 수정하십시오.
- 인식 속성 수정: 사용하는 경우 노드에 인식 속성이 올바르게 태그되었는지, 할당 규칙이 이를 준수하는지 확인하십시오.
4. 할당을 위한 디스크 공간 부족 (인덱스 생성 후)
디스크가 가득 차지 않았더라도 Elasticsearch는 할당 후 디스크가 높은 워터마크를 초과할 것으로 예측되면 샤드 할당을 차단할 수 있습니다. 이는 디스크 워터마크와 관련이 있지만 특히 새 할당에 영향을 미칩니다.
진단:
_cluster/allocation/explainAPI가 여기서 매우 유용합니다.- 예상 샤드 크기 대비 사용 가능한 여유 공간을 확인하십시오.
해결 방법:
- 일반적인 디스크 공간 문제와 유사: 공간 확보, 저장소 추가 또는 워터마크를 신중하게 조정하십시오.
5. 샤드 크기 및 노드 용량
매우 큰 샤드 또는 많은 수의 샤드는 노드 리소스(CPU, 메모리)에 부담을 주고 할당에 영향을 줄 수 있습니다. 또한 노드가 샤드 한도(cluster.routing.allocation.total_shards_per_node)에 도달하면 새 샤드가 해당 노드에 할당되지 않습니다.
진단:
- 샤드 크기 확인 (
GET _cat/shards?v). - 노드 리소스 사용률(CPU, 메모리) 모니터링.
cluster.routing.allocation.total_shards_per_node설정 검토.
해결 방법:
- 샤드 부담 줄이기: 향후 인덱스의 경우 롤오버 및 샤드 수를 조정하여 샤드가 관리 가능한 크기 범위에 있도록 하십시오. 기존 인덱스의 경우 클러스터가 작업을 처리할 수 있을 만큼 안정화된 후에만 재인덱싱, 축소 또는 분할을 사용하십시오.
- 노드 용량 증가: 더 강력한 노드 또는 더 많은 메모리/CPU를 가진 노드를 추가하십시오.
- 샤드 한도 조정: 필요한 경우 충분한 리소스가 있으면
cluster.routing.allocation.total_shards_per_node를 늘리십시오.
6. 마스터 노드 문제
불안정한 마스터 노드는 샤드 할당 문제로 이어질 수 있습니다. 마스터를 사용할 수 없거나 제 역할을 수행할 수 없는 경우 샤드가 할당되지 않을 수 있습니다.
진단:
- 마스터 관련 오류 또는 경고에 대한 클러스터 로그를 확인하십시오.
- 분할 뇌 시나리오를 방지하기 위해 홀수 개의 마스터 후보 노드(일반적으로 3개 또는 5개)가 있는지 확인하십시오.
- 마스터 후보 노드가 마스터를 선출할 수 있는지 확인하십시오.
해결 방법:
- 마스터 안정화: 마스터 후보 노드가 정상이고 충분한 리소스가 있으며 잘 연결되어 있는지 확인하십시오.
- 부트스트랩 기록 확인:
cluster.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/health및GET _cluster/allocation/explain을 사용하십시오. - 변경 사항 테스트: 할당 설정이나 디스크 워터마크를 크게 변경하기 전에 스테이징 환경에서 테스트하십시오.
할당 결정자를 알게 되면 일반적으로 경로가 명확해집니다. 디스크 임계값은 용량 문제를 의미합니다. NODE_LEFT는 누락된 노드를 복구하거나 교체해야 함을 의미합니다. NO_VALID_SHARD_COPY는 스냅샷 복원 또는 Elasticsearch의 문서화된 안전하지 않은 복구 절차를 사용한 의도적인 데이터 손실 결정이 필요할 수 있음을 의미합니다. 마지막 경우는 먼저 백업을 확인하면서 천천히 처리해야 합니다. 클러스터를 레드에서 벗어나게 하는 명령은 누락된 기본 샤드의 최신 데이터가 영구적으로 손실되었음을 확인할 수도 있기 때문입니다.