728x90
반응형
SMALL
실무에서 자주 마주치는 Redis 장애 상황에 대해 "어떤 경우에 자동 페일오버가 되는가?" 그리고 "그렇지 않은 경우 어떻게 복구할 수 있는가?"에 대해 구체적인 로그 예시와 함께 정리했습니다.
Sentinel 기반 Redis 클러스터를 운영 중인 분들께 실질적인 도움이 되었으면 합니다.
📌 Redis Sentinel 기본 구성
이번 예시는 다음과 같은 Redis Sentinel 구성을 기준으로 합니다.
- Master: 1대
- Slave: 2대
- Sentinel: 3대
이 구성에서 Sentinel의 기본 quorum은 2입니다.
⚠️ 장애 상황별 페일오버 가능 여부
케이스 설명 페일오버 가능 여부
Case 1 | Sentinel 3대 모두 살아있고, Master 또는 Slave가 최소 1대 이상 살아있음 | ✅ 가능 |
Case 2 | Sentinel 2대만 살아있고, Master 또는 Slave가 최소 1대 이상 살아있음 | ✅ 가능 |
Case 3 | Master, Slave 전부 죽음 | ❌ 불가능 |
Case 4 | Sentinel이 2대 이상 죽음 (quorum 미달) | ❌ 불가능 |
🔍 Quorum은 Sentinel 간 다수결 판단을 위한 기준입니다. quorum 미만일 경우 master 장애 감지를 하더라도 승격이 진행되지 않습니다.
📄 Sentinel 및 Redis 로그 예시
📝 Master 장애 → 자동 페일오버
+sdown master mymaster 10.0.0.1 6379
+new-epoch 9
+elected-leader sentinel-2 9
+failover-state-send-slaveof-noone slave 10.0.0.2:6379
+promoted-slave slave 10.0.0.2:6379
+switch-master mymaster 10.0.0.1 6379 10.0.0.2 6379
📝 Sentinel 2대 죽음 → quorum 부족
+sdown master mymaster 10.0.0.1 6379
# WARNING: Not enough valid sentinels (quorum 2)
📝 Redis 전체 죽음
# WARNING: No reachable Redis instances for master mymaster. Failover impossible.
📝 Slave 복구 후 재붙이기 로그
MASTER <-> REPLICA sync started
Full resync from master: <runid>:<offset>
MASTER <-> REPLICA sync: Finished with success
🔄 장애 복구 전략
✅ 1. Master 장애 (정상 페일오버)
Sentinel이 quorum(2 이상)을 만족하면 자동으로 Slave를 승격합니다.
# 기존 master 복구 후 slave로 전환
redis-cli SLAVEOF <new-master-ip> 6379
✅ 2. Slave 장애
Master는 살아있으므로 전체 장애는 아닙니다. 복구 후 아래처럼 master에 다시 붙이면 됩니다.
redis-cli SLAVEOF <current-master-ip> 6379
❌ 3. Sentinel 2대 이상 장애 (quorum 부족)
자동 페일오버는 불가능하지만, 수동으로 slave를 master로 승격시킬 수 있습니다.
# 승격할 slave에서 실행
redis-cli SLAVEOF NO ONE
# 나머지 노드들 연결
redis-cli SLAVEOF <new-master-ip> 6379
❌ 4. 모든 Redis 노드 장애
모든 노드를 하나씩 복구한 뒤, 가장 정상적인 노드를 수동으로 master로 지정합니다.
redis-cli SLAVEOF NO ONE
# 이후 다른 노드들이 여기에 붙도록 구성
redis-cli SLAVEOF <new-master-ip> 6379
🛠 운영 팁 & 체크리스트
- Sentinel 설정 예시:
sentinel monitor mymaster 10.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
- 클라이언트는 반드시 Sentinel-aware 라이브러리 사용
- Python: redis.sentinel.Sentinel
- Java: Lettuce, Jedis 등의 Sentinel 모드
- Prometheus + Redis exporter + Grafana 조합으로 모니터링 필수
- 장애 시나리오 테스트는 staging 환경에서 주기적으로 시행 권장
🧪 마치며
Redis Sentinel 기반 구성은 자동 페일오버라는 장점이 있지만, quorum, slave 가용성, Sentinel 생존이 모두 맞물려야 안정적인 고가용성을 보장할 수 있습니다. 장애 시엔 침착하게 로그를 확인하고 수동 복구 전략을 빠르게 적용하는 것이 핵심입니다.
728x90
반응형
LIST
'웹 (Web) 개발' 카테고리의 다른 글
Redis 관리 도구 비교 및 RedisInsight 설정 가이드 (1) | 2025.04.09 |
---|---|
Redis Cluster vs Sentinel 비교 및 Sentinel 적용 가이드 (0) | 2025.04.08 |
스프링 부트에서 N+1 문제 해결하기 - 성능 최적화를 위한 첫걸음 (0) | 2025.04.01 |
Vite: 현대적인 프론트엔드 빌드 도구의 진화 (0) | 2024.10.21 |
React: 모던 웹 개발의 필수 도구 (1) | 2024.10.18 |