쿠버네티스 환경에서 Redis-Cluster 구축 실전 가이드 ③


Failover(장애조치) 테스트

🖧 1. Redis-Cluster 파드 다이어그램 (초기 상태)

┌────────────────┐ ┌────────────────┐ ┌───────────────┐ │🟢Redis-0(231) │ │🟢Redis-1(233) │ │🟢Redis-2(235) │ │ Master-1 │ │ Master-2 │ │ Master-3 │ └──────┬─────────┘ └──────┬─────────┘ └──────┬────────┘ │ │ │ │ ┌──────────────────│────────────────────┘ │ │ └────────────────────┐ └──────────────────┐ │ │ │ │ ▼ ▼ ▼ ┌────────────────┐ ┌────────────────┐ ┌───────────────┐ │🟡Redis-3(237) │ │🟡Redis-4(239) │ │🟡Redis-5(241) │ │ Replica-1 │ │ Replica-2 │ │ Replica-3 │ └────────────────┘ └────────────────┘ └───────────────┘

1. Failover(장애조치) 테스트

Redis-0 파드를 다운시켜서 Redis-4가 Replica에서 Master로 전환(승격)되는지 확인
redis.conf replica-priority 값은 Redis-Cluster에서 사용되지 않는다. Redis-Sentinel에서 사용된다.   대신 가장 최신 데이터를 받은 복제가 마스터가 된다. 여기서는 마스터별로 복제가 하나이므로 Redis-0의 복제인 Redis-4가 마스터가 된다.
💥 파드 다운 후 재시작하면 IP가 변경된다.

Redis-0 💥 다운(delete)

💻 Redis-0 LOG: Master -> Replica

① 24초 kill 시그널을 받고 레디스 다운 (+0초)
② 26초 레디스 자동 재시작 (+2초)
③ 35초 Master -> Replica(Slave)로 전환 (+11초)

Redis-0 전체 로그

💻 Redis-1 LOG: Master

① 28초 Redis-0 다운 확정(Fail/odown) (+4초) -> cluster-node-timeout 3000ms
② 29초 Redis-4 새 마스터 승격 (+5초)

💻 Redis-4 LOG: Replica -> Master

① 24초 Redis-0 다운 감지 (+0초)
② 29초 마스터로 승격 (+5초)

Redis-4 전체 로그

🧮 Failover(장애조치) 후 상황

Redis-0 IP가 '10.42.0.231'에서 '10.42.0.242'로 변경됐다.

🖧 Redis-Cluster 파드 다이어그램 (Failover 후)

┌────────────────┐ ┌────────────────┐ ┌───────────────┐ │🟡Redis-0(242) │ │🟢Redis-1(233) │ │🟢Redis-2(235) │ │ Replica-2 │ │ Master-2 │ │ Master-3 │ └──────┬─────────┘ └──────┬─────────┘ └──────┬────────┘ ▲ │ │ │ ┌──────────────────│────────────────────┘ │ │ └────────────────────┐ └──────────────────┐ │ │ │ │ ▼ │ ▼ ┌────────────────┐ ┌────────────────┐ ┌───────────────┐ │🟡Redis-3(237) │ │🟢Redis-4(239) │ │🟡Redis-5(241) │ │ Replica-1 │ │ Master-1 │ │ Replica-3 │ └────────────────┘ └────────────────┘ └───────────────┘

2. Failback(원상복구) 테스트

현재 마스터인 Redis-4를 다운시켜서 Redis-0가 Replica에서 Master로 전환(승격)되는지 확인
📚 'Failback(원상복구) 테스트'는 Redis-0 파드가 다시 마스터가 되도록 한다는 의미에서 사용했다.
    (Failover 테스트와 구분하기 위해서 사용했다)

💻 Redis-4 💥다운(delete)

💻 Redis-0 LOG: Replica -> Master

① 52초 Redis-4 연결 단절 (+0초)
② 56초 Redis-4 다운 확정(Fail/odown) (+4초)
③ 57초 Replica -> Master로 전환(승격) (+5초)

Redis-0 전체 로그

💻 Redis-1 LOG: Master

① 56초 Redis-4 다운 확정 (+4초)
② 57초 Redis-0 새 마스터로 승격 (+5초)

💻 Redis-4 LOG: Master -> Replica

① 19분 52초 kill 시그널을 받고 다운 (+0초)
② 19분 54초 파드(Redis) 재시작 (+2초)
③ 20분 02초 Master -> Replica(Slave)로 전환 (+10초)

Redis-4 전체 로그

🧮 Failback(원상복구) 후 상황

Redis-4 IP가 '10.42.0.239'에서 '10.42.0.243'로 변경됐다.

🧮 Cluster info 확인

🧮 Cluster nodes 확인

🖧 Redis-Cluster 파드 다이어그램 (Failback 후)

┌────────────────┐ ┌────────────────┐ ┌───────────────┐ │🟢Redis-0(242) │ │🟢Redis-1(233) │ │🟢Redis-2(235) │ │ Master-1 │ │ Master-2 │ │ Master-3 │ └──────┬─────────┘ └──────┬─────────┘ └──────┬────────┘ │ │ │ │ ┌──────────────────│────────────────────┘ │ │ └────────────────────┐ └──────────────────┐ │ │ │ │ ▼ ▼ ▼ ┌────────────────┐ ┌────────────────┐ ┌───────────────┐ │🟡Redis-3(237) │ │🟡Redis-4(243) │ │🟡Redis-5(241) │ │ Replica-1 │ │ Replica-2 │ │ Replica-3 │ └────────────────┘ └────────────────┘ └───────────────┘

