Redisクラスタの作成


詳細
一、redisコマンドを使用してクラスタを作成する
Redisインストールディレクトリの下にクラスタを作成するコマンドcreate-cluster startがあり、まずそのディレクトリに入ります
cd/opt/redis-3.2.8/utils/create-cluster/
1、実行
./create-cluster startの後に6つのノードを作成します.
Starting 30001
Starting 30002
Starting 30003
Starting 30004
Starting 30005
Starting 30006
2、実行
./create-cluster create後、yesと入力します.
Using 3 masters:
127.0.0.1:30001
127.0.0.1:30002
127.0.0.1:30003
Adding replica 127.0.0.1:30004 to 127.0.0.1:30001
Adding replica 127.0.0.1:30005 to 127.0.0.1:30002
Adding replica 127.0.0.1:30006 to 127.0.0.1:30003
M: 914b965bb9f4f9058683149ab383c2b868845b51 127.0.0.1:30001
   slots:0-5460 (5461 slots) master
M: c17b39b369260fca37d9eb125196ac4f91381a03 127.0.0.1:30002
   slots:5461-10922 (5462 slots) master
M: ac9e5b70070fe6c020bb85cd11089871931a1937 127.0.0.1:30003
   slots:10923-16383 (5461 slots) master
S: 6100cfd7a6711ec78132e636d9ea4f2dd4561a2b 127.0.0.1:30004
   replicates 914b965bb9f4f9058683149ab383c2b868845b51
S: e8885db7349fb6f8b22d32895b6411d4dd95e21d 127.0.0.1:30005
   replicates c17b39b369260fca37d9eb125196ac4f91381a03
S: 4490a4492b09757b4b6cb0203b3439c73aaab8c0 127.0.0.1:30006
   replicates ac9e5b70070fe6c020bb85cd11089871931a1937
Can I set the above configuration? (type 'yes' to accept):
クラスタの作成に成功したことを示す
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
3、クラスタ状態の表示
 redis-cli -c -p 30001 cluster info

cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_sent:1229
cluster_stats_messages_received:1229
4、クラスタノード情報の表示

127.0.0.1:30001> cluster nodes

ac9e5b70070fe6c020bb85cd11089871931a1937 127.0.0.1:30003 master - 0 1494133176091 3 connected 10923-16383
c17b39b369260fca37d9eb125196ac4f91381a03 127.0.0.1:30002 master - 0 1494133175688 2 connected 5461-10922
6100cfd7a6711ec78132e636d9ea4f2dd4561a2b 127.0.0.1:30004 slave 914b965bb9f4f9058683149ab383c2b868845b51 0 1494133176091 4 connected
914b965bb9f4f9058683149ab383c2b868845b51 127.0.0.1:30001 myself,master - 0 0 1 connected 0-5460
e8885db7349fb6f8b22d32895b6411d4dd95e21d 127.0.0.1:30005 slave c17b39b369260fca37d9eb125196ac4f91381a03 0 1494133176091 5 connected
4490a4492b09757b4b6cb0203b3439c73aaab8c0 127.0.0.1:30006 slave ac9e5b70070fe6c020bb85cd11089871931a1937 0 1494133176091 6 connected
二、手動でポートを指定し、6000から6個のノードを作成する
1、6000ノードを起動する

redis-server --port 6000 --cluster-enabled yes --cluster-config-file nodes-6000.conf --cluster-node-timeout 2000 --cluster-slave-validity-factor 10 --cluster-migration-barrier 1 --cluster-require-full-coverage yes --dbfilename dump-6000.rdb --daemonize yes

