k8s_redis_sentinel_sidecar_3
쿠버네티스 환경에서 Redis Sentinel Sidecar 패턴 구축 실전 가이드 ③
Failover(장애조치) 테스트
🖧 1. Redis-Sentinel 파드 다이어그램 (초기 상태)
1. Failover(장애조치) 테스트
Redis-0를 다운시켜서 Redis-1이 Replica에서 Master로 전환(승격)되는지 확인
- 복제 Redis-1,2 중 Redis-1이 마스터가 되는 이유:
redis.conf replica-priority 값: Redis-0 100, Redis-1 110, Redis-2 120
-> 값이 작은 Redis-1이 마스터로 전환된다.
- 이 경우 파드-0에 Redis와 Sentinel이 같이 있으므로 같이 다운된다.
💥 파드 다운 후 재시작하면 Redis와 Sentinel의 IP가 변경된다.
Pod-0(Redis-0/Sentinel-0) 💥다운(delete)
💻 Redis-0 LOG: Master -> Replica
① 27초 kill 시그널을 받고 레디스 다운 (+0초)
② 30초 레디스 자동 재시작 (+3초)
③ 43초 센티널로부터 명령를 받아 Master -> Replica(Slave)로 전환 (+16초)
Redis-0 전체 로그
💻 Redis-1 LOG: Replica -> Master
① 27초 Redis-0 다운 감지(연결 단절) (+0초)
② 31초 센티널로 부터 명령(replicaof noone)을 받아 Replica -> Master로 전환 (+4초)
Redis-1 전체 로그
💻 Redis-2 LOG: Replica
① 27초 Redis-0 다운 감지(연결 끊김) (+0초)
② 32초 새 마스터(Redis-1)에 연결 (+5초)
Redis-2 전체 로그
💻 Sentinel-0 LOG
① 27초 kill 시그널을 받고 센티널 다운 (+0초)
② 30초 센티널 자동 재시작 (+3초)
③ 34초 Redis-1 모니터 시작 (+7초)
Sentinel-0 전체 로그
💻 Sentinel-1 LOG
① 27초 Redis-0 연결 끊김 (+0초)
② 30초 Redis-0 다운 감지(+sdown) (+3초) -> sentinel.conf down-after-milliseconds mymaster 3000 ms
③ 31초 Redis-0 다운 확정(+odown) (+4초) -> 다른 센티널들과 통신해서 과반수가 동의하면 확정
④ 43초 Redis-0에게 Redis-1이 마스터로 변경되었다고 알림 (+16초)
Sentinel-1 전체 로그
💻 Sentinel-2 LOG
① 27초 Redis-0 연결 끊김 (+0초)
② 30초 Redis-0 다운 감지(+sdown) (+3초) -> sentinel.conf down-after-milliseconds mymaster 3000 ms
③ 30초 Redis-0 다운 확정(+odown) (+3초) -> 다른 센티널들과 통신해서 과반수가 동의하면 확정
③ 30초 센티널끼리 투표해서 'Sentinel-2'을 Leader로 선출(+elected-leader) (+3초)
④ 31초 Redis-1을 마스터로 변경(+failover-state-send-slaveof-noone) (+4초)
Sentinel-2 전체 로그
🧮 Failover(장애조치) 후 상황
Redis-0 IP가 '10.42.0.106'에서 '10.42.0.111'로 변경됐다.
💾 redis.conf 확인
replicaof 확인
💾 sentinel.conf 확인
Redis-1가 마스터이고 Redis-0,2가 복제이다.
🖧 Redis-Sentinel 파드 다이어그램 (Failover 후)
2. Failback(원상복구) 테스트
현재 마스터인 Redis-1를 다운시켜서 Redis-0가 Replica에서 Master로 전환(승격)되는지 확인
📚 'Failback(원상복구) 테스트'는 Redis-0 파드가 다시 마스터가 되도록 한다는 의미에서 사용했다.
(Failover 테스트와 구분하기 위해서 사용했다)
💻 Redis-1 💥다운(delete)
💻 Redis-0 LOG: Replica -> Master
① 15초 Redis-1 연결 단절 (+1초)
② 18초 센티널로부터 명령를 받아 Replica(Slave) -> Master로 전환(승격) (+4초)
Redis-0 전체 로그
💻 Redis-1 LOG: Master -> Replica
① 14초 kill 시그널을 받고 다운 (+0초)
② 17초 파드 재시작 (+3초)
③ 29초 센티널로부터 명령를 받아 Master -> Replica(Slave)로 전환 (+15초)
Redis-1 전체 로그
💻 Redis-2 LOG
① 15초 Redis-1과 연결 끊김 (+1초)
② 19초 센티널로부터 Redis-0가 새 마스터가 되었다는 신호를 받고 연결 (+5초)
Redis-2 전체 로그
💻 Sentinel-0 LOG
① 14초 Redis-1 연결 끊김 (+0초)
② 17초 Redis-1 다운 감지(+sdown) (+3초) -> sentinel.conf down-after-milliseconds mymaster 3000 ms
② 19초 Redis-1 다운 확정(+odown) (+5초) -> 다른 센티널들과 통신해서 과반수가 동의하면 확정
Sentinel-0 전체 로그
💻 Sentinel-1 LOG
① 14초 kill 시그널을 받고 다운 (+0초)
② 17초 파드 재시작 (+3초)
Sentinel-1 전체 로그
💻 Sentinel-2 LOG: Leader로 선출
① 14초 Redis-1과 연결 끊김 (+0초)
② 17초 Redis-1과 다운 감지 (+3초)
③ 18.7초 Redis-1과 다운 확정 (+4초)
④ 18.8초 센티널끼리 투표해서 'Sentinel-2'을 Leader로 선출(+elected-leader) (+4초)
④ 18.8초 redis-0을 마스터로 변경(+failover-state-send-slaveof-noone) (+4초)
Sentinel-2 전체 로그
🧮 Failback(원상복구) 후 상황
Redis-0 IP가 '10.42.0.108'에서 '10.42.0.112'로 변경됐다.
💾 redis.conf 확인
💾 sentinel.conf 확인
Redis-0가 마스터이고 Redis-1,2가 복제이다.
🖧 Redis-Sentinel 파드 다이어그램 (원상복구)
| << K8s Sidecar 패턴 구축 ② | K8s Redis-Standalone ① >> |
|---|
