Redis的集群技术

因为可能会忘记,所以记下来。

版本

redis_version:3.0.4

限制(遇到了问题的部分)

    • マスター3つ以上必要

 

    • 2つまでだとエラーでクラスタ作成できない。

 

    • ノード削除はスロットを持たない場合でないとできない。

 

    • cluster reshard で別マスタへ移動しておく必要がある。 ← テスト系でめんどい場合は cluster reset で。

cluster reset はデータがあるとできない。
あらかじめ flushall などで中身を飛ばしておく。
エンドポイント指定はクライアントから見える必要がある。
例えば開発環境で 127.0.0.1:7001 などと指定して別マシンからアクセスすると MOVED のエラーが出る。
外部から認識されるIPとポートで指定する必要がある。

设定

只提取必要的东西

appendonly          yes        # アペンドログ必須

cluster-enabled     yes
cluster-config-file nodes.conf # クラスタ状況を保存するファイル、開発など1台で複数立てる場合は個別にファイル作成

初始化程序

如果在一个服务器上启动多个实例,那么 rh_status_q 会成为一个阻碍,所以需要修改为 start 等内容。

指令

下载redis源码时,使用src/redis-trib.rb。
虽然有点麻烦,但将其链接到一个bin文件(移动后是否正常运行未确认)。
由于只构建了开发环境,所以没有进行中间的添加或删除操作。

# ポート7001~7003のredisでクラスタ作成
# スロットは既定で16384個を適宜分散してくれる。
# あらかじめ3つ立てておくこと。
$ redis-trib.rb create --replicas 0 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003
>>> Creating cluster
Connecting to node 127.0.0.1:7001: OK
Connecting to node 127.0.0.1:7002: OK
Connecting to node 127.0.0.1:7003: OK
>>> Performing hash slots allocation on 3 nodes...
Using 3 masters:
127.0.0.1:7001
127.0.0.1:7002
127.0.0.1:7003
M: d510983e678bdba33a7039dd4d22ac8b90d32647 127.0.0.1:7001
   slots:0-5460 (5461 slots) master
M: 61910e138c5c2d793f7159a69b3a5b1f4baaa7f5 127.0.0.1:7002
   slots:5461-10922 (5462 slots) master
M: 32ec8ce4865fe0430b557e921e3870aab3bcc836 127.0.0.1:7003
   slots:10923-16383 (5461 slots) master
Can I set the above configuration? (type 'yes' to accept): yes  # ← ここでyesを入力
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join.
>>> Performing Cluster Check (using node 127.0.0.1:7001)
M: d510983e678bdba33a7039dd4d22ac8b90d32647 127.0.0.1:7001
   slots:0-5460 (5461 slots) master
M: 61910e138c5c2d793f7159a69b3a5b1f4baaa7f5 127.0.0.1:7002
   slots:5461-10922 (5462 slots) master
M: 32ec8ce4865fe0430b557e921e3870aab3bcc836 127.0.0.1:7003
   slots:10923-16383 (5461 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
# ポート7002~7006のredisでクラスタ+スレーブ作成
# --replicas はスレーブ数を指定、初期台数見て適宜マスター/スレーブを振るプランを提示してくる。
$ redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 ...途中略... 127.0.0.1:7006
>>> Creating cluster
Connecting to node 127.0.0.1:7001: OK
Connecting to node 127.0.0.1:7002: OK
Connecting to node 127.0.0.1:7003: OK
Connecting to node 127.0.0.1:7004: OK
Connecting to node 127.0.0.1:7005: OK
Connecting to node 127.0.0.1:7006: OK
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:7001
127.0.0.1:7002
127.0.0.1:7003
Adding replica 127.0.0.1:7004 to 127.0.0.1:7001
Adding replica 127.0.0.1:7005 to 127.0.0.1:7002
Adding replica 127.0.0.1:7006 to 127.0.0.1:7003
M: d510983e678bdba33a7039dd4d22ac8b90d32647 127.0.0.1:7001
   slots:0-5460 (5461 slots) master
M: 61910e138c5c2d793f7159a69b3a5b1f4baaa7f5 127.0.0.1:7002
   slots:5461-10922 (5462 slots) master
M: 32ec8ce4865fe0430b557e921e3870aab3bcc836 127.0.0.1:7003
   slots:10923-16383 (5461 slots) master
S: 8c010c600b53c39de85eeb3eaf96729cfbf8c5e3 127.0.0.1:7004
   replicates d510983e678bdba33a7039dd4d22ac8b90d32647
S: acec75627418db78c45b55ac0adee74e34afc91e 127.0.0.1:7005
   replicates 61910e138c5c2d793f7159a69b3a5b1f4baaa7f5
S: 83d54ce8ad560d9b4ff674b13daa4ce7e40178fd 127.0.0.1:7006
   replicates 32ec8ce4865fe0430b557e921e3870aab3bcc836
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join...
>>> Performing Cluster Check (using node 127.0.0.1:7001)
M: d510983e678bdba33a7039dd4d22ac8b90d32647 127.0.0.1:7001
   slots:0-5460 (5461 slots) master
M: 61910e138c5c2d793f7159a69b3a5b1f4baaa7f5 127.0.0.1:7002
   slots:5461-10922 (5462 slots) master
M: 32ec8ce4865fe0430b557e921e3870aab3bcc836 127.0.0.1:7003
   slots:10923-16383 (5461 slots) master
M: 8c010c600b53c39de85eeb3eaf96729cfbf8c5e3 127.0.0.1:7004
   slots: (0 slots) master
   replicates d510983e678bdba33a7039dd4d22ac8b90d32647
M: acec75627418db78c45b55ac0adee74e34afc91e 127.0.0.1:7005
   slots: (0 slots) master
   replicates 61910e138c5c2d793f7159a69b3a5b1f4baaa7f5
M: 83d54ce8ad560d9b4ff674b13daa4ce7e40178fd 127.0.0.1:7006
   slots: (0 slots) master
   replicates 32ec8ce4865fe0430b557e921e3870aab3bcc836
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

我可能会在下次写上add-node和del-node。

命令行界面

redis-cli -p 7001 -c

可以使用-h或-p来指定群集中的一台服务器,将其作为目标从机,并且没有问题。
-c是群集选项,启用它或不启用会导致与其他服务器的配置行为不同。

# -c付
$ redis-cli -p 7001 -c set testkey1 10
-> Redirected to slot [13567] located at 127.0.0.1:7004
OK

# -c無
$ redis-cli -p 7001 set testkey1 10
(error) MOVED 13567 127.0.0.1:7004
广告
将在 10 秒后关闭
bannerAds