Redis学習ノート6-redisクラスタ(非分布式真のcluster)の構築


クラスタを正常に動作させるには少なくとも3つのプライマリノードが必要です.ここでは6つのredisノードを作成します.
そのうち3つはプライマリノードであり、3つはセカンダリノードであり、対応するredisノードのipとポートの対応関係は以下の通りである.
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

1.redisクラスタ構成:


redis.confはredis-clusterとしてコピーする.conf、次の構成を変更します.
port 6379
bing  #       127.0.0.1      IP         
appendonly yes
daemonize yes #         

クラスタに関する構成:
cluster-enabled yes
cluster-config-file nodes-6379.conf #(   nodes-        ,    )
cluster-node-timeout 15000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes

redis-cluster.confは、ポート番号で命名されたフォルダの下に6部コピーし、名前をポート番号に変更して区別します.
以下の構成をそれぞれ変更します.
port #     
bing  #  ip       127.0.0.1      
cluster-config-file

2、rediaクラスタ環境の準備


インストールする必要があるもの:
ruby(redis-trib.rbスクリプトを実行し、クラスタを作成するために使用されます)
rubygems(redisをインストールするために使用)ここでインストールするにはredisを再ダウンロードする必要はありません
インストールコマンド:
redis-cluterの構築にはrubyのスクリプトを実行する必要があるためrubyの環境が必要である
まずrubyをインストールする環境が必要です
yum install ruby

またはrubyダウンロードアドレス
次にyumを使用してgemをインストールします
yum install rubygems

またはgemsダウンロードアドレス
次にgemを使用してredisをインストールします.たとえば、私のバージョンは3.2.1です.
gem install -l redis-3.2.1.gem

3、クラスタの起動と確立


redisのsrcディレクトリにアクセスして実行できます
./redis-trib.rb  create --replicas 1 127.0.0.1:7000127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

デフォルトでは、最初の3つがプライマリで、後の3つがセカンダリです.
デフォルトではslavesからデータを読み取ることはできませんが、接続が確立されたら、READONLYを1回実行し、このslavesでデータを読み取ることができます.

4、クライアントログイン


redis-cli-c-h-pコマンドでログイン
-cはクラスタ方式でログインします. 
-hの後にホスト番号;
-pの後にポート番号が付いています.
127.0.0.1をバインドすると-hパラメータを省略できます.-cを追加しないとクライアントは自動的に切り替えられません.
たとえば、クライアントが7000ポートにログインした場合、設定したデータを7001に保存するとエラーが発生します.7001に移動してください.-c起動を加えると7001クライアント保存に自動的に切り替わります.

5、クラスタ構成解析


 
デフォルトではslavesからデータを読み取ることはできませんが、接続が確立されたら、READONLYを1回実行し、このslavesでデータを読み取ることができます.
そうでなければredis-cli-c-h-pコマンドでしかログインできません-cはクラスタ方式です
cluster-enabled yesクラスタスイッチは、デフォルトではクラスタモードをオンにしません.
cluster-config-file nodes-6379.confクラスタプロファイルの名前は、各ノードにクラスタ関連のプロファイルがあり、クラスタの情報を永続化して保存します.このファイルは手動で構成する必要はありません.このプロファイルにはRedisが生成され、更新されます.各Redisクラスタノードには個別のプロファイルが必要です.インスタンスが実行されているシステムでプロファイル名が競合しないことを確認してください.
cluster-node-timeout 15000ノード相互接続タイムアウトのバルブ値.クラスタノードのタイムアウトミリ秒数.すなわち,ノードがクラスタの他のノードとどのくらい切断されるかはタイムアウトとみなされる.少し大きめのものをお勧めします
cluster-slave-validity-factor 10は、フェイルオーバを行う際に、すべてのslaveがmasterとして申請するように要求しますが、masterと接続が切断されている可能性があり、データが古すぎるため、このようなslaveはmasterに昇格するべきではありません.このパラメータは、slaveノードとmasterが断線する時間が長すぎるかどうかを判断するために使用されます.判断方法は、slaveの切断時間と(node-timeout*slave-validity-factor)+repl-ping-slave-periodノードのタイムアウト時間が30秒で、slave-validity-factorが10である場合、デフォルトのrepl-ping-slave-periodが10秒であると仮定します.すなわち、310秒を超えるとslaveはフェイルオーバを試みません.
cluster-migration-barrier 1 masterのslave数がこの値より大きい場合、slaveは他の孤立masterに移行できます.このパラメータが2に設定されている場合、1つのプライマリノードが2つの動作可能なスレーブノードを持っている場合にのみ、その1つのスレーブノードが移行しようとします.
cluster-require-full-coverage yesのデフォルトでは、クラスタのすべてのslotにはノードが責任を負い、クラスタの状態はokであり、サービスを提供することができます.Noに設定すると、slotがすべて割り当てられていないときにサービスを提供できます.この構成を開くことをお勧めしません.これにより、パーティションが発生すると、小さなパーティションのmasterは書き込み要求を受け入れ続け、長い間データが一致しません.
次の記事では、クラスタノードにslotを追加、削除、割り当て方法について説明します.