クバネティス(Kubernetes) 環境で Redis-Cluster テスト 実戦ガイド ③


Failover(障害対応)テスト

🖧 1. Redis-Cluster ポッド(Pod) ダイアグラム (初期状態)

┌────────────────┐ ┌────────────────┐ ┌───────────────┐ │🟢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 ポッド(Pod)をダウンさせ、Redis-4 が Replica から Master へ転換(昇格)するか確認します
redis.conf の replica-priority 値は Redis-Cluster では使われません。 Redis-Sentinel で使われます。   代わりに、最も新しいデータを受け取った複製がマスターになります。 ここではマスターごとに複製が1つなので、Redis-0 の複製である Redis-4 がマスターになります。
💥 ポッド(Pod)をダウン後に再起動すると IP が変わります。

Redis-0 💥 ダウン(delete)

💻 Terminal

💻 Redis-0 LOG: Master -> Replica

① 24秒 kill シグナルを受けて Redis ダウン (+0秒)
② 26秒 Redis 自動再起動 (+2秒)
③ 35秒 Master -> Replica(Slave) へ転換 (+11秒)

💻 Terminal

Redis-0 全ログ ▼
📄 redis.log

💻 Redis-1 LOG: Master

① 28秒 Redis-0 ダウン確定(Fail/odown) (+4秒) -> cluster-node-timeout 3000ms
② 29秒 Redis-4 が新マスターへ昇格 (+5秒)

📄 redis.log

💻 Redis-4 LOG: Replica -> Master

① 24秒 Redis-0 ダウン検知 (+0秒)
② 29秒 マスターへ昇格 (+5秒)

📄 redis.log

Redis-4 全ログ ▼
📄 redis.log

🧮 Failover(障害対応)後の状況

Redis-0 の IP が '10.42.0.231' から '10.42.0.242' に変わりました。

💻 Terminal

🖧 Redis-Cluster ポッド(Pod) ダイアグラム (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 ポッド(Pod)が再びマスターになるという意味で使いました。
    (Failover テストと区別するためです)

💻 Redis-4 💥ダウン(delete)

💻 Terminal

💻 Redis-0 LOG: Replica -> Master

① 52秒 Redis-4 接続切断 (+0秒)
② 56秒 Redis-4 ダウン確定(Fail/odown) (+4秒)
③ 57秒 Replica -> Master へ転換(昇格) (+5秒)

📄 redis.log

Redis-0 全ログ ▼
📄 redis.log

💻 Redis-1 LOG: Master

① 56秒 Redis-4 ダウン確定 (+4秒)
② 57秒 Redis-0 が新マスターへ昇格 (+5秒)

📄 redis.log

💻 Redis-4 LOG: Master -> Replica

① 19分52秒 kill シグナルを受けてダウン (+0秒)
② 19分54秒 ポッド(Pod)(Redis) 再起動 (+2秒)
③ 20分02秒 Master -> Replica(Slave) へ転換 (+10秒)

📄 redis.log

Redis-4 全ログ ▼
📄 redis.log

🧮 Failback(原状回復)後の状況

Redis-4 の IP が '10.42.0.239' から '10.42.0.243' に変わりました。

💻 Terminal

🧮 Cluster info 確認

💻 Terminal

🧮 Cluster nodes 確認

💻 Terminal

🖧 Redis-Cluster ポッド(Pod) ダイアグラム (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 テストは、Redis が何らかの理由で応答できない状況を作り、 この場合も正しく Failover(障害対応)されるかを確認するテストです。
💥 'Sleep 10' は Redis を10秒間止めるので、IP は変わりません。

1. Failover(障害対応)テスト

• Failover(障害対応)テスト: Redis-0 Sleep 10 -> Redis-4 が Replica から Master へ転換(昇格)するか確認

Redis-0 SLEEP 10

💻 Terminal

💻 Redis-0 LOG: Master -> Replica

① 17秒 SLEEP 開始 (+0秒)
② 27秒 SLEEP 終了 (+10秒)
③ 27秒 Master -> Replica へ転換 (+10秒)

📄 redis.log

Redis-0 全ログ ▼
📄 redis.log

💻 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.log

💻 Redis-4 LOG: Replica -> Master

① 21秒 Redis-0 ダウン確定(Fail/odown) (+4秒)
② 22秒 Replica -> Master へ転換 (+5秒)

📄 redis.log

Redis-4 ログ全体 ▼
📄 redis.log

🧮 Failover(障害対応)後の状況

IP は変わりません。ポッド(Pod)自体は生き続けています。'AGE' 項目を参照してください。

💻 Terminal

🧮 Cluster info 照会

💻 Terminal

🧮 Cluster nodes 照会

💻 Terminal

🖧 Redis-Cluster ポッド(Pod) ダイアグラム (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

💻 Terminal

💻 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.log

Redis-0 全ログ ▼
📄 redis.log

💻 Redis-1 LOG: Master

① 30秒 Redis-4 ダウン確定(Fail/odown) (+4秒)
② 31秒 Redis-0 Replica -> Master へ転換(昇格) (+5秒)
③ 36秒 Redis-4 再起動 (+10秒)

📄 redis.log

💻 Redis-2 LOG: Redis-1 ログと同じため省略

💻 Redis-4 LOG: Master -> Replica

① 26秒 SLEEP コマンド実行 (+0秒)
① 36秒 SLEEP コマンド終了 -> 複製(Redis-0)との接続切断 (+10秒)
② 36秒 Master -> Replica へ転換 (+10秒)

📄 redis.log

Redis-4 ログ全体 ▼
📄 redis.log

🧮 Failback(原状回復)後の状況

💻 Terminal

🧮 Cluster info 照会

💻 Terminal

🧮 Cluster nodes 照会

💻 Terminal

🖧 Redis-Cluster ポッド(Pod) ダイアグラム (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 コマンドを使うと Redis はダウンせず、IP も変わりませんが、 3秒以上応答がなければ障害対応が実行されます。


➡ ここまでは Redis-Cluster 単独でテストしました。
Java(Spring) App と接続して動くところまで見るには、こちらをクリックしてください。



<< K8s Redis-Cluster 構築 ② K8s Redis-Cluster App ① >>

Email 返事がかかってなれば、メールでお知らせします。