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