당근 검색 엔진, 쿠버네티스로 쉽게 운영하기 2편 — 데이터 노드 웜업 적용
데브옵스
당근 검색 엔진, 쿠버네티스로 쉽게 운영하기 2편 — 데이터 노드 웜업 적용
두줄요약
Elasticsearch 데이터 노드 재시작 시 캐시 미적재로 레이턴시가 급증하는 문제를 다뤘습니다. search-coordinator와 웜업 절차로 배포 중에도 안정적으로 트래픽을 받도록 개선했습니다.
문제 상황
- ECK 도입 후에도 데이터 노드 롤링 리스타트 시 캐시가 비어 레이턴시가 급증하는 문제
- 피크 타임을 피해서만 배포해야 하는 운영 제약과 긴 모니터링 부담
- Elasticsearch 노드가 쿠버네티스 readinessProbe와 무관하게 즉시 클러스터에 join하는 구조
원인 분석
- 새로 재시작한 데이터 노드의 page cache, query cache, field data cache, request cache 초기화
- 샤드 재배치와 replica 부하 집중으로 남은 노드의 응답 지연 악화
- 쿠버네티스 기본 메커니즘만으로는 웜업 완료 전 트래픽 차단 불가
해결 방법
- search-coordinator 프록시를 두고 웜업 완료 노드만 검색 대상에 포함
- Central Dogma의 prefer_nodes로 라우팅 대상 노드 목록을 단일 상태로 관리
- Redis 분산 락과 검색 로그 기반 웜업 쿼리로 캐시를 채운 뒤 p50, p90 기준 충족 시 트래픽 전환
적용해볼 점
- 노드 재시작과 트래픽 수용 시점을 분리하는 운영 구조 검토
- 캐시 웜업과 라우팅 제어를 별도 오케스트레이터로 캡슐화하는 방식 고려