redis clusterクラスタ構築

9028 ワード

今回はredis clusterクラスタ構築をお届けします.
 
1、まず、ドキュメントに基づいて6つのフォルダを作成し、ディレクトリcluster-test(フォルダ名と場所を任意に)をコンパイル済みredisルートディレクトリの下に作成し、cdはclustert-testに入り、7000-7005の計6つのフォルダを作成します.
mkdir cluster-test
cd cluster-test
mkdir 7000 7001 7002 7003 7004 7005

フォルダごとにredisを追加します.ファイル、redis.confファイルは私たちのredisルートディレクトリから取得すればいいです.
 
2、それからredisでconfの対応するコードは以下の形式に変更されます.
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

ポート番号は7000-7005から順に配置すればよい
 
3、その後、6つのredisをそれぞれ起動する必要がありますが、まずredisに入る必要があります.confファイルが存在するディレクトリ、例えば7000ディレクトリは、起動コマンドを実行します.
なぜかというと、実際に実行して7000-7005フォルダに入ると、各フォルダの下に対応するファイルが生成されていることがわかります.例えば、上のredisです.confは3行目のnodesを構成する.conf、ブロガーは穴に落ちた.(:з」∠)_......
起動コマンド:
cd 7000
redis-server ./redis.conf

redis-serverはredisの起動コマンドであり、環境変数に自分で追加する必要があります.
 
 
4、作者が書いたスクリプトが必要なので、redisのrubyモジュールをインストールする必要があります.
yum install ruby
yum install rubygems
gem install redis

次にredisのsrcディレクトリに入り、次の文を実行します.
./redis-trib.rb create --replicas 1 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

これによりクラスタが完了し,6個のredisが3マスタ3スレーブモードとなり,
redis-cli -p 7000 cluster nodes

この文で主従関係を出力できる
 
5、最後に試験することができます.
>redis-cli -c -h 127.0.0.1 -p 7000

なお、ここでは、クラスタモードに入ることを意味するパラメータ-cが追加されている.
127.0.0.1:7000> set a 10
-> Redirected to slot [15495] located at 127.0.0.1:7002

ここで、aというキャッシュは計算された後、ポート7002のmasterに落ち、slotはスロットである.
HASH_SLOT = CRC16(key) mod 16384

cluster nodesでは各masterに対応する溝が見えます
127.0.0.1:7002> cluster nodes
b3b19495801d2bf7960ae857ac5acd41884ab20f 127.0.0.1:7000 slave ce09b994443852c51f75a82b032ee4a0c0a203c5 0 1458577108602 7 connected
3dff391695f54477b4290afe434b8bda4bfec4e2 127.0.0.1:7005 slave 3fcd607421bfe9be0f277653cfd924c2c6d1c3c7 0 1458577109102 6 connected
ce09b994443852c51f75a82b032ee4a0c0a203c5 127.0.0.1:7003 master - 0 1458577108100 7 connected 0-5460
56d52eb49e6f9bcd2652b7f4cc00028e28fb346c 127.0.0.1:7004 slave 5f29d9b84350df536d60a1b32d93196d2be1b338 0 1458577110103 5 connected
3fcd607421bfe9be0f277653cfd924c2c6d1c3c7 127.0.0.1:7002 myself,master - 0 0 3 connected 10923-16383
5f29d9b84350df536d60a1b32d93196d2be1b338 127.0.0.1:7001 master - 0 1458577108601 2 connected 5461-1092

注意深い読者は、私の7000はslaveで、7003はmasterで、これは私が7000の手動killを落としてから再び起動したからです.
 
6、clusterの拡張について:
7006と7007の2つのサービスを作成し、プロセスは同じで、その後実行します.
./redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000

最初のアドレスは追加するノードで、2番目はクラスタ内の任意の有効なノードで、出力します.
>>> Adding node 127.0.0.1:7006 to cluster 127.0.0.1:7000
>>> Performing Cluster Check (using node 127.0.0.1:7000)
S: b3b19495801d2bf7960ae857ac5acd41884ab20f 127.0.0.1:7000
   slots: (0 slots) slave
   replicates ce09b994443852c51f75a82b032ee4a0c0a203c5
M: 5f29d9b84350df536d60a1b32d93196d2be1b338 127.0.0.1:7001
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 56d52eb49e6f9bcd2652b7f4cc00028e28fb346c 127.0.0.1:7004
   slots: (0 slots) slave
   replicates 5f29d9b84350df536d60a1b32d93196d2be1b338
M: 3fcd607421bfe9be0f277653cfd924c2c6d1c3c7 127.0.0.1:7002
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
S: 3dff391695f54477b4290afe434b8bda4bfec4e2 127.0.0.1:7005
   slots: (0 slots) slave
   replicates 3fcd607421bfe9be0f277653cfd924c2c6d1c3c7
M: ce09b994443852c51f75a82b032ee4a0c0a203c5 127.0.0.1:7003
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 127.0.0.1:7006 to make it join the cluster.
[OK] New node added correctly.

