ES 트러블 슈팅(클러스터 상태가 Green이 아니에요)

cyr·2023년 7월 29일
0

각 상태에 대한 설명은 아래와 같습니다.

상태설명
green프라이머리와 레플리카 샤드가 모두 노드에 정상적으로 배치되어있는 상태
yellow레플리카 샤드가 정상적으로 배치되어 있지 않은 상태 (색인에는 영향을 주지 않으나, 검색 성능에 영향을 줍니다.)
red프라이머리 샤드가 정상적으로 배치되어 있지 않은 상태 (색인과 검색에 영향을 주며, 문서 유실을 발생시킬 수 있음.)

영향도를 정확하게 파악하는 것이 중요함.

어떤 인덱스가 yellow or red 인지 확인하는 것이 필요합니다.
cat indices 요청을 통해, 아래와 같이 각 인덱스 별 상태를 확인할 수 있습니다.

curl -X GET "<ES url>:<port>/_cat/indices" | grep -i red
curl -X GET "<ES url>:<port>/_cat/indices" | grep -i yellow

예시1) 

 날짜별로 인덱스를 생성하고 있고 하루가 지나면 해당 인덱스에 대한 스냅샷을 찍어두는 상황에서는, 장애 상황이라고 할 수 없습니다. 과거 날짜의 문서를 담고 있는 idnex가 red이더라도 스냅샷을 이용해 다시 문서를 사용할 수 있도록 만들 수 있기 때문입니다.

 또한, 날짜별로 인덱스를 만들고 있기 때문에, 해당 날짜가 지난 경우에는  문서가 추가되지 않는 상황이기 때문에 문서유실도 발생하지 않습니다.

 따라서 해당 경우는 장애 수준은 아니라는 뜻이 됩니다.

예시2)

 위 상황에서 하나만 바꾸어서 오늘 날짜의 index가 red인 경우를 생각해 봅시다.

 이 경우에는 프라이머리 샤드의 일부 혹은 전체가 제대로 배치되지 않은 상태이기 때문에 문서유실이 발생합니다.

curl -X GET "<ES url>:<port>/_cat/shards?h=idx,sh,pr,st,docs,unassigned.reason" | grep -iv started

 위 명령어를 통해 어떤 샤드에 어떤문제가 있는 지 확인할 수 있습니다.

 나오는 샤드의 개수를 통해 문서유실이 얼마나 일어나고 있는지 확인할 수 있습니다.

 ELK를 사용해서, Logstash를 이용해 쌓고 있는 상황인 경우에는 source가 되는 log 파일을 이용해 인덱싱을 다시해주어야 할 수 있습니다.

profile
개발

0개의 댓글