はじめに
この実験 (lab) では、Redis クラスタの管理方法を学びます。この実験 (lab) では、クラスタの初期化、ノードの追加、クラスタの健全性チェック、およびスロットのリシャーディングなど、重要なクラスタ管理タスクに焦点を当てています。
まず、redis-cli --cluster コマンドを使用して Redis クラスタを初期化します。これにより、初期設定が自動化されます。次に、CLUSTER MEET を使用して新しいノードを追加する方法を学びます。その後、CLUSTER INFO でクラスタの健全性を確認します。最後に、CLUSTER SETSLOT を使用してノード間でスロットをリシャーディングし、クラスタのバランスを取ります。
Redis クラスタの初期化
このステップでは、redis-cli --cluster create コマンドを使用して Redis クラスタを初期化します。このコマンドは、機能的な Redis クラスタのセットアッププロセスを簡素化します。
Redis クラスタとは? (What is a Redis Cluster?)
Redis クラスタは、複数の Redis ノードにデータを自動的に分散する分散型セットアップです。これにより、Redis のデプロイメントを水平方向にスケールし、単一の Redis インスタンスで処理できるよりも大きなデータセットを管理できます。
redis-cli --cluster create を使用する理由 (Why use redis-cli --cluster create?)
redis-cli --cluster create コマンドは、Redis クラスタの作成、管理、および操作を行うための簡単な方法を提供します。初期設定とノードの検出を自動化し、クラスタの作成を容易にします。
手順 (Steps):
Redis インスタンスの起動 (Start Redis Instances):
まず、複数の Redis インスタンスを構成して起動する必要があります。この実験 (lab) では、7000 から 7005 までのポートで実行される 6 つのインスタンスを使用します。各インスタンスは、
cluster-enabled yesで構成する必要があります。これを行うには、次のコマンドを使用して構成ファイルを作成し、Redis インスタンスを起動します。これらのコマンドはデモンストレーション用であることに注意してください。セットアップスクリプトは、これらのインスタンスをすでに構成して起動しています。
REDIS_CONF="/etc/redis/redis.conf" for port in 7000 7001 7002 7003 7004 7005; do CONF_FILE="/etc/redis/redis-${port}.conf" sudo cp "$REDIS_CONF" "$CONF_FILE" sudo sed -i "s/^port 6379/port ${port}/g" "$CONF_FILE" sudo sed -i "s/^#cluster-enabled yes/cluster-enabled yes/g" "$CONF_FILE" sudo sed -i "s/^#cluster-config-file nodes.conf/cluster-config-file nodes-${port}.conf/g" "$CONF_FILE" sudo sed -i "s/^#cluster-node-timeout 15000/cluster-node-timeout 15000/g" "$CONF_FILE" sudo sed -i "s/^#appendonly no/appendonly yes/g" "$CONF_FILE" sudo redis-server "$CONF_FILE" & done sleep 5クラスタの作成 (Create the Cluster):
次に、
redis-cli --cluster createコマンドを使用してクラスタを作成します。このコマンドには、初期ノードの IP アドレスとポートが必要です。ターミナルを開き、次のコマンドを実行します。
redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1redis-cli --cluster create: クラスタ作成プロセスを開始します。127.0.0.1:7000 127.0.0.1:7001 ... 127.0.0.1:7005: Redis インスタンスのアドレスとポート。--cluster-replicas 1: 各マスターノードに 1 つのレプリカが必要であることを指定します。
クラスタ作成の確認 (Confirm the Cluster Creation):
redis-cliツールは、クラスタの作成を確認するように求めます。「yes」と入力して Enter キーを押します。>>> Creating cluster >>> Performing hash slots allocation on 6 nodes... >>> Master[0] -> Slots 0 - 5460 >>> Master[1] -> Slots 5461 - 10922 >>> Master[2] -> Slots 10923 - 16383 >>> Adding replica node to Master[0] >>> Adding replica node to Master[1] >>> Adding replica node to Master[2] >>> M: 49a4928719291928192819281928192819281928 127.0.0.1:7000 slots:[0-5460] (5461 slots) master >>> M: 9281928192819281928192819281928192819281 127.0.0.1:7001 slots:[5461-10922] (5462 slots) master >>> M: 19281928192819281928192819281928192819281 127.0.0.1:7002 slots:[10923-16383] (5461 slots) master >>> S: 81928192819281928192819281928192819281928 127.0.0.1:7003 replicates 49a4928719291928192819281928192819281928 >>> S: 28192819281928192819281928192819281928192 127.0.0.1:7004 replicates 9281928192819281928192819281928192819281 >>> S: 928192819281928192819281928192819281928192 127.0.0.1:7005 replicates 19281928192819281928192819281928192819281 >>> Can I set the above configuration? (type 'yes' to accept): yes >>> Slots 0-5460 assigned to node 49a4928719291928192819281928192819281928 >>> Slots 5461-10922 assigned to node 9281928192819281928192819281928192819281 >>> Slots 10923-16383 assigned to node 19281928192819281928192819281928192819281 >>> Adding replica 81928192819281928192819281928192819281928 to 49a4928719291928192819281928192819281928 >>> Adding replica 28192819281928192819281928192819281928192 to 9281928192819281928192819281928192819281 >>> Adding replica 928192819281928192819281928192819281928192 to 19281928192819281928192819281928192819281 >>> [OK] All nodes agree about the cluster configuration. >>> >>> Check cluster info >>> >>> Nodes >>> M: 49a4928719291928192819281928192819281928 127.0.0.1:7000 slots:[0-5460] (5461 slots) master 1 additional replica(s) >>> M: 9281928192819281928192819281928192819281 127.0.0.1:7001 slots:[5461-10922] (5462 slots) master 1 additional replica(s) >>> M: 19281928192819281928192819281928192819281 127.0.0.1:7002 slots:[10923-16383] (5461 slots) master 1 additional replica(s) >>> S: 81928192819281928192819281928192819281928 127.0.0.1:7003 replicates 49a4928719291928192819281928192819281928 >>> S: 28192819281928192819281928192819281928192 127.0.0.1:7004 replicates 9281928192819281928192819281928192819281 >>> S: 928192819281928192819281928192819281928192 127.0.0.1:7005 replicates 19281928192819281928192819281928192819281 >>> [OK] All nodes agree about the cluster configuration. >>> All 16384 slots covered.この出力は、各マスターノードへのスロットの割り当てと、レプリカの割り当てを示しています。
クラスタへの接続 (Connect to the Cluster):
redis-cliを使用して Redis クラスタに接続します。これにより、クラスタに対してコマンドを実行できます。redis-cli -h 127.0.0.1 -p 7000redis-cliの終了 (Exitredis-cli):コマンドがログに記録されるように、
redis-cliセッションを終了します。exit
これで、Redis クラスタが正常に初期化されました。次のステップでは、ノードの追加、クラスタの健全性の確認、およびスロットのリシャーディングの方法について説明します。
クラスタへの新しいノードの追加
このステップでは、CLUSTER MEET コマンドを使用して、既存の Redis クラスタに新しいノードを追加する方法を学びます。このコマンドは、クラスタの容量を拡張し、高可用性を確保するために不可欠です。
CLUSTER MEET について (Understanding CLUSTER MEET)
CLUSTER MEET コマンドは、新しい Redis ノードをクラスタに導入します。ノードがこのコマンドを受信すると、指定されたノードへの接続を試み、クラスタの一部になるためのハンドシェイクプロセスを開始します。
前提条件 (Prerequisites):
- 前のステップで説明したように初期化された Redis クラスタ。
- クラスタの一部として実行および構成されているが、まだ接続されていない新しい Redis インスタンス。この実験 (lab) では、ポート 7006 で新しいインスタンスが実行されていると仮定します。このインスタンスは、
cluster-enabled yes構成オプションを使用して起動する必要があります。セットアップスクリプトは、このインスタンスをすでに構成して起動しています。
手順 (Steps):
既存のノードへの接続 (Connect to an Existing Node):
redis-cliを使用して、クラスタ内の既存のノードのいずれかに接続します。CLUSTER MEETコマンドはクラスタ全体に情報を伝播するため、どのノードに接続してもかまいません。redis-cli -h 127.0.0.1 -p 7000CLUSTER MEETコマンドの使用 (Use theCLUSTER MEETCommand):クラスタ内のノードに接続したので、
CLUSTER MEETコマンドを使用して新しいノード (ポート 7006) を導入します。CLUSTER MEET 127.0.0.1 7006CLUSTER MEET: 新しいノードを追加するコマンド。127.0.0.1: 新しいノードの IP アドレス。7006: 新しいノードのポート番号。
次の出力が表示されるはずです。
OKこれは、コマンドが正常に送信されたことを示します。
redis-cliの終了 (Exitredis-cli):コマンドがログに記録されるように、
redis-cliセッションを終了します。exit
Redis クラスタに新しいノードが正常に追加されました。次のステップでは、クラスタの健全性を確認します。
クラスタのヘルスチェック
このステップでは、CLUSTER INFO コマンドを使用して、Redis クラスタの健全性とステータスを確認する方法を学びます。このコマンドは、クラスタの全体的な状態に関する貴重な情報を提供します。
CLUSTER INFO について (Understanding CLUSTER INFO)
CLUSTER INFO コマンドは、Redis クラスタに関する情報を返します。これは、クラスタの健全性を監視し、問題を診断するために使用できます。
前提条件 (Prerequisites):
- 前のステップで説明したように、初期化され、新しいノードが追加された Redis クラスタ。
手順 (Steps):
クラスタノードへの接続 (Connect to a Cluster Node):
redis-cliを使用して、クラスタ内の任意のノードに接続します。redis-cli -h 127.0.0.1 -p 7000CLUSTER INFOコマンドの実行 (Execute theCLUSTER INFOCommand):CLUSTER INFOコマンドを使用して、クラスタ情報を取得します。CLUSTER INFO次のような出力が表示されるはずです。
cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:7 cluster_size:3 cluster_current_epoch:7 cluster_my_epoch:7 ...出力の解釈 (Interpreting the Output):
いくつかの主要なメトリクス (metrics) の内訳を以下に示します。
cluster_state:ok: クラスタは正常な状態です。cluster_slots_assigned:16384: ノードに割り当てられたスロットの数。cluster_slots_ok:16384: 正常に機能しているスロットの数。cluster_slots_pfail:0: 「潜在的に障害が発生している (potentially failing)」状態のスロットの数。cluster_slots_fail:0: 「障害が発生している (failing)」状態のスロットの数。cluster_known_nodes:7: 現在のノードが認識しているノードの総数。cluster_size:3: クラスタ内のマスターノードの数。
redis-cliの終了 (Exitredis-cli):コマンドがログに記録されるように、
redis-cliセッションを終了します。exit
CLUSTER INFO コマンドを使用して、Redis クラスタの健全性を正常に確認できました。
新しいノードへのスロットのリシャーディング
このステップでは、redis-cli --cluster reshard コマンドを使用して、Redis クラスタ内のスロットをリシャーディングする方法を学びます。これは、特に新しいノードを追加した後で、データを均等に分散するために重要です。
Redis スロットとリシャーディングについて (Understanding Redis Slots and Resharding)
Redis クラスタは、キースペースを 16384 個のスロットに分割します。各マスターノードは、これらのスロットのサブセットを担当します。新しいノードを追加しても、最初はどのスロットも所有していません。リシャーディングは、既存のノードから新しいノードにスロットを移動し、データとワークロードのバランスを取ります。
手順 (Steps):
redis-cli --clusterを使用したクラスタへの接続 (Connect to the Cluster usingredis-cli --cluster):リシャーディング操作を実行するには、
redis-cli --cluster reshardコマンドを使用します。このコマンドは、クラスタ全体にスロットを再分散するためのインタラクティブな方法を提供します。ターミナルを開き、次のコマンドを実行します。
redis-cli --cluster reshard 127.0.0.1:7000このコマンドは、
127.0.0.1:7000のノードを介して Redis クラスタに接続し、リシャーディングプロセスを開始します。移動するスロット数の指定 (Specify the Number of Slots to Move):
redis-cliツールは、移動するスロットの数を入力するように求めます。この例では、101 個のスロットを新しいノードに移動しましょう。How many slots do you want to move? (default: all)101と入力して Enter キーを押します。ターゲットノード ID の入力 (Enter the Target Node ID):
次に、ツールはターゲットノードのノード ID を入力するように求めます。これは、前のステップで追加した新しいノード (ポート 7006) です。ノード ID を見つけるには、前のステップで示したように
CLUSTER NODESコマンドを使用するか、次のコマンドを使用してノード ID を直接取得できます。redis-cli -h 127.0.0.1 -p 7006 cluster nodes | grep myself | awk '{print $1}'出力からノード ID をコピーします。
redis-cliツールは次のようにプロンプト (prompt) を表示します。What is the receiving node ID?ノード ID を貼り付けて Enter キーを押します。
ソースノードの指定 (Specify the Source Nodes):
ツールは、スロットを取得するソースノードを指定するように求めます。
allと入力すると、既存のすべてのマスターノードからスロットが再分散されます。Please enter all the source node IDs. Type 'all' to use all the nodes as source nodes for the hash slots. Type 'done' to stop entering IDs.allと入力して Enter キーを押します。リシャーディング計画の確認 (Confirm the Resharding Plan):
redis-cliツールは、リシャーディング計画を表示し、確認を求めます。Do you want to proceed with the reshard plan? (type 'yes' to accept):yesと入力して Enter キーを押すと、リシャーディングプロセスが開始されます。リシャーディングの完了を待機 (Wait for Resharding to Complete):
redis-cliツールは、ソースノードからターゲットノードにスロットを移動します。このプロセスには、クラスタ内のデータ量に応じて時間がかかる場合があります。スロットが移動されると、進行状況メッセージが表示されます。redis-cliの終了 (Exitredis-cli):
リシャーディングが完了したら、redis-cli セッションを終了します。
```redis
exit
```
redis-cli --cluster reshard コマンドを使用して、Redis クラスタ内のスロットを正常にリシャーディングできました。これにより、新しいノードを含め、クラスタ全体でデータがより均等に分散されるようになります。
まとめ
この実験 (Lab) では、Redis クラスタの管理方法を学びました。まず、redis-cli --cluster create を使用してクラスタを初期化し、次に CLUSTER MEET で新しいノードを追加しました。CLUSTER INFO を使用してクラスタの健全性を確認し、最後に redis-cli --cluster reshard でスロットをリシャーディングしてクラスタのバランスを取りました。これらは、Redis クラスタを管理し、そのスケーラビリティ (scalability) と高可用性 (high availability) を確保するための不可欠なタスクです。


