CentOS 8にRedis Clusterを設定する方法 – パート3

Redis Clusterは、以前はSentinelsを使用して実装されていた、自動シャーディング、レプリケーション、高可用性をサポートするRedisの組み込み機能です。これは、データセットを複数のインスタンス間で自動的に分割し、パーティション中に一定の可用性を提供することを目的として設計されています。特にマスターインスタンスのいくつかが利用できない場合やクラスタ内のノードの大多数と通信できない場合でも、操作を継続するためのものです。

ただし、クラスタは大規模な障害(たとえば、大多数のマスターインスタンスが利用できない場合)が発生した場合には動作を停止します。また、マスターとスレーブが同時に失敗した場合、クラスタは通常の操作を継続することができません(ただし、ワークアラウンドとして、ノードを追加したり、クラスタ内で非対称性を作成してクラスタレイアウトを自動変更することができます)。

Redisクラスタのドキュメントによると、期待どおりに機能する「minimal cluster」には少なくとも3つのマスターノードが含まれている必要があります。ただし、高可用性のために最適なセットアップは、3つのマスターと3つのスレーブを持つ少なくとも6つのノードを持つべきであり、各マスターにはスレーブが1つずついるべきです。

重要:Redis Clusterには、NATted環境やIPアドレスやTCPポートが再マップされるような環境など、いくつかの制限があります。さらに、すべてのクライアントライブラリがそれをサポートしているわけではありません。

この記事では、Redis ClusterCluster-Mode Disabled)をCentOS 8に設定する方法を示しています。Redisのインストール方法、クラスターノードの構成、クラスターの作成、クラスターのフェイルオーバーのテスト方法が含まれています。

注意:このガイドでは、クラスターモードを実行するために新しい/空のRedisインスタンスを使用します。クラスターモードは、当社のRedisシリーズの最初の2つのガイドで行われた一部の構成で機能しません。特に、パラメーターのレプリカが使用されている場合には機能しません。

前提条件:

  1. 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
Redis Cluster Logical Diagram

当社のセットアップには、読み書き可能なマスターノード3つと読み取り専用のレプリカノード3つがあります。各マスターには1つのレプリカがあり、各ノードにクラスターのすべてのデータを含む3つのシャードがあります。アプリケーションAPIまたはCLIクライアントは、マスターノードにのみ書き込み、クラスター内の任意のノードから読み取ることができます。

ステップ1:すべてのノードにRedisをインストール

1. すべてのインスタンスにSSHでログインし、次のコマンドを実行して、RedisモジュールをDNFパッケージマネージャーを使用してインストールします。

# 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

protected-modenoに設定して、クラスター内の他のインスタンスからの接続を許可します。

protected-mode no

ポートパラメータは、Redisサーバーが接続を待機するポートを定義します。デフォルトは6379です。これはクライアントと通信するためのデータポートです。

port 6379
Set Redis Listen Interface and Port

5.次の一連のパラメータは、クラスターモードを有効にし、その便利な機能を設定します。cluster-enabledパラメータは、yesに設定されると、クラスターモードがアクティブ化されます。

cluster-enabled yes

次に、cluster-config-fileパラメータは、クラスターノードのクラスター構成ファイルの名前を設定します(例:nodes-6379.conf)。ファイルは作業ディレクトリ(デフォルトは/var/lib/redisdirパラメータを使用して定義)に作成され、ユーザーが編集できません。

cluster-config-file nodes-6379.conf

次の便利なクラスターオプションはcluster-node-timeoutで、インスタンスが利用できない状態と見なされるための最大無効時間をミリ秒単位で設定します。値が15000の場合、15秒に相当します。

cluster-node-timeout 15000
Set Cluster Node Timeout

6.また、Redisのディスク上の永続性を有効にする必要があります。永続性モードの1つであるAppend Only FileAOF)を使用できます:サーバーが正常に受信したすべての書き込み操作を記録します(作業ディレクトリに作成されたファイルappendonly.aof)。データはサーバーの起動時に再生され、元のデータセットを再構築します。

これを有効にするには、appendonlyパラメータをyesに設定します。

appendonly yes
Set Persistence Options

7. すべての変更を行った後、最新の変更を適用するためにすべてのノードでRedisサービスを再起動してください。

# systemctl restart redis

8. この時点で、すべてのクラスターノードにはIDがあります。これは/var/log/redis/redis.logにあるログファイルで確認できます。

# cat /var/log/redis/redis.log
Check Cluster Node Log File

9. 次に、すべてのインスタンスでポート639716379を開いてください。後者のポートは、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
Create Redis Cluster

11. クラスターの作成が成功したら、任意のホストで次のコマンドを実行してクラスターノードをリストアップします(-h フラグを使用してそのIPアドレスを指定してください)。

# redis-cli -h 10.42.0.247 -p 6379 cluster nodes

スクリーンショットに示されているように、すべてのクラスターノードおよびスレーブがそのマスターを示すのが見えるはずです。

Check All Cluster Nodes on Any Node

異なるフィールドは次の順序であります:ノードID、IPアドレス:ポート、フラグ、最終ping送信、最終pong受信、設定エポック、リンク状態、スロット(マスター用)。

ステップ4:Redisクラスターのフェイルオーバーをテスト

12. このセクションでは、クラスターフェイルオーバーのテスト方法を示します。まず、マスターを控えておきましょう。

# redis-cli -h 10.42.0.247 -p 6379 cluster nodes  | grep master
List Redis Cluster Masters

また、Redisスレーブも控えておいてください。

# redis-cli -h 10.42.0.247 -p 6379 cluster nodes  | grep slave
List All Redis Cluster Slaves

13. 次に、マスターノードの1つでRedisサービスを停止し、クラスター内のすべてのマスターノードを確認してください。たとえば、10.42.0.197のようなノードを停止します。

# 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 がマスターの地位に昇格しているのがわかります。

Check Cluster Failover Status

14. 今、失敗したノードで再び Redis サービスを開始し、クラスター内のすべてのマスターを確認してください。

# systemctl start redis
# redis-cli -h 10.42.0.247 -p 6379 cluster nodes  | grep master
Check All Redis Cluster Master Status

また、失敗したマスターがスレーブになっていることを確認するために、クラスタースレーブも確認してください。

# redis-cli -h 10.42.0.247 -p 6379 cluster nodes  | grep slave
Check All Redis Cluster Slaves

ステップ5:Redisクラスター間のデータレプリケーションをテスト

15.この最後のセクションでは、クラスターデータのレプリケーションを検証する方法について説明します。マスターの1つでキーと値を作成し、次にすべてのクラスターノードからそれを読み取ろうとします。redis-cliユーティリティで-cスイッチを使用してクラスターサポートを有効にし、クラスターモードでデータにアクセスします。

# 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
Verify Redis Cluster Data Replication

要するに、Redisクラスターは自動シャーディング、レプリケーション、高可用性を実現する推奨方法です。その他、/etc/redis.confファイルの他の多くのよく文書化された構成パラメータがあり、公式ドキュメントに詳細情報が記載されています:RedisクラスターチュートリアルおよびRedisクラスター仕様

これで3部作のRedisチュートリアルシリーズは終わります。以下のフィードバックフォームを使用して質問やコメントを投稿できます。

Source:
https://www.tecmint.com/setup-redis-cluster-in-centos-8/