Elasticsearch 클러스터는 마스터 노드, 데이터 노드, 코디네이터 노드로 구성되며, 각 노드가 다운될 경우 시스템의 안정성과 가용성에 영향을 미칠 수 있다. 따라서 각 노드 유형별로 장애 발생 시 대응 방안을 마련해야 한다.
1. 마스터 노드 장애 복구 전략
(1) 마스터 노드의 역할
- 클러스터의 헬스 체크, 노드 관리, 샤드 할당, 설정 변경 등의 중요한 역할을 수행
- 마스터 노드가 장애를 일으키면 클러스터 상태를 업데이트하거나 새로운 노드를 추가할 수 없음
(2) 마스터 노드 장애 발생 시 증상
- GET _cluster/health 요청 시 red 또는 yellow 상태
- 클러스터 상태 변경이 불가능
- 노드 추가 및 샤드 할당 불가
(3) 복구 방법
- 다른 마스터 노드가 있는지 확인
- 정상적으로 선출된 새로운 마스터 노드가 있으면 자동 복구 진행됨
- GET _cat/master?v
- 마스터 노드가 1개뿐인 경우 클러스터가 중단됨
- 최소 3개의 마스터 노드를 유지해야 함
- 마스터 노드가 모두 다운된 경우 수동 복구 필요
- 새로운 마스터 노드 추가
- 기존 마스터 노드가 복구 불가능할 경우 새로운 노드를 추가하고 elasticsearch.yml에서 마스터 노드로 설정
node.master: true
- 클러스터 재시작 후 상태 확인
- GET _cluster/health
- 마스터 노드 선출이 안 될 경우 강제 복구
- 강제로 클러스터를 재구성하여 노드를 재배치
- curl -XPOST "http://localhost:9200/_cluster/reroute?retry_failed=true"
예방 조치
- 마스터 노드는 반드시 3개 이상 유지하여 선출이 가능하도록 구성
- 마스터 전용 노드를 설정하여 데이터 노드와 분리
- 고가용성을 위해 마스터 노드를 다른 물리 서버에 배포
2. 데이터 노드 장애 복구 전략
(1) 데이터 노드의 역할
- 인덱스 데이터 저장 및 검색 요청 처리
- 장애 발생 시 저장된 데이터가 유실될 가능성이 있음
(2) 데이터 노드 장애 발생 시 증상
- 일부 데이터 조회 불가
- 클러스터 헬스 체크 시 yellow 또는 red 상태
- 샤드 불균형 발생
(3) 복구 방법
- 장애 노드 상태 확인
- 노드가 다운되었는지 확인하고 문제 원인 파악 (디스크 공간 부족, 메모리 문제 등)
- GET _cat/nodes?v
- 샤드 재할당 확인
- UNASSIGNED 상태의 샤드가 있으면 자동 복구되지 않았음을 의미
- GET _cat/shards?v
- 노드 재시작 후 샤드 복구 확인
- 데이터 노드를 다시 시작한 후, 클러스터가 자동으로 샤드를 복구하는지 확인
systemctl restart elasticsearch
- 수동 샤드 복구 실행 (필요 시)
- POST _cluster/reroute?retry_failed=true
- 샤드 강제 할당 (긴급 복구 필요 시)
- 할당이 실패한 이유를 확인한 후 적절한 노드로 수동 할당
- POST _cluster/allocation/explain
예방 조치
- 복제 샤드 설정(number_of_replicas: 1 이상)으로 장애 발생 시 자동 복구 가능하도록 설정
- 디스크 사용량 모니터링 (GET _cat/allocation?v 명령어 활용)
- 데이터 노드 장애 발생 시 ILM(인덱스 수명 주기 관리) 적용하여 오래된 데이터를 자동으로 Cold 노드로 이동
3. 코디네이터 노드 장애 복구 전략
(1) 코디네이터 노드의 역할
- 검색 쿼리 및 집계 요청을 분산하여 성능 최적화
- 장애 발생 시 데이터 노드의 부하가 증가할 수 있음
(2) 코디네이터 노드 장애 발생 시 증상
- 검색 및 집계 쿼리 속도 저하
- CPU 사용량 증가
- 클러스터 전체의 응답 속도 저하
(3) 복구 방법
- 장애 노드 상태 확인
- 코디네이터 노드가 다운되었는지 확인
- GET _cat/nodes?v
- 노드 재시작
- 노드가 단순한 장애(메모리 부족, 네트워크 문제)라면 재시작으로 해결 가능
- systemctl restart elasticsearch
- 노드 추가 및 부하 분산
- 코디네이터 노드가 과부하로 다운되었다면 새로운 코디네이터 노드 추가
node.master: false node.data: false node.ingest: false
- 쿼리 로드 밸런싱 설정
- 애플리케이션에서 Elasticsearch에 요청할 때 라운드 로빈 방식을 사용하여 요청을 여러 노드로 분산
예방 조치
- 검색 요청이 많은 경우 코디네이터 노드를 2개 이상 운영
- 로드 밸런서를 활용하여 요청 부하를 분산
- 쿼리 최적화 적용 (필요한 필드만 검색, 애그리게이션 최소화)
4. 결론
- 마스터 노드 장애 시: 3개 이상의 마스터 노드를 유지하여 자동 선출 가능하도록 구성
- 데이터 노드 장애 시: 복제 샤드를 설정하고 ILM을 적용하여 자동 복구 가능하도록 운영
- 코디네이터 노드 장애 시: 로드 밸런서를 활용하여 부하를 분산하고, 검색 요청이 많은 경우 추가적인 코디네이터 노드를 운영
'Elastic Search' 카테고리의 다른 글
[Elasticsearch] Elasticsearch는 언제 써야할까? (0) | 2025.03.19 |
---|---|
[ES] 엘라스틱 서치 Docker기반 SSL 적용 (0) | 2025.02.15 |
[LV 6] Elasticsearch 커스텀 플러그인 개발 (1) | 2025.02.02 |
[LV 6] Elasticsearch 운영 및 모니터링 (0) | 2025.02.02 |
[LV 5] Logstash 및 Beats 활용 (ELK Stack 구성) (1) | 2025.02.02 |