Redisクラスター 組み込みのRedis 以前はSentinelsを使用して実装されていた自動シャーディング、レプリケーション、および高可用性をサポートする機能 。これは、2つの主要な目的のために設計されています。1つはデータセットを複数のインスタンスに自動的に分割し、もう1つはパーティション中にある程度の可用性を提供すること、一部のインスタンス(特にマスター)に障害が発生した場合や大部分のインスタンスと通信できない場合に操作を続行することです。クラスタ内のノード。
ただし、より大きな障害が発生した場合(たとえば、マスターインスタンスの大部分が使用できない場合)、クラスターは動作を停止します。また、マスターとスレーブに同時に障害が発生した場合、クラスターは通常の操作を続行できません(ただし、回避策は、ノードを追加するか、クラスターに非対称性を作成して、クラスターのレイアウトを自動変更することです)。
Redisによると クラスターのドキュメント、「最小クラスター 」が期待どおりに機能するには、少なくとも3つのマスターノードが含まれている必要があります。ただし、高可用性に最適なセットアップには、3つのマスターと3つのスレーブを備えた少なくとも6つのノードが必要であり、各マスターにはスレーブがあります。
<強い色:赤;">重要 :Redis Clusterには、 NATtedのサポートがないといういくつかの制限もあります。 環境、およびIPアドレスまたはTCPポートがたとえば Dockerの下で再マップされる環境 。さらに、すべてのクライアントライブラリがそれをサポートしているわけではありません。
この記事では、Redisクラスターを設定する方法を説明します (クラスターモードを無効にする ) CentOS 8 。これには、Redisのインストール、クラスターノードの構成、クラスターの作成、クラスターフェイルオーバーのテストの方法が含まれています。
<強い色:赤;">注 :このガイドでは、新しい/空のRedisインスタンスを使用してクラスターモードを実行します。クラスターモードは、Redisシリーズの最初の2つのガイドで行われた一部の構成では機能しません。特に、パラメーターのレプリカが使用されている場合は機能しません。
前提条件:
- CentOS8がインストールされているサーバー
テスト環境のセットアップ
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クラスター論理図
このセットアップには、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。 次に、次の構成パラメーターを見つけて、図のようにそれらの値を編集します。 バインド パラメータは、Redisサーバーがリッスンするインターフェースを設定し、その値をインスタンスLANIPに設定します。 127.0.0.1を削除します そこに置いておくと、クラスターの作成プロセス、特にクラスターに参加する段階が遅くなることに気付いたからです。
bind 10.42.0.247
次に、プロテクトモードを設定します no
クラスタ上の他のインスタンスからの接続を許可します。
protected-mode no
portパラメーターは、Redisサーバーが接続をリッスンするポートを定義します。デフォルトは 6379です。 。これは、クライアントと通信するためのデータポートです。
port 6379

Redisリッスンインターフェイスとポートを設定する
5。 次のパラメータセットは、クラスタモードを有効にし、その便利な機能のいくつかを設定します。 クラスター対応 yes
に設定されている場合のパラメータ 、クラスターモードをアクティブにします。
cluster-enabled yes
次に、 cluster-config-file パラメータは、クラスタノードのクラスタ構成ファイルの名前を設定します(例:ノード-6379.conf )。ファイルは作業ディレクトリに作成されます(デフォルトは / var / lib / redis dirを使用して定義 パラメータ)であり、ユーザーが編集することはできません。
cluster-config-file nodes-6379.conf
次の便利なクラスターオプションは、 cluster-node-timeoutです。 、インスタンスが障害状態であると見なされるためにインスタンスが使用できない可能性がある最大時間をミリ秒単位で設定するために使用されます。 15000の値 15と同等です 秒。
cluster-node-timeout 15000

クラスターノードタイムアウトの設定
6。 また、ディスク上でRedisの永続性を有効にする必要があります。永続化モードの1つであるファイルのみを追加を使用できます。 ( AOF ):ログに記録します(ファイル appendonly.aof 作業ディレクトリの下に作成されます)サーバーが正常に受信したすべての書き込み操作。サーバーの起動時にデータが再生され、元のデータセットが再構築されます。
有効にするには、追加のみを設定します 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-replicas1
を有効にします マスターごとに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>

Redisクラスターを作成する
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のスレーブにも注意してください。
# redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep slave

すべてのRedisクラスタースレーブを一覧表示する
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 マスターステータスに昇格しました。

クラスタフェイルオーバーステータスの確認
14。 それでは、 Redisを始めましょう 障害が発生したノードでもう一度サービスを提供し、クラスター内のすべてのマスターを確認します。
# systemctl start redis # 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

すべてのRedisクラスタースレーブを確認する
ステップ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クラスターデータレプリケーションを確認する
一番下の行はRedisクラスターです 自動シャーディング、レプリケーション、および高可用性を実現するための推奨される方法です。 /etc/redis.conf の残りの部分には、他にも多くの十分に文書化された構成パラメーターがあります。 ファイルの詳細については、公式ドキュメント(RedisクラスターチュートリアルとRedisクラスター仕様)を参照してください。
これで、3部構成のRedisチュートリアルシリーズは終了です。以下のフィードバックフォームを使用して、質問やコメントを投稿できます。
共有は思いやりがあります…Facebookで共有するTwitterで共有するLinkedinで共有するRedditで共有する