Redis cluster 水平扩容和缩容方案

1.环境介绍

软件信息 版本
操作系统  Linux release 7.8.2003
redis cluster(3分片) 4.0.12
ruby版本 ruby 2.3.4p301
gem  3.0.8

2. redis cluster集群信息以及扩容步骤

2.1 redis cluster集群信息

90cd13ebe59f0b60315604da024a73b1d5e6bf59 192.168.248.203:6002@16002 master - 0 1631993159000 3 connected 10923-16383
54c264f8925a0516a1db5354c914a57796f6a776 192.168.248.203:6000@16000 myself,master - 0 1631993155000 1 connected 0-5460
dbd2721f1d7d74966d723269366d5dc9f0dc3026 192.168.248.203:6005@16005 slave 54c264f8925a0516a1db5354c914a57796f6a776 0 1631993159783 6 connected
8bf604a68311aa62b76e5fd9f9cb533a13f572d8 192.168.248.203:6001@16001 master - 0 1631993158000 2 connected 5461-10922
ab2fad8b826f6662c5acc2b9aef207526b3dc7f3 192.168.248.203:6004@16004 slave 90cd13ebe59f0b60315604da024a73b1d5e6bf59 0 1631993157000 5 connected
93426ea4d6c6e42bb43c1db5c36b23a7bba1fbce 192.168.248.203:6003@16003 slave 8bf604a68311aa62b76e5fd9f9cb533a13f572d8 0 1631993158000 4 connected
192.168.248.203:6000    master
192.168.248.203:6001    master    
192.168.248.203:6002    master
192.168.248.203:6003    slave
192.168.248.203:6004    slave
192.168.248.203:6005    slave

新扩容节点信息

192.168.248.203:6006  new master
192.168.248.203:6007  new slave

2.2 增加一个节点

ruby ./redis-trib.rb add-node --password xxx  192.168.248.203:6006 192.168.248.203:6000

备注:
192.168.248.203:6006    ——新节点信息
192.168.248.203:6000    ——已存在的节点信息

2.3 获取新加入集群的master_id

[root@redis_zxb1 ~]# redis-cli -h 192.168.248.203 -p 6000 -a xxxx -c cluster nodes|grep master|sort -k2
Warning: Using a password with '-a' option on the command line interface may not be safe.
54c264f8925a0516a1db5354c914a57796f6a776 192.168.248.203:6000@16000 myself,master - 0 1631993709000 1 connected 0-5460
8bf604a68311aa62b76e5fd9f9cb533a13f572d8 192.168.248.203:6001@16001 master - 0 1631993713474 2 connected 5461-10922
90cd13ebe59f0b60315604da024a73b1d5e6bf59 192.168.248.203:6002@16002 master - 0 1631993712000 3 connected 10923-16383
e26f5016779a035c080bf71d554d74aeb5443869 192.168.248.203:6006@16006 master - 0 1631993711000 0 connected

2.4 为新节点迁移两个slots

[root@redis_zxb1 ~]# ruby ./redis-trib.rb  reshard  --password xxxx  --from all --to  e26f5016779a035c080bf71d554d74aeb5443869 --slots 2 --yes --pipeline 100000  192.168.248.203:6000             
>>> Performing Cluster Check (using node 192.168.248.203:6000)
M: 54c264f8925a0516a1db5354c914a57796f6a776 192.168.248.203:6000
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
M: 90cd13ebe59f0b60315604da024a73b1d5e6bf59 192.168.248.203:6002
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
S: dbd2721f1d7d74966d723269366d5dc9f0dc3026 192.168.248.203:6005
   slots: (0 slots) slave
   replicates 54c264f8925a0516a1db5354c914a57796f6a776
M: 8bf604a68311aa62b76e5fd9f9cb533a13f572d8 192.168.248.203:6001
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
M: e26f5016779a035c080bf71d554d74aeb5443869 192.168.248.203:6006
   slots: (0 slots) master
   0 additional replica(s)