プライマリ・スレーブのステータスを確認します.
127.0.0.1:7000> cluster nodes
b3b19495801d2bf7960ae857ac5acd41884ab20f 127.0.0.1:7000 myself,slave ce09b994443852c51f75a82b032ee4a0c0a203c5 0 0 1 connected
5f29d9b84350df536d60a1b32d93196d2be1b338 127.0.0.1:7001 master - 0 1458578163681 2 connected 5461-10922
56d52eb49e6f9bcd2652b7f4cc00028e28fb346c 127.0.0.1:7004 slave 5f29d9b84350df536d60a1b32d93196d2be1b338 0 1458578164182 5 connected
3fcd607421bfe9be0f277653cfd924c2c6d1c3c7 127.0.0.1:7002 master - 0 1458578163180 3 connected 10923-16383
3dff391695f54477b4290afe434b8bda4bfec4e2 127.0.0.1:7005 slave 3fcd607421bfe9be0f277653cfd924c2c6d1c3c7 0 1458578163681 6 connected
ce09b994443852c51f75a82b032ee4a0c0a203c5 127.0.0.1:7003 master - 0 1458578164182 7 connected 0-5460
88645a7e5d89fb66de5ae9d7a4b90324a8acb7d9 127.0.0.1:7006 master - 0 1458578164684 0 connecte

7006がmasterとなり、7007が7006のslaveとしてクラスタに追加されていることがわかります.
./redis-trib.rb add-node --slave --master-id 88645a7e5d89fb66de5ae9d7a4b90324a8acb7d9 127.0.0.1:7007 127.0.0.1:7000

-slaveは現在のノードがslaveであることを示し、--master-idは誰のslaveであるかを示し、確認します.
127.0.0.1:7000> cluster nodes
b3b19495801d2bf7960ae857ac5acd41884ab20f 127.0.0.1:7000 myself,slave ce09b994443852c51f75a82b032ee4a0c0a203c5 0 0 1 connected
5f29d9b84350df536d60a1b32d93196d2be1b338 127.0.0.1:7001 master - 0 1458578725767 2 connected 5461-10922
56d52eb49e6f9bcd2652b7f4cc00028e28fb346c 127.0.0.1:7004 slave 5f29d9b84350df536d60a1b32d93196d2be1b338 0 1458578725265 5 connected
3fcd607421bfe9be0f277653cfd924c2c6d1c3c7 127.0.0.1:7002 master - 0 1458578725767 3 connected 10923-16383
7a4d3410f9b4f06733a08b79c2aa10a3762e565b 127.0.0.1:7007 slave 88645a7e5d89fb66de5ae9d7a4b90324a8acb7d9 0 1458578724264 0 connected
3dff391695f54477b4290afe434b8bda4bfec4e2 127.0.0.1:7005 slave 3fcd607421bfe9be0f277653cfd924c2c6d1c3c7 0 1458578724764 6 connected
ce09b994443852c51f75a82b032ee4a0c0a203c5 127.0.0.1:7003 master - 0 1458578724764 7 connected 0-5460
88645a7e5d89fb66de5ae9d7a4b90324a8acb7d9 127.0.0.1:7006 master - 0 1458578724264 0 connected

これは7007が7006になったslaveです.
 
7、この時また一つ問題がありました.7006はslotを割り当てていません.
したがって、slotを再分割するには、次の文を実行します.
> ./redis-trib.rb reshard 127.0.0.1:7000

中にはいくつかのステップがあります.
How many slots do you want to move (from 1 to 16384)? 1000 // =========1
What is the receiving node ID? 88645a7e5d89fb66de5ae9d7a4b90324a8acb7d9 // =====2
Please enter all the source node IDs.
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes IDs.
Source node #1:all // ==========3
...
Do you want to proceed with the proposed reshard plan (yes/no)? yes // =======4

1、1000は既存のslotから1000個のslotを取り出すことを示し、
2、node IDは1でslotが移行するノード(ここでは7006)を表し、
3、source nodeは、この1000個のslotをどのノードから取り出してターゲットノードに割り当てるかを表す.検証:
127.0.0.1:7000> cluster nodes
b3b19495801d2bf7960ae857ac5acd41884ab20f 127.0.0.1:7000 myself,slave ce09b994443852c51f75a82b032ee4a0c0a203c5 0 0 1 connected
5f29d9b84350df536d60a1b32d93196d2be1b338 127.0.0.1:7001 master - 0 1458578948666 2 connected 5795-10922
56d52eb49e6f9bcd2652b7f4cc00028e28fb346c 127.0.0.1:7004 slave 5f29d9b84350df536d60a1b32d93196d2be1b338 0 1458578947665 5 connected
3fcd607421bfe9be0f277653cfd924c2c6d1c3c7 127.0.0.1:7002 master - 0 1458578949669 3 connected 11256-16383
7a4d3410f9b4f06733a08b79c2aa10a3762e565b 127.0.0.1:7007 slave 88645a7e5d89fb66de5ae9d7a4b90324a8acb7d9 0 1458578948165 9 connected
3dff391695f54477b4290afe434b8bda4bfec4e2 127.0.0.1:7005 slave 3fcd607421bfe9be0f277653cfd924c2c6d1c3c7 0 1458578949167 6 connected
ce09b994443852c51f75a82b032ee4a0c0a203c5 127.0.0.1:7003 master - 0 1458578948165 7 connected 333-5460
88645a7e5d89fb66de5ae9d7a4b90324a8acb7d9 127.0.0.1:7006 master - 0 1458578949167 9 connected 0-332 5461-5794 10923-11255

7006ノードに1000個のslotが割り当てられていることがわかります.
 
8、最後に、ノードを削除します.
./redis-trib.rb del-node 127.0.0.1:7000 7a4d3410f9b4f06733a08b79c2aa10a3762e565b

del-nodeは削除ノードを表し、1番目のパラメータはいずれかの有効ノードであり、2番目のパラメータは削除するターゲットノードのIDである
空のmasterノードおよびslaveノードのみが削除できます.そうしないと、reshardを先にして、ターゲットmasterのslotをすべて移行する必要があります.このとき、nodeのslaveは他のmasterを探します.
 
ノードを削除すると、ターゲットノードのredisサービスも停止します.注意してください.