k8s_redis_cluster_3
クバネティス(Kubernetes) 環境で Redis-Cluster テスト 実戦ガイド ③
Failover(障害対応)テスト
🖧 1. Redis-Cluster ポッド(Pod) ダイアグラム (初期状態)
1. Failover(障害対応)テスト
Redis-0 ポッド(Pod)をダウンさせ、Redis-4 が Replica から Master へ転換(昇格)するか確認します
redis.conf の replica-priority 値は Redis-Cluster では使われません。
Redis-Sentinel で使われます。
代わりに、最も新しいデータを受け取った複製がマスターになります。
ここではマスターごとに複製が1つなので、Redis-0 の複製である Redis-4 がマスターになります。
💥 ポッド(Pod)をダウン後に再起動すると IP が変わります。
Redis-0 💥 ダウン(delete)
💻 Redis-0 LOG: Master -> Replica
① 24秒 kill シグナルを受けて Redis ダウン (+0秒)
② 26秒 Redis 自動再起動 (+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 ポッド(Pod) ダイアグラム (Failover 後)
2. Failback(原状回復)テスト
現在のマスターである Redis-4 をダウンさせ、Redis-0 が Replica から Master へ転換(昇格)するか確認します
📚 'Failback(原状回復)テスト' は、Redis-0 ポッド(Pod)が再びマスターになるという意味で使いました。
(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秒 ポッド(Pod)(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 ポッド(Pod) ダイアグラム (Failback 後)
🧑💻 結論
Redis-Cluster Failover(障害対応)、Failback(原状回復)テスト成功
ポッド(Pod)をダウン、再起動すると IP は変わりますが、問題なく処理されます。
Failover(障害対応)テスト: Redis-0 SLEEP(停止)
SLEEP テストは、Redis が何らかの理由で応答できない状況を作り、
この場合も正しく Failover(障害対応)されるかを確認するテストです。
💥 'Sleep 10' は Redis を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 は変わりません。ポッド(Pod)自体は生き続けています。'AGE' 項目を参照してください。
🧮 Cluster info 照会
🧮 Cluster nodes 照会
🖧 Redis-Cluster ポッド(Pod) ダイアグラム (Failover 後)
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 ポッド(Pod) ダイアグラム (Failback 後)
🧑💻 結論
SLEEP コマンドを使った Redis-Cluster Failover(障害対応)、Failback(原状回復)テスト成功
SLEEP コマンドを使うと Redis はダウンせず、IP も変わりませんが、
3秒以上応答がなければ障害対応が実行されます。
➡ ここまでは Redis-Cluster 単独でテストしました。
Java(Spring) App と接続して動くところまで見るには、こちらをクリックしてください。
| << K8s Redis-Cluster 構築 ② | K8s Redis-Cluster App ① >> |
|---|