S: ab2fad8b826f6662c5acc2b9aef207526b3dc7f3 192.168.248.203:6004
   slots: (0 slots) slave
   replicates 90cd13ebe59f0b60315604da024a73b1d5e6bf59
S: 93426ea4d6c6e42bb43c1db5c36b23a7bba1fbce 192.168.248.203:6003
   slots: (0 slots) slave
   replicates 8bf604a68311aa62b76e5fd9f9cb533a13f572d8
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

Ready to move 2 slots.
  Source nodes:
    M: 54c264f8925a0516a1db5354c914a57796f6a776 192.168.248.203:6000
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
    M: 90cd13ebe59f0b60315604da024a73b1d5e6bf59 192.168.248.203:6002
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
    M: 8bf604a68311aa62b76e5fd9f9cb533a13f572d8 192.168.248.203:6001
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
  Destination node:
    M: e26f5016779a035c080bf71d554d74aeb5443869 192.168.248.203:6006
   slots: (0 slots) master
   0 additional replica(s)
  Resharding plan:
    Moving slot 5461 from 8bf604a68311aa62b76e5fd9f9cb533a13f572d8
Moving slot 5461 from 192.168.248.203:6001 to 192.168.248.203:6006: ........................................................................................................

备注:
e26f5016779a035c080bf71d554d74aeb5443869   ——新加入节点的master_id
192.168.248.203:6000   ——已存在master节点的ip和port

2.5 检查迁移是否成功

[root@redis_zxb1 ~]# ruby ./redis-trib.rb  check  --password xxxx  192.168.248.203:6000                                >>> Performing Cluster Check (using node 192.168.248.203:6000)
M: 54c264f8925a0516a1db5354c914a57796f6a776 192.168.248.203:6000
   slots:1-5460 (5460 slots) master
   1 additional replica(s)
M: 90cd13ebe59f0b60315604da024a73b1d5e6bf59 192.168.248.203:6002
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
S: dbd2721f1d7d74966d723269366d5dc9f0dc3026 192.168.248.203:6005
   slots: (0 slots) slave
   replicates 54c264f8925a0516a1db5354c914a57796f6a776
M: 8bf604a68311aa62b76e5fd9f9cb533a13f572d8 192.168.248.203:6001
   slots:5462-10922 (5461 slots) master
   1 additional replica(s)
M: e26f5016779a035c080bf71d554d74aeb5443869 192.168.248.203:6006
   slots:0,5461 (2 slots) master
   0 additional replica(s)
S: ab2fad8b826f6662c5acc2b9aef207526b3dc7f3 192.168.248.203:6004
   slots: (0 slots) slave
   replicates 90cd13ebe59f0b60315604da024a73b1d5e6bf59
S: 93426ea4d6c6e42bb43c1db5c36b23a7bba1fbce 192.168.248.203:6003
   slots: (0 slots) slave
   replicates 8bf604a68311aa62b76e5fd9f9cb533a13f572d8
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

2.6 slots自动重均衡

 ruby ./redis-trib.rb  rebalance --password xxx --use-empty-masters --threshold 16 --pipeline 100000 192.168.248.203:6000
>>> Performing Cluster Check (using node 192.168.248.203:6000)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Rebalancing across 4 nodes. Total weight = 4
Moving 1365 slots from 192.168.248.203:6001 to 192.168.248.203:6006
#####################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################
Moving 1365 slots from 192.168.248.203:6002 to 192.168.248.203:6006
#####################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################
Moving 1364 slots from 192.168.248.203:6000 to 192.168.248.203:6006
####################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################

2.7 为新的主节点增加从节点

[root@redis_zxb1 ~]# ruby ./redis-trib.rb add-node  --password xxx --slave --master-id 54c264f8925a0516a1db5354c914a57796f6a776 192.168.248.203:6007 192.168.248.203:6000
>>> Adding node 192.168.248.203:6007 to cluster 192.168.248.203:6000
>>> Performing Cluster Check (using node 192.168.248.203:6000)
M: 54c264f8925a0516a1db5354c914a57796f6a776 192.168.248.203:6000
   slots:1365-5460 (4096 slots) master
   1 additional replica(s)