🧑‍💻 결론

Redis-Cluster Failover(장애 조치), Failback(원상 복구) 테스트 성공
파드(pod)를 다운, 재시작하면 IP가 변경되지만 아무 문제없이 처리된다.


Failover(장애조치) 테스트: Redis-0 SLEEP(멈춤)

SLEEP 테스트는 레디스가 어떤 이유로든 응답하지 못하는 상황을 만들어서, 이 경우도 제대로 Failover(장애 조치)가 되는지 확인하는 테스트이다.
💥 'Sleep 10'은 레디스를 10초 동안 멈추는 것이므로 IP는 변경되지 않는다.

1. Failover(장애조치) 테스트

• Failover(장애조치) 테스트: Redis-0 Sleep 10 -> Redis-4가 Replica에서 Master로 전환(승격)되는지 확인

Redis-0 SLEEP 10

💻 Redis-0 LOG: Master -> Replica

① 17초 SLEEP 시작 (+0초)
② 27초 SLEEP 종료 (+10초)
③ 27초 Master -> Replica로 전환 (+10초)

Redis-0 전체 로그

💻 Redis-1 LOG: Master

① 21초 Redis-0 다운 확정(Fail/odown) (+4초) -> cluster-node-timeout 3000ms
② 22초 Redis-4 Replica -> Master로 전환 (+5초)
③ 27초 Redis-0 재시작 (+10초)

💻 Redis-4 LOG: Replica -> Master

① 21초 Redis-0 다운 확정(Fail/odown) (+4초)
② 22초 Replica -> Master로 전환 (+5초)

Redis-4 로그 전체

🧮 Failover(장애조치) 후 상황

IP는 변경되지 않습니다. 파드 자체는 계속 살아있습니다. 'AGE' 항목 참조.

🧮 Cluster info 조회

🧮 Cluster nodes 조회

🖧 Redis-Cluster 파드 다이어그램 (Failover 후)

┌────────────────┐ ┌────────────────┐ ┌───────────────┐ │🟡Redis-0(242) │ │🟢Redis-1(233) │ │🟢Redis-2(235) │ │ Replica-2 │ │ Master-2 │ │ Master-3 │ └────────────────┘ └──────┬─────────┘ └──────┬────────┘ ▲ │ │ │ ┌──────────────────│────────────────────┘ │ │ └────────────────────┐ └──────────────────┐ │ │ │ │ ▼ │ ▼ ┌────────────────┐ ┌────┴───────────┐ ┌───────────────┐ │🟡Redis-3(237) │ │🟢Redis-4(243) │ │🟡Redis-5(241) │ │ Replica-1 │ │ Master-1 │ │ Replica-3 │ └────────────────┘ └────────────────┘ └───────────────┘

2. Failback(원상복구) 테스트

• Failback(원상복구) 테스트: Redis-4 Sleep 10 -> Redis-0가 Replica에서 Master로 전환(승격)되는지 확인

💻 Redis-4 SLEEP 10

💻 Redis-0 LOG: Replica -> Master

① 26초 SLEEP 명령 실행 (+0초)
② 30초 Redis-4 다운 확정(Fail/odown) (+4초)
③ 31초 Redis-0 Replica -> Master로 전환 (+5초)
④ 36초 Redis-4 재시작 (+10초)

Redis-0 전체 로그

💻 Redis-1 LOG: Master

① 30초 Redis-4 다운 확정(Fail/odown) (+4초)
② 31초 Redis-0 Replica -> Master로 전환(승격) (+5초)
③ 36초 Redis-4 재시작 (+10초)

💻 Redis-2 LOG: Redis-1 로그와 동일하여 생략함

💻 Redis-4 LOG: Master -> Replica

① 26초 SLEEP 명령 실행 (+0초)
① 36초 SLEEP 명령 종료 -> 복제(Redis-0)와 연결 끊김 (+10초)
② 36초 Master -> Replica로 전환 (+10초)

Redis-4 로그 전체

🧮 Failback(원상복구) 후 상황

🧮 Cluster info 조회

🧮 Cluster nodes 조회

🖧 Redis-Cluster 파드 다이어그램 (Failback 후)

┌────────────────┐ ┌────────────────┐ ┌───────────────┐ │🟢Redis-0(242) │ │🟢Redis-1(233) │ │🟢Redis-2(235) │ │ Master-1 │ │ Master-2 │ │ Master-3 │ └──────┬─────────┘ └──────┬─────────┘ └──────┬────────┘ │ │ │ │ ┌──────────────────│────────────────────┘ │ │ └────────────────────┐ └──────────────────┐ │ │ │ │ ▼ ▼ ▼ ┌────────────────┐ ┌────────────────┐ ┌───────────────┐ │🟡Redis-3(237) │ │🟡Redis-4(243) │ │🟡Redis-5(241) │ │ Replica-1 │ │ Replica-2 │ │ Replica-3 │ └────────────────┘ └────────────────┘ └───────────────┘


🧑‍💻 결론

SLEEP 명령을 사용한 Redis-Cluster Failover(장애 조치), Failback(원상 복구) 테스트 성공
SLEEP 명령을 사용하면 레디스가 다운되지도 않고, IP가 변경되지도 않지만, 3초 이상 응답이 없으면 장애 조치가 실행된다.


➡ 여기까지는 Redis-Cluster 단독으로 테스트했습니다.
Java(Spring) App와 연결해서 작동하는 것까지 보려면 여기를 클릭하세요.



<< K8s Redis-Cluster 구축 ② K8s Redis-Cluster App ① >>

Email 답글이 올라오면 이메일로 알려드리겠습니다.