各パラメータの説明:
port:ノードポート番号
cluster-enabled:Redisがクラスタモードとして動作することを指定
cluster-config-file:クラスタの変化情報を保存するクラスタプロファイルパス
cluster-node-timeout:ノードの失効時間が長く、単位ミリ秒で、他のプライマリノードが指定された時間内にアクセスできない場合、タスクノードは失効します.ノードがmasterの場合salveがトリガーされ、salveの場合クエリーが停止します
cluster-slave-validity-factor:cluster-node-timeout*cluster-slave-validity-factorの値を超えるフェイルオーバファクタは、ノードからプライマリノードにはなりません
cluster-migration-barrier:最小スレーブノード数、例えばA-A 1,A 2,B-B 1,C-C 1、この値が2に設定されている場合、C 1がメインになるか、Aが2スレーブノードになるか、メインC 1が0スレーブノードになるか、この値が2になるため
cluster-require-full-coverage:yesの場合、クラスタ内のプライマリノードが故障した場合、クラスタ全体が使用できなくなり、noに設定され、hashからノードへの書き込み操作が失敗し、読み取り操作が正常に行われます.
dbfilename:redis永続化データを保存するファイル
daemonize:yesはバックグラウンドモードの実行を表します
bindパラメータによりipをバインドすることができる、例えばbind 192.168.174.128、物理機構にまたがって構築する時ipをバインドすることができる
2、以上のスクリプトのポートを修正し、6001602ノードを起動する
3、ノードhashマッピングの追加

redis-cli -c -p 6000 CLUSTER ADDSLOTS {0..5460}
redis-cli -c -p 6001 CLUSTER ADDSLOTS {5461..10922}
redis-cli -c -p 6002 CLUSTER ADDSLOTS {10923..16383}

4、configuration epochを追加し、クラスタの特定の時点の状態を記述する数値を設定し、ノードがフェイルオーバまたは再スライスしたときにこの値を使用する

redis-cli -c -p 6000 CLUSTER SET-CONFIG-EPOCH 1
redis-cli -c -p 6001 CLUSTER SET-CONFIG-EPOCH 2
redis-cli -c -p 6002 CLUSTER SET-CONFIG-EPOCH 3

5、ノード間相互訪問の追加

redis-cli -c -p 6000 CLUSTER MEET 127.0.0.1 6001
redis-cli -c -p 6000 CLUSTER MEET 127.0.0.1 6002

CLUSTER MEETはノード間で自動的に伝播できる
6.クラスタ情報の表示
redis-cli -c -p 6000 cluster info

cluster_state:ok
……
このセットのマスターノードの構成が完了しました
7、スレーブノードの追加
6003ノードを作成し、6003をクラスタに追加

redis-cli -c -p 6003 CLUSTER MEET 127.0.0.1 6000

redis-cli-c-p 6000 cluster nodes表示ノードの実行
……
632a1c4ad59406434d312690045ea9a29eb43be4 127.0.0.1:6000 myself,master - 0 0 1 connected 0-5460
8、6003を6000に設定するスレーブノード
redis-cli -c -p 6003 CLUSTER REPLICATE 632a1c4ad59406434d312690045ea9a29eb43be4

ノード情報の再表示
39217187b8c9f9fea9792330cda5cbb5aa5f5c32 127.0.0.1:6003 slave 632 a 1 c 4 ad 59406434 d 312690045 ea 9 a 29 eb 43 be 4 0 14941456699026 1 connected,6003が6000のsalveになることが分かった
同じ理屈で6004が60016005が6002のスレーブノードを設定でき、方法は同じです.
三、RedisはRubyのクラスタ作成スクリプトを提供する
1.redis-serverコマンドを実行して6個のノードを作成し、

for port in 5000 5001 5002 5003 5004 5005 5006 5007; do
redis-server --port ${port} --cluster-enabled yes --cluster-config-file
nodes-${port}.conf --cluster-node-timeout 2000 --cluster-slave-validityfactor
10 --cluster-migration-barrier 1 --cluster-require-full-coverage
yes --dbfilename dump-${port}.rdb --daemonize yes
done

2、クラスタの作成

./src/redis-trib.rb create --replicas 1 127.0.0.1:5000 127.0.0.1:5001
127.0.0.1:5002 127.0.0.1:5003 127.0.0.1:5004 127.0.0.1:5005

Rubyスクリプトは操作が簡単で便利で、中間ステップを省くことができます.