CentOS 8 で Redis クラスターをセットアップする方法 - パート 3
Redis クラスタは、以前はセンチネルを使用して実装されていた自動シャーディング、レプリケーション、高可用性をサポートする組み込みのRedis機能です。これは 2 つの主な目的のために設計されています。1 つはデータセットを複数のインスタンスに自動的に分割すること、もう 1 つはパーティション中にある程度の可用性を提供し、一部のインスタンス (特にマスター) に障害が発生したり、大部分のインスタンスと通信できなくなったりした場合でも操作を継続することです。クラスター内のノード。
ただし、大規模な障害が発生した場合 (マスター インスタンスの大部分が使用不可になった場合など)、クラスターは動作を停止します。また、マスターとスレーブに同時に障害が発生した場合、クラスターは通常の操作を続行できません (ただし、回避策は、ノードを追加するか、クラスター内に非対称を作成して、クラスター レイアウトを自動変更することです)。
Redis クラスターのドキュメントによると、期待どおりに動作する「最小クラスター」には少なくとも 3 つのマスター ノードが含まれている必要があります。ただし、高可用性を実現するために最も適したセットアップには、3 つのマスターと 3 つのスレーブを備えた少なくとも 6 つのノードがあり、各マスターにスレーブが 1 つある必要があります。
重要: Redis Cluster には、NAT 化 環境や、IP アドレスまたは TCP ポートが再マップされる環境のサポートがないという制限もあります。 Docker の下のインスタンス。さらに、すべてのクライアント ライブラリがこれをサポートしているわけではありません。
この記事では、CentOS 8 で Redis クラスター (クラスターモードが無効) をセットアップする方法を説明します。 Redis のインストール、クラスター ノードの構成、クラスターの作成、クラスター フェールオーバーのテストの方法が含まれています。
注: このガイドでは、新しい/空の Redis インスタンスを使用してクラスター モードを実行します。クラスター モードは、Redis シリーズの最初の 2 つのガイドで行われた一部の構成では機能しません。特にパラメーターのレプリカが使用されている場合は機能しません。
前提条件:
- CentOS 8 がインストールされているサーバー
テスト環境のセットアップ
Redis Master1: 10.42.0.247
Redis Master2: 10.42.0.197
Redis Master3: 10.42.0.132
Redis Slave1: 10.42.0.200
Redis Slave2: 10.42.0.21
Redis Slave3: 10.42.0.34
このセットアップには 3 つの読み取り/書き込みマスター ノードと 3 つの読み取り専用レプリカ ノードがあり、各マスターには 1 つのレプリカがあるため、3 つのシャードには各ノードのクラスターのデータがすべて含まれます。アプリケーションのAPIまたはCLIクライアントは、マスター ノードにのみ書き込むことができますが、クラスター内の任意のノードから読み取ることができます。
ステップ 1: すべてのノードに Redis をインストールする
1. SSH 経由ですべてのインスタンスにログインし、次のコマンドを実行して、示されているように DNF パッケージ マネージャーを使用して Redis モジュールをインストールします。
dnf module install redis
2. 次に、Redis サービスを開始し、システム起動時に自動的に開始するように有効にし、そのステータスをチェックして実行中であることを確認します (6 つのインスタンスすべてでサービスを確認します) ):
systemctl start redis
systemctl enable redis
systemctl status redis
ステップ 2: すべてのノードで Redis インスタンスを構成する
3. このセクションでは、Redis クラスター ノードを構成する方法について説明します。すべてのノードでここでの構成を忘れずに実行してください。
/etc/redis.conf 構成ファイルを使用して、Redis サーバーを構成します。推奨される方法として、選択したコマンド ライン テキスト エディターを使用して元のファイルを編集する前に、元のファイルのバックアップを作成します。
cp /etc/redis.conf /etc/redis.conf.orig
vi /etc/redis.conf
4. 次に、次の構成パラメータを見つけて、示されているように値を編集します。 bind パラメータは、Redis サーバーがリッスンするインターフェイスを設定し、その値をインスタンス LAN IP に設定します。 127.0.0.1 を削除します。これを残しておくと、クラスターの作成プロセス、特にクラスターへの参加段階が遅くなることがわかったためです。
bind 10.42.0.247
次に、保護モードを no
に設定して、クラスター上の他のインスタンスからの接続を許可します。
protected-mode no
port パラメーターは、Redis サーバーが接続をリッスンするポートを定義します。デフォルトは6379です。これはクライアントと通信するためのデータ ポートです。
port 6379
5. 次のパラメータ セットはクラスタ モードを有効にし、その便利な機能のいくつかを設定します。 cluster-enabled パラメータを yes
に設定すると、クラスタ モードが有効になります。
cluster-enabled yes
次に、cluster-config-file パラメータは、クラスタ ノードのクラスタ構成ファイルの名前を設定します (例: nodes-6379.conf)。このファイルは作業ディレクトリ (デフォルトは dir パラメータを使用して定義された /var/lib/redis です) に作成され、ユーザーは編集できません。
cluster-config-file nodes-6379.conf
次に便利なクラスター オプションはcluster-node-timeout です。これは、インスタンスが障害状態にあるとみなされるまでの、インスタンスが利用できなくなる最大時間をミリ秒単位で設定するために使用されます。 15000 の値は 15 秒に相当します。
cluster-node-timeout 15000
6. ディスク上で Redis の永続性を有効にする必要もあります。永続化モードの 1 つである追加専用ファイル (AOF) を使用できます。ログは (appendonly.aof 作成されたファイルに記録されます)作業ディレクトリの下) すべての書き込み操作がサーバーによって正常に受信されました。データはサーバーの起動中に再生され、元のデータセットが再構築されます。
これを有効にするには、appendonly パラメータを yes
に設定します。
appendonly yes
7. すべての変更を加えた後、すべてのノードで Redis サービスを再起動して、最近の変更を適用します。
systemctl restart redis
8. この時点で、すべてのクラスタ ノードにIDが割り当てられているはずです。これは、/var/log/redis/redis.log にあるログファイルで確認できます。
cat /var/log/redis/redis.log
9. 次に、すべてのインスタンスでポート 6397 と 16379 を開きます。後のポートはクラスター バス ( バイナリ プロトコルを使用したノード間通信チャネル) に使用されます。これは、Redis クラスターの TCP 接続の基本要件です。
firewall-cmd --zone=public --permanent --add-port=6379/tcp
firewall-cmd --zone=public --permanent --add-port=16379/tcp
firewall-cmd --reload
ステップ 3: Redis クラスターの作成
10. クラスターを作成するには、次のように redis-cli コマンドライン クライアントを使用します。 --cluster create
はクラスターの作成を有効にし、--cluster-replicas 1
はマスターごとに 1 つのレプリカを作成することを意味します。
6 つのノードがあるセットアップでは、3 つのマスターと 3 つのスレーブが存在します。
最初の 6 ノードはマスター (M)
とみなされ、次の 3 ノードはスレーブ (S)
とみなされます。。最初のスレーブ (10.42.0.200:6379) は最初のマスター (10.42.0.247:6379) を複製し、2 番目のスレーブは 2 番目のマスターをこの順序で複製します。
次のコマンドは、結果が上記の論理設定を表すようにフォーマットされています。
redis-cli --cluster create 10.42.0.247:6379 10.42.0.197:6379 10.42.0.132:6379 10.42.0.200:6379 10.42.0.21:6379 10.42.0.34:6379 --cluster-replicas 1
11. クラスターの作成が成功したら、任意のホストで次のコマンドを実行し (-h
フラグを使用して IP アドレスを指定します)、すべてのクラスター ノードを一覧表示します。
redis-cli -h 10.42.0.247 -p 6379 cluster nodes
次のスクリーンショットに示すように、すべてのクラスター ノードと、マスターを示すスレーブが表示されるはずです。
さまざまなフィールドはこの順序で表示されます: ノード ID、IP アドレス:ポート、フラグ、最後に送信された ping、最後に受信された Pong、構成エポック、リンク状態、スロット (マスター用)。
ステップ 4: Redis クラスターのフェイルオーバーのテスト
12. このセクションでは、クラスターのフェイルオーバーをテストする方法を説明します。まず、マスターに注目してみましょう。
redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep master
また、Redis スレーブにも注意してください。
redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep slave
13. 次に、マスター ノードの 1 つ (10.42.0.197 など) で Redis サービスを停止し、クラスター内のすべてのマスター ノードを確認します。
systemctl stop redis
redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep master
次のスクリーンショットから、ノード 10.42.0.197:6367 が失敗状態にあり、そのスレーブ 10.42.0.21:6379 がマスター ステータスに昇格したことがわかります。
14. 次に、障害が発生したノードでもう一度 Redis サービスを開始し、クラスター内のすべてのマスターを確認してみましょう。
systemctl start redis
redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep master
また、クラスターのスレーブをチェックして、障害が発生したマスターがスレーブになっていることを確認します。
redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep slave
ステップ 5: Redis クラスター全体でのデータ レプリケーションのテスト
15. この最後のセクションでは、クラスター データのレプリケーションを検証する方法について説明します。次のように、マスターの 1 つでキーと値を作成し、それをすべてのクラスター ノードから読み取ってみます。 -c
スイッチを使用して、redis-cli ユーティリティでクラスターのサポートを有効にし、クラスター モードでデータにアクセスします。
redis-cli -c -h 10.42.0.247 -p 6379 set name 'TecMint.com'
redis-cli -c -h 10.42.0.247 -p 6379 get name
redis-cli -c -h 10.42.0.21 -p 6379 get name
redis-cli -c -h 10.42.0.132 -p 6379 get name
redis-cli -c -h 10.42.0.200 -p 6379 get name
redis-cli -c -h 10.42.0.197 -p 6379 get name
redis-cli -c -h 10.42.0.34 -p 6379 get name
結論としては、Redis クラスターは自動シャーディング、レプリケーション、高可用性を実現するための推奨される方法であるということです。 /etc/redis.conf ファイルの残りの部分には、他にも多くの十分に文書化された構成パラメータがあります。詳細については、公式ドキュメント「Redis クラスター チュートリアル」および「Redis クラスター仕様」を参照してください。
これで、3 部構成の Redis チュートリアル シリーズが終わります。以下のフィードバック フォームを使用して、質問やコメントを投稿できます。