k8s_redis_sentinel_sidecar_3
クバネティス(Kubernetes) 環境で Redis Sentinel Sidecarパターン 構築 実践ガイド ③
Failover(フェイルオーバー)テスト
🖧 1. Redis-Sentinel ポッド(Pod) ダイアグラム(初期状態)
1. Failover(フェイルオーバー)テスト
Redis-0 をダウンさせ、Redis-1 が Replica から Master へ切替(昇格)するか確認します
- レプリカ Redis-1,2 のうち Redis-1 が Master になる理由:
redis.conf replica-priority 値: Redis-0 100, Redis-1 110, Redis-2 120
-> 値が小さい Redis-1 が Master に切り替わります。
- この場合ポッド(Pod)-0 に Redis と Sentinel があるので一緒にダウンします。
💥 ポッド(Pod) ダウン後に再起動すると Redis と Sentinel の IP が変わります。
Pod-0(Redis-0/Sentinel-0) 💥ダウン(delete)
💻 Redis-0 LOG: Master -> Replica
① 27秒 kill シグナルを受け Redis ダウン(+0秒)
② 30秒 Redis が自動再起動(+3秒)
③ 43秒 Sentinel からの命令を受け Master -> Replica(Slave) へ切替(+16秒)
Redis-0 全ログ
💻 Redis-1 LOG: Replica -> Master
① 27秒 Redis-0 ダウン検知(接続切断)(+0秒)
② 31秒 Sentinel からの命令(replicaof noone) を受け Replica -> Master へ切替(+4秒)
Redis-1 全ログ
💻 Redis-2 LOG: Replica
① 27秒 Redis-0 ダウン検知(接続切断)(+0秒)
② 32秒 新しい Master(Redis-1) に接続(+5秒)
Redis-2 全ログ
💻 Sentinel-0 LOG
① 27秒 kill シグナルを受け Sentinel ダウン(+0秒)
② 30秒 Sentinel が自動再起動(+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秒) -> 他の Sentinel と通信し過半数が同意すれば確定
④ 43秒 Redis-0 に Redis-1 が Master に変わったと通知(+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秒) -> 他の Sentinel と通信し過半数が同意すれば確定
③ 30秒 Sentinel 同士で投票し 'Sentinel-2' を Leader に選出(+elected-leader) (+3秒)
④ 31秒 Redis-1 を Master に変更(+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 が Master で Redis-0,2 がレプリカです。
🖧 Redis-Sentinel ポッド(Pod) ダイアグラム(Failover 後)
2. Failback(フェイルバック)テスト
現在の Master である Redis-1 をダウンさせ、Redis-0 が Replica から Master へ切替(昇格)するか確認します
📚 'Failback(フェイルバック)テスト' は Redis-0 ポッド(Pod) が再び Master になるようにする、という意味で使いました。
(Failover テストと区別するために使いました)
💻 Redis-1 💥ダウン(delete)
💻 Redis-0 LOG: Replica -> Master
① 15秒 Redis-1 接続切断(+1秒)
② 18秒 Sentinel からの命令を受け Replica(Slave) -> Master へ切替(昇格)(+4秒)
Redis-0 全ログ
💻 Redis-1 LOG: Master -> Replica
① 14秒 kill シグナルを受けダウン(+0秒)
② 17秒 ポッド(Pod) 再起動(+3秒)
③ 29秒 Sentinel からの命令を受け Master -> Replica(Slave) へ切替(+15秒)
Redis-1 全ログ
💻 Redis-2 LOG
① 15秒 Redis-1 との接続切断(+1秒)
② 19秒 Sentinel から Redis-0 が新しい Master になった信号を受けて接続(+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 と通信し過半数が同意すれば確定
Sentinel-0 全ログ
💻 Sentinel-1 LOG
① 14秒 kill シグナルを受けダウン(+0秒)
② 17秒 ポッド(Pod) 再起動(+3秒)
Sentinel-1 全ログ
💻 Sentinel-2 LOG: Leader に選出
① 14秒 Redis-1 との接続切断(+0秒)
② 17秒 Redis-1 のダウンを検知(+3秒)
③ 18.7秒 Redis-1 のダウンを確定(+4秒)
④ 18.8秒 Sentinel 同士で投票し 'Sentinel-2' を Leader に選出(+elected-leader) (+4秒)
④ 18.8秒 redis-0 を Master に変更(+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 が Master で Redis-1,2 がレプリカです。
🖧 Redis-Sentinel ポッド(Pod) ダイアグラム(フェイルバック後)
| << K8s Sidecarパターン 構築 ② | K8s Redis-Standalone ① >> |
|---|