M: 90cd13ebe59f0b60315604da024a73b1d5e6bf59 192.168.248.203:6002
   slots:12288-16383 (4096 slots) master
   1 additional replica(s)
S: dbd2721f1d7d74966d723269366d5dc9f0dc3026 192.168.248.203:6005
   slots: (0 slots) slave
   replicates 54c264f8925a0516a1db5354c914a57796f6a776
M: 8bf604a68311aa62b76e5fd9f9cb533a13f572d8 192.168.248.203:6001
   slots:6827-10922 (4096 slots) master
   1 additional replica(s)
M: e26f5016779a035c080bf71d554d74aeb5443869 192.168.248.203:6006
   slots:0-1364,5461-6826,10923-12287 (4096 slots) master
   0 additional replica(s)
S: ab2fad8b826f6662c5acc2b9aef207526b3dc7f3 192.168.248.203:6004
   slots: (0 slots) slave
   replicates 90cd13ebe59f0b60315604da024a73b1d5e6bf59
S: 93426ea4d6c6e42bb43c1db5c36b23a7bba1fbce 192.168.248.203:6003
   slots: (0 slots) slave
   replicates 8bf604a68311aa62b76e5fd9f9cb533a13f572d8
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 192.168.248.203:6007 to make it join the cluster.
Waiting for the cluster to join.
>>> Configure node as replica of 192.168.248.203:6000.
[OK] New node added correctly.

至此,Redis cluster 3个分片就已经扩容到了四个分片。

3.Redis cluster 缩容方案

新集群信息

[root@redis_zxb1 ~]# r cluster nodes
Warning: Using a password with '-a' option on the command line interface may not be safe.
90cd13ebe59f0b60315604da024a73b1d5e6bf59 192.168.248.203:6002@16002 master - 0 1632043406000 3 connected 12288-16383
fa73be65bc37b9f9d64cf336766e42818ecc89c2 192.168.248.203:6007@16007 slave 54c264f8925a0516a1db5354c914a57796f6a776 0 1632043405000 1 connected
dbd2721f1d7d74966d723269366d5dc9f0dc3026 192.168.248.203:6005@16005 slave e26f5016779a035c080bf71d554d74aeb5443869 0 1632043407000 7 connected
e26f5016779a035c080bf71d554d74aeb5443869 192.168.248.203:6006@16006 master - 0 1632043404000 7 connected 0-1364 5461-6826 10923-12287
93426ea4d6c6e42bb43c1db5c36b23a7bba1fbce 192.168.248.203:6003@16003 slave 8bf604a68311aa62b76e5fd9f9cb533a13f572d8 0 1632043403000 4 connected
54c264f8925a0516a1db5354c914a57796f6a776 192.168.248.203:6000@16000 myself,master - 0 1632043405000 1 connected 1365-5460
ab2fad8b826f6662c5acc2b9aef207526b3dc7f3 192.168.248.203:6004@16004 slave 90cd13ebe59f0b60315604da024a73b1d5e6bf59 0 1632043405419 5 connected
8bf604a68311aa62b76e5fd9f9cb533a13f572d8 192.168.248.203:6001@16001 master - 0 1632043406443 2 connected 6827-10922

3.1 删除redis cluster 新添加的从节点

ruby redis-trib.rb del-node  --password xxx 192.168.248.203:6007 'fa73be65bc37b9f9d64cf336766e42818ecc89c2'

>>> Removing node fa73be65bc37b9f9d64cf336766e42818ecc89c2 from cluster 192.168.248.203:6007
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.

3.2 删除redis cluster新添加的主节点

