k8s_redis_sentinel_3
쿠버네티스 환경에서 Redis-Sentinel 구축 실전 가이드 ③
Failover(장애조치) 테스트
🖧 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이 마스터로 전환된다.
💥 파드 다운 후 재시작하면 IP가 변경된다.
Redis-0 💥 다운(delete)
💻 Redis-0 LOG: Master -> Replica
① 03초 kill 시그널을 받고 레디스 다운 (+0초)
② 05초 레디스 자동 재시작 (+2초)
③ 17초 센티널로부터 명령를 받아 Master -> Replica(Slave)로 전환 (+14초)
Redis-0 전체 로그
💻 Redis-1 LOG: Replica -> Master
① 03초 Redis-0 다운 감지 (+0초)
② 06초 Sentinel-1로 부터 명령(replicaof noone)을 받아 복제 -> 마스터로 전환 (+3초)
Redis-1 전체 로그
💻 Redis-2 LOG
① 03초 Redis-0 다운 감지 (+0초)
② 07초 새 마스터(Redis-1)에 연결 (+4초)
Redis-2 전체 로그
💻 Sentinel-0 LOG
① 06.1초 redis-0 다운 감지(+sdown) (+3초) -> sentinel.conf down-after-milliseconds mymaster 3000 ms
② 06.2초 redis-0 다운 확정(+odown) (+3초) -> 다른 센티널들과 통신해서 과반수가 동의하면 확정
Sentinel-0 전체 로그
💻 Sentinel-1 LOG
① 06.1초 redis-0 다운 감지(+sdown) (+3초) -> sentinel.conf down-after-milliseconds mymaster 3000 ms
② 06.2초 redis-0 다운 확정(+odown) (+3초) -> 다른 센티널들과 통신해서 과반수가 동의하면 확정
③ 06.3초 센티널끼리 투표해서 'Sentinel-1'을 Leader로 선출(+elected-leader)
④ 06.4초 redis-1을 마스터로 변경(+failover-state-send-slaveof-noone)
Sentinel-1 전체 로그
💻 Sentinel-2 LOG
① 06.1초 redis-0 다운 감지(+sdown) (+3초) -> sentinel.conf down-after-milliseconds mymaster 3000 ms
② 07.2초 redis-0 다운 확정(+odown) (+4초) -> 다른 센티널들과 통신해서 과반수가 동의하면 확정
Sentinel-2 전체 로그
🧮 Failover(장애조치) 후 상황
redis-0 IP가 '10.42.0.92'에서 '10.42.0.103'로 변경됐다.
🧮 redis.conf 확인
Redis LOG: 'CONFIG REWRITE'에서 변경했다.
🧮 sentinel.conf 확인
Sentinel LOG: 'Sentinel new configuration saved on disk'에서 변경했다.
redis-0,2가 복제라고 기록, sentinel-0,1,2 내용 동일.
🖧 Redis-Sentinel 파드 다이어그램 (Failover 후)
2. Failback(원상복구) 테스트
현재 마스터인 Redis-1를 다운시켜서 Redis-0가 Replica에서 Master로 전환(승격)되는지 확인
📚 'Failback(원상복구) 테스트'는 Redis-0 파드가 다시 마스터가 되도록 한다는 의미에서 사용했다.
(Failover 테스트와 구분하기 위해서 사용했다)
💻 Redis-1 💥다운(delete)
💻 Redis-0 LOG: Replica -> Master
① 29분 55초 Redis-1 연결 단절 (+0초)
② 29분 58초 센티널로부터 명령를 받아 Replica(Slave) -> Master로 전환(승격) (+3초)
Redis-0 전체 로그
💻 Redis-1 LOG: Master -> Replica
① 29분 55초 kill 시그널을 받고 다운 (+0초)
② 29분 57초 파드 재시작 (+2초)
③ 30분 11초 센티널로부터 명령를 받아 Master -> Replica(Slave)로 전환 (+16초)
Redis-1 전체 로그
💻 Redis-2 LOG
① 29분 55초 Redis-1과 연결 끊김 (+0초)
② 29분 59초 센티널로부터 Redis-0가 새 마스터가 되었다는 신호를 받고 연결 (+4초)
Redis-2 전체 로그
💻 Sentinel-0 LOG
① 58.4초 redis-1 다운 감지(+sdown) (+3초) -> sentinel.conf down-after-milliseconds mymaster 3000 ms
② 58.5초 redis-1 다운 확정(+odown) (+3초) -> 다른 센티널들과 통신해서 과반수가 동의하면 확정
③ 58.5초 센티널끼리 투표해서 'Sentinel-0'을 Leader로 선출(+elected-leader)
④ 58.6초 redis-0을 마스터로 변경(+failover-state-send-slaveof-noone)
Sentinel-0 전체 로그
💻 Sentinel-1 LOG
① 58.5초 redis-1 다운 감지(+sdown) (+3초) -> sentinel.conf down-after-milliseconds mymaster 3000 ms
② 58.6초 redis-1 다운 확정(+odown) (+3초) -> 다른 센티널들과 통신해서 과반수가 동의하면 확정
Sentinel-1 전체 로그
💻 Sentinel-2 LOG
① 58.3초 redis-1 다운 감지(+sdown) (+3초) -> sentinel.conf down-after-milliseconds mymaster 3000 ms
② 59.4초 redis-1 다운 확정(+odown) (+3초) -> 다른 센티널들과 통신해서 과반수가 동의하면 확정
Sentinel-2 전체 로그
🧮 Failback(원상복구) 후 상황
🧮 redis.conf 확인
🧮 sentinel.conf 확인
Redis-0 마스터, Redis-1,2 복제
🖧 Redis-Sentinel 파드 다이어그램 (원상복구)
🧑💻 결론
Redis-Sentinel Failover(장애 조치), Failback(원상 복구) 테스트 성공
파드(pod)를 다운, 재시작하면 IP가 변경되지만 아무 문제없이 처리된다.
장애 조치(복구) 시간은 4초 정도 걸린다.
➡ 여기까지는 Redis-Sentinel 단독으로 테스트했습니다.
Java(Spring) App와 연결해서 작동하는 것까지 보려면 여기를 클릭하세요.
| << K8s Redis-Sentinel 구축 ② | K8s Redis-Sentinel App ① >> |
|---|
