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


構築(ポッド(Pod) 生成)

1. YAML ファイルの順次適用(生成)

1) Config 生成

💻 Terminal

2) Service 生成

💻 Terminal

3) Statefulset 生成

💻 Terminal

ここまで単独(standalone) Redis 6個が実行された状態です。まだ Redis クラスタは構成されていません。

2. Redis-Cluster 構成

1) Redis-Cluster 構成スクリプトの作成、実行

'cluster_create.sh' を実行すると Master 3個、Replica 3個で Redis-Cluster が構成(生成)されます。

💻 Terminal


🧑‍💻 主な内容の説明

  • VM では IP:Port を書きますが、クバネティス(Kubernetes)では次のように書きます。
    redis-cluster-0.${SERVICE_NAME}.${NAMESPACE}.svc.cluster.local:${PORT}
    redis-cluster-0~5 まですべて書きます。
  • --cluster-replicas 1 # Master 1 -> Replica 1 に設定します。
  • --cluster-yes # このオプションを使うと、次の質問に自動で 'yes' と答えます。
    Can I set the above configuration? (type 'yes' to accept): yes
    このオプションなしで実行すると 'yes' を入力する必要があります。

🖧 Redis クラスタ構成(生成)過程

📍 3個の Master にスロットが均等に割り当てられました。
      Master[0] -> Slots 0 - 5460
      Master[1] -> Slots 5461 - 10922
      Master[2] -> Slots 10923 - 16383
📍 Replica -> Master 関係の設定
      Adding replica redis-cluster-4 to redis-cluster-0
      Adding replica redis-cluster-5 to redis-cluster-1
      Adding replica redis-cluster-3 to redis-cluster-2
📍 OK 成功! すべてのスロットが割り当てられました。
      [OK] All 16384 slots covered.

内容をすべて見る ▼
💻 Terminal

2) cluster info 照会

💻 Terminal

3) cluster nodes 照会

便宜上、ノード(Node)順に表示しました。実際はランダムに出ます。
nodes.conf ファイルの内容と同じです。

💻 Terminal

3. 🖧 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 │ └────────────────┘ └────────────────┘ └───────────────┘

4. 💽 データ入力

Failover(障害対応)テストをしようとして Redis-0 ポッド(Pod)をダウン(削除)すると、2秒以内に redis-0 ポッド(Pod)が復活します。 cluster-node-timeout が3秒なので Redis-0 のダウンを検知できません。 そこでデータを約1千万件入力して、5秒以上かかるようにします。

💻 Terminal

1) データ入力の確認

① 各ノード(Node)のキー確認: dbsize

💻 Terminal

② AOF ファイルサイズの確認
💻 Terminal

③ メモリ確認
💻 Terminal


➡ ポッド(Pod)も生成し、データも入力したので、Failover(障害対応)テストに行きましょう。


<< K8s Redis-Cluster 準備 ① K8s Redis-Cluster テスト ③ >>

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