ruby redis-trib.rb reshard  --password xxx  --from e26f5016779a035c080bf71d554d74aeb5443869 --to  54c264f8925a0516a1db5354c914a57796f6a776 --slots 1365 --yes --pipeline 100000  192.168.248.203:6000
ruby redis-trib.rb reshard  --password xxx  --from e26f5016779a035c080bf71d554d74aeb5443869 --to  8bf604a68311aa62b76e5fd9f9cb533a13f572d8 --slots 1365 --yes --pipeline 100000  192.168.248.203:6000
ruby redis-trib.rb reshard  --password xxx  --from e26f5016779a035c080bf71d554d74aeb5443869 --to  90cd13ebe59f0b60315604da024a73b1d5e6bf59 --slots 1366 --yes --pipeline 100000  192.168.248.203:6000

检查slots是否迁移完成

[root@redis_zxb1 ~]# ruby redis-trib.rb check --password xxxx  192.168.248.203:6000                                    >>> Performing Cluster Check (using node 192.168.248.203:6000)
M: 54c264f8925a0516a1db5354c914a57796f6a776 192.168.248.203:6000
   slots:0-5461 (5462 slots) master
   0 additional replica(s)
M: 90cd13ebe59f0b60315604da024a73b1d5e6bf59 192.168.248.203:6002
   slots:10923-16383 (5461 slots) master
   2 additional replica(s)
S: dbd2721f1d7d74966d723269366d5dc9f0dc3026 192.168.248.203:6005
   slots: (0 slots) slave
   replicates 90cd13ebe59f0b60315604da024a73b1d5e6bf59
M: e26f5016779a035c080bf71d554d74aeb5443869 192.168.248.203:6006
   slots: (0 slots) master
   0 additional replica(s)
S: 93426ea4d6c6e42bb43c1db5c36b23a7bba1fbce 192.168.248.203:6003
   slots: (0 slots) slave
   replicates 8bf604a68311aa62b76e5fd9f9cb533a13f572d8
S: ab2fad8b826f6662c5acc2b9aef207526b3dc7f3 192.168.248.203:6004
   slots: (0 slots) slave
   replicates 90cd13ebe59f0b60315604da024a73b1d5e6bf59
M: 8bf604a68311aa62b76e5fd9f9cb533a13f572d8 192.168.248.203:6001
   slots:5462-10922 (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.

删除主节点

[root@redis_zxb1 ~]# ruby redis-trib.rb  del-node --password xxxx  192.168.248.203:6006 'e26f5016779a035c080bf71d554d74aeb5443869'
>>> Removing node e26f5016779a035c080bf71d554d74aeb5443869 from cluster 192.168.248.203:6006
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.

最后集群信息确认

[root@redis_zxb1 ~]# r cluster nodes
Warning: Using a password with '-a' option on the command line interface may not be safe.
90cd13ebe59f0b60315604da024a73b1d5e6bf59 192.168.248.203:6002@16002 master - 0 1632044586000 10 connected 10923-16383
dbd2721f1d7d74966d723269366d5dc9f0dc3026 192.168.248.203:6005@16005 slave 90cd13ebe59f0b60315604da024a73b1d5e6bf59 0 1632044586478 10 connected
93426ea4d6c6e42bb43c1db5c36b23a7bba1fbce 192.168.248.203:6003@16003 slave 8bf604a68311aa62b76e5fd9f9cb533a13f572d8 0 1632044584437 9 connected
54c264f8925a0516a1db5354c914a57796f6a776 192.168.248.203:6000@16000 myself,master - 0 1632044585000 8 connected 0-5461
ab2fad8b826f6662c5acc2b9aef207526b3dc7f3 192.168.248.203:6004@16004 slave 90cd13ebe59f0b60315604da024a73b1d5e6bf59 0 1632044583008 10 connected
8bf604a68311aa62b76e5fd9f9cb533a13f572d8 192.168.248.203:6001@16001 master - 0 1632044585000 9 connected 5462-10922

至此,缩容已经完成。

4.最后解密

扩容所有的关键在于redis-trib.rb文件,而这个文件可以参考如下连接找到答案。即redis-trib.rb增加password部分

5.参考

https://github.com/wintersunny/redis-trib.rb---password

上一篇:PDF超过6000页,常用Java框架面试题目


下一篇:r5 6600U 怎么样 相当于什么水平