这里将上篇博客搭建的3主3从 扩容为 4主4从
1. 新建两个node节点
- docker run -d \
- --net host \
- --privileged \
- --name redis-node-7 \
- --log-opt max-size=100m \
- --log-opt max-file=3 \
- -v /root/docker/redis-node-7/data:/data \
- redis:6.0.8 \
- --cluster-enabled yes \
- --appendonly yes \
- --port 16385 \
- --requirepass admin123
-
- docker run -d \
- --net host \
- --privileged \
- --name redis-node-8 \
- --log-opt max-size=100m \
- --log-opt max-file=3 \
- -v /root/docker/redis-node-8/data:/data \
- redis:6.0.8 \
- --cluster-enabled yes \
- --appendonly yes \
- --port 16386 \
- --requirepass admin123
2. 将新的 master node 加入集群
docker exec -it redis-node-1 bash
redis-cli --pass admin123 --cluster add-node 你的ip:16385 你的ip:16379
- root@OrionEcsServer:/data# redis-cli --pass admin123 --cluster add-node 172.19.6.128:16385 172.19.6.128:16379
- Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
- >>> Adding node 172.19.6.128:16385 to cluster 172.19.6.128:16379
- >>> Performing Cluster Check (using node 172.19.6.128:16379)
- M: ff3488c654a8006784faa35b8a181a567ec2436a 172.19.6.128:16379
- slots:[0-5460] (5461 slots) master
- 1 additional replica(s)
- S: 001837d619d76cda8e0e537321032363970f5bc9 172.19.6.128:16383
- slots: (0 slots) slave
- replicates ff3488c654a8006784faa35b8a181a567ec2436a
- S: e02423adc0d998e84a7152e099a96402ea01c3e8 172.19.6.128:16384
- slots: (0 slots) slave
- replicates 30dd349f6405017a5063d25b9e1d61f39db4c3dc
- M: 7de702973b5d649d206d4ba48c772155f6088657 172.19.6.128:16381
- slots:[10923-16383] (5461 slots) master
- 1 additional replica(s)
- M: 30dd349f6405017a5063d25b9e1d61f39db4c3dc 172.19.6.128:16380
- slots:[5461-10922] (5462 slots) master
- 1 additional replica(s)
- S: b76af89d5b835c36201479c9284f2a4ad4b8f820 172.19.6.128:16382
- slots: (0 slots) slave
- replicates 7de702973b5d649d206d4ba48c772155f6088657
- [OK] All nodes agree about slots configuration.
- >>> Check for open slots...
- >>> Check slots coverage...
- [OK] All 16384 slots covered.
- >>> Send CLUSTER MEET to node 172.19.6.128:16385 to make it join the cluster.
- [OK] New node added correctly.
3. 检查集群状态
redis-cli --pass admin123 --cluster check 你的ip:16379
执行后记录新master的ID 后面重新分配slot会用: 3f081a67bbc0a1e7f9a0a0a27704cc5ee513fee6
- root@OrionEcsServer:/data# redis-cli --pass admin123 --cluster check 172.19.6.128:16379
- Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
- 172.19.6.128:16379 (ff3488c6...) -> 0 keys | 5461 slots | 1 slaves.
- 172.19.6.128:16385 (3f081a67...) -> 0 keys | 0 slots | 0 slaves.
- 172.19.6.128:16381 (7de70297...) -> 0 keys | 5461 slots | 1 slaves.
- 172.19.6.128:16380 (30dd349f...) -> 0 keys | 5462 slots | 1 slaves.
- [OK] 0 keys in 4 masters.
- 0.00 keys per slot on average.
- >>> Performing Cluster Check (using node 172.19.6.128:16379)
- M: ff3488c654a8006784faa35b8a181a567ec2436a 172.19.6.128:16379
- slots:[0-5460] (5461 slots) master
- 1 additional replica(s)
- M: 3f081a67bbc0a1e7f9a0a0a27704cc5ee513fee6 172.19.6.128:16385
- slots: (0 slots) master
- S: 001837d619d76cda8e0e537321032363970f5bc9 172.19.6.128:16383
- slots: (0 slots) slave
- replicates ff3488c654a8006784faa35b8a181a567ec2436a
- S: e02423adc0d998e84a7152e099a96402ea01c3e8 172.19.6.128:16384
- slots: (0 slots) slave
- replicates 30dd349f6405017a5063d25b9e1d61f39db4c3dc
- M: 7de702973b5d649d206d4ba48c772155f6088657 172.19.6.128:16381
- slots:[10923-16383] (5461 slots) master
- 1 additional replica(s)
- M: 30dd349f6405017a5063d25b9e1d61f39db4c3dc 172.19.6.128:16380
- slots:[5461-10922] (5462 slots) master
- 1 additional replica(s)
- S: b76af89d5b835c36201479c9284f2a4ad4b8f820 172.19.6.128:16382
- slots: (0 slots) slave
- replicates 7de702973b5d649d206d4ba48c772155f6088657
- [OK] All nodes agree about slots configuration.
- >>> Check for open slots...
- >>> Check slots coverage...
- [OK] All 16384 slots covered.
4. 重新分配 slot
redis-cli --pass admin123 --cluster reshard 你的:16379
第一次输入: 新分配的槽数 4096 (16384/4=4096)
第二次输入: 槽的接收者ID 3f081a67bbc0a1e7f9a0a0a27704cc5ee513fee6 上面记录ID的 (这里不要有空格)
第三次输入: 槽分配的数量 all 从所有节点均匀分配
第四次输入: 确认操作 yes
执行完成后耐心等待槽的重新分配
- root@OrionEcsServer:/data# redis-cli --pass admin123 --cluster reshard 172.19.6.128:16379
- Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
- >>> Performing Cluster Check (using node 172.19.6.128:16379)
- M: ff3488c654a8006784faa35b8a181a567ec2436a 172.19.6.128:16379
- slots:[0-5460] (5461 slots) master
- 1 additional replica(s)
- M: 3f081a67bbc0a1e7f9a0a0a27704cc5ee513fee6 172.19.6.128:16385
- slots: (0 slots) master
- S: 001837d619d76cda8e0e537321032363970f5bc9 172.19.6.128:16383
- slots: (0 slots) slave
- replicates ff3488c654a8006784faa35b8a181a567ec2436a
- S: e02423adc0d998e84a7152e099a96402ea01c3e8 172.19.6.128:16384
- slots: (0 slots) slave
- replicates 30dd349f6405017a5063d25b9e1d61f39db4c3dc
- M: 7de702973b5d649d206d4ba48c772155f6088657 172.19.6.128:16381
- slots:[10923-16383] (5461 slots) master
- 1 additional replica(s)
- M: 30dd349f6405017a5063d25b9e1d61f39db4c3dc 172.19.6.128:16380
- slots:[5461-10922] (5462 slots) master
- 1 additional replica(s)
- S: b76af89d5b835c36201479c9284f2a4ad4b8f820 172.19.6.128:16382
- slots: (0 slots) slave
- replicates 7de702973b5d649d206d4ba48c772155f6088657
- [OK] All nodes agree about slots configuration.
- >>> Check for open slots...
- >>> Check slots coverage...
- [OK] All 16384 slots covered.
- How many slots do you want to move (from 1 to 16384)? 4096
- What is the receiving node ID? 3f081a67bbc0a1e7f9a0a0a27704cc5ee513fee6
- 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
-
- Ready to move 4096 slots.
- Source nodes:
- M: ff3488c654a8006784faa35b8a181a567ec2436a 172.19.6.128:16379
- slots:[0-5460] (5461 slots) master
- 1 additional replica(s)
- M: 7de702973b5d649d206d4ba48c772155f6088657 172.19.6.128:16381
- slots:[10923-16383] (5461 slots) master
- 1 additional replica(s)
- M: 30dd349f6405017a5063d25b9e1d61f39db4c3dc 172.19.6.128:16380
- slots:[5461-10922] (5462 slots) master
- 1 additional replica(s)
- Destination node:
- M: 3f081a67bbc0a1e7f9a0a0a27704cc5ee513fee6 172.19.6.128:16385
- slots: (0 slots) master
- Resharding plan:
- Moving slot 5461 from 30dd349f6405017a5063d25b9e1d61f39db4c3dc
- ...
- Moving slot 12287 from 7de702973b5d649d206d4ba48c772155f6088657
- Do you want to proceed with the proposed reshard plan (yes/no)? yes
- Moving slot 5461 from 172.19.6.128:16380 to 172.19.6.128:16385:
- .....
- Moving slot 5693 from 172.19.6.128:16380 to 172.19.6.128:16385:
-
- root@OrionEcsServer:/data#
5. 重新检查机器状态
redis-cli --pass admin123 --cluster check 你的ip:16379
这里可以发现 16385 已经重新分配了4096个slot
- root@OrionEcsServer:/data# redis-cli --pass admin123 --cluster check 172.19.6.128:16379
- Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
- 172.19.6.128:16379 (ff3488c6...) -> 0 keys | 4096 slots | 1 slaves.
- 172.19.6.128:16385 (3f081a67...) -> 0 keys | 4096 slots | 0 slaves.
- 172.19.6.128:16381 (7de70297...) -> 0 keys | 4096 slots | 1 slaves.
- 172.19.6.128:16380 (30dd349f...) -> 0 keys | 4096 slots | 1 slaves.
- [OK] 0 keys in 4 masters.
- 0.00 keys per slot on average.
- >>> Performing Cluster Check (using node 172.19.6.128:16379)
- M: ff3488c654a8006784faa35b8a181a567ec2436a 172.19.6.128:16379
- slots:[1365-5460] (4096 slots) master
- 1 additional replica(s)
- M: 3f081a67bbc0a1e7f9a0a0a27704cc5ee513fee6 172.19.6.128:16385
- slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master
- S: 001837d619d76cda8e0e537321032363970f5bc9 172.19.6.128:16383
- slots: (0 slots) slave
- replicates ff3488c654a8006784faa35b8a181a567ec2436a
- S: e02423adc0d998e84a7152e099a96402ea01c3e8 172.19.6.128:16384
- slots: (0 slots) slave
- replicates 30dd349f6405017a5063d25b9e1d61f39db4c3dc
- M: 7de702973b5d649d206d4ba48c772155f6088657 172.19.6.128:16381
- slots:[12288-16383] (4096 slots) master
- 1 additional replica(s)
- M: 30dd349f6405017a5063d25b9e1d61f39db4c3dc 172.19.6.128:16380
- slots:[6827-10922] (4096 slots) master
- 1 additional replica(s)
- S: b76af89d5b835c36201479c9284f2a4ad4b8f820 172.19.6.128:16382
- slots: (0 slots) slave
- replicates 7de702973b5d649d206d4ba48c772155f6088657
- [OK] All nodes agree about slots configuration.
- >>> Check for open slots...
- >>> Check slots coverage...
- [OK] All 16384 slots covered.
6. 给新的 master node 分配 slave
redis-cli --pass admin123 --cluster add-node 你的ip:16386 你的ip:16385 --cluster-slave --cluster-master-id 刚刚记录的masterId
- root@OrionEcsServer:/data# redis-cli --pass admin123 --cluster --cluster add-node 172.19.6.128:16386 172.19.6.128:16385 --cluster-slave --cluster-master-id 3f081a67bbc0a1e7f9a0a0a27704cc5ee513fee6
- Using a password with '-a' or '-u' option on the command line interface may not be safe..6.128:16385 --cluster-slave --cluster-master-id 3f081a67bbc0a1e7f9a0a0a27704cc5ee513fee6>>> Adding node 172.19.6.128:16386 to cluster 172.19.6.128:16385
- >>> Performing Cluster Check (using node 172.19.6.128:16385)
- M: 3f081a67bbc0a1e7f9a0a0a27704cc5ee513fee6 172.19.6.128:16385
- slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master
- S: 001837d619d76cda8e0e537321032363970f5bc9 172.19.6.128:16383
- slots: (0 slots) slave
- replicates ff3488c654a8006784faa35b8a181a567ec2436a
- S: e02423adc0d998e84a7152e099a96402ea01c3e8 172.19.6.128:16384
- slots: (0 slots) slave
- replicates 30dd349f6405017a5063d25b9e1d61f39db4c3dc
- M: ff3488c654a8006784faa35b8a181a567ec2436a 172.19.6.128:16379
- slots:[1365-5460] (4096 slots) master
- 1 additional replica(s)
- S: b76af89d5b835c36201479c9284f2a4ad4b8f820 172.19.6.128:16382
- slots: (0 slots) slave
- replicates 7de702973b5d649d206d4ba48c772155f6088657
- M: 7de702973b5d649d206d4ba48c772155f6088657 172.19.6.128:16381
- slots:[12288-16383] (4096 slots) master
- 1 additional replica(s)
- M: 30dd349f6405017a5063d25b9e1d61f39db4c3dc 172.19.6.128:16380
- slots:[6827-10922] (4096 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 172.19.6.128:16386 to make it join the cluster.
- Waiting for the cluster to join
-
- >>> Configure node as replica of 172.19.6.128:16385.
- [OK] New node added correctly.
7. 查看集群状态
redis-cli -p 16379 -c --pass admin123
cluster info
cluster nodes
这里可以发现 16386 已经挂载到 16395 下面了, 变成了4主4从
- root@OrionEcsServer:/data# redis-cli -p 16379 -c --pass admin123
- Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
- 127.0.0.1:16379> cluster info
- cluster_state:ok
- cluster_slots_assigned:16384
- cluster_slots_ok:16384
- cluster_slots_pfail:0
- cluster_slots_fail:0
- cluster_known_nodes:8
- cluster_size:4
- cluster_current_epoch:7
- cluster_my_epoch:1
- cluster_stats_messages_ping_sent:2016
- cluster_stats_messages_pong_sent:2026
- cluster_stats_messages_update_sent:3
- cluster_stats_messages_sent:4045
- cluster_stats_messages_ping_received:2020
- cluster_stats_messages_pong_received:2016
- cluster_stats_messages_meet_received:6
- cluster_stats_messages_received:4042
- 127.0.0.1:16379> cluster nodes
- ff3488c654a8006784faa35b8a181a567ec2436a 172.19.6.128:16379@26379 myself,master - 0 1670161348000 1 connected 1365-5460
- a2bd918b2e2072ab238bc1937710ea7ed05a7c03 172.19.6.128:16386@26386 slave 3f081a67bbc0a1e7f9a0a0a27704cc5ee513fee6 0 1670161350000 7 connected
- 3f081a67bbc0a1e7f9a0a0a27704cc5ee513fee6 172.19.6.128:16385@26385 master - 0 1670161350310 7 connected 0-1364 5461-6826 10923-12287
- 001837d619d76cda8e0e537321032363970f5bc9 172.19.6.128:16383@26383 slave ff3488c654a8006784faa35b8a181a567ec2436a 0 1670161345000 1 connected
- e02423adc0d998e84a7152e099a96402ea01c3e8 172.19.6.128:16384@26384 slave 30dd349f6405017a5063d25b9e1d61f39db4c3dc 0 1670161349000 2 connected
- 7de702973b5d649d206d4ba48c772155f6088657 172.19.6.128:16381@26381 master - 0 1670161351000 3 connected 12288-16383
- 30dd349f6405017a5063d25b9e1d61f39db4c3dc 172.19.6.128:16380@26380 master - 0 1670161349309 2 connected 6827-10922
- b76af89d5b835c36201479c9284f2a4ad4b8f820 172.19.6.128:16382@26382 slave 7de702973b5d649d206d4ba48c772155f6088657 0 1670161351312 3 connected
- 127.0.0.1:16379>
8. 测试
set a 1
set b 2
set c 3