前言

最近学习了Redis,发现Redis还是挺好玩的,今天测试了集群的添加、删除节点、重分配slot等。更深入的理解redis的游戏规则。步骤繁多,但是详细,话不多说了,来一起看看详细的介绍吧。
环境解释:
我是在一台Centos 6.9上测试的,各个redis节点以端口号区分。文中针对各个redis,我只是以端口号代表。
~~~~Master Node~~~~~ 172.16.32.116:7000 172.16.32.116:7001 172.16.32.116:7002 ~~~~Slave Node~~~~~ 172.16.32.116:8000 172.16.32.116:8001 172.16.32.116:8002 ~~~~用来折腾的Node~~~~~ 172.16.32.116:9000 172.16.32.116:9001
1. 创建redis集群
注:更多redis集群创建,请参阅
Redis Cluster集群部署搭建
# ./redis-trib.rb create --replicas 1 172.16.32.116:7000 172.16.32.116:7001 172.16.32.116:7002 172.16.32.116:8000 172.16.32.116:8001 172.16.32.116:8002 >>> Creating cluster >>> Performing hash slots allocation on 6 nodes... Using 3 masters: 172.16.32.116:7000 172.16.32.116:7001 172.16.32.116:7002 Adding replica 172.16.32.116:8000 to 172.16.32.116:7000 Adding replica 172.16.32.116:8001 to 172.16.32.116:7001 Adding replica 172.16.32.116:8002 to 172.16.32.116:7002 M: a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 slots:0-5460 (5461 slots) master M: 273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 slots:5461-10922 (5462 slots) master M: 88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 slots:10923-16383 (5461 slots) master S: aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 replicates a0b91f48e933c1f1d427c54917ce970bd25d29f8 S: a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 replicates 273107e5ac994d675749be0979556e761274bb93 S: 3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 replicates 88fe075375295b59eabe69fa1438ed7c7c314f43 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 172.16.32.116:7000) M: a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 slots:0-5460 (5461 slots) master M: 273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 slots:5461-10922 (5462 slots) master M: 88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 slots:10923-16383 (5461 slots) master M: aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slots: (0 slots) master replicates a0b91f48e933c1f1d427c54917ce970bd25d29f8 M: a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slots: (0 slots) master replicates 273107e5ac994d675749be0979556e761274bb93 M: 3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slots: (0 slots) master replicates 88fe075375295b59eabe69fa1438ed7c7c314f43 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.
2. 检查集群状态
# ./redis-trib.rb check 172.16.32.116:7000 >>> Performing Cluster Check (using node 172.16.32.116:7000) M: a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 slots:0-5460 (5461 slots) master 1 additional replica(s) M: 88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 slots:10923-16383 (5461 slots) master 1 additional replica(s) M: 273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 slots:5461-10922 (5462 slots) master 1 additional replica(s) S: 3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slots: (0 slots) slave replicates 88fe075375295b59eabe69fa1438ed7c7c314f43 S: a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slots: (0 slots) slave replicates 273107e5ac994d675749be0979556e761274bb93 S: aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slots: (0 slots) slave replicates a0b91f48e933c1f1d427c54917ce970bd25d29f8 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.
~~~~~~~~~~~~~~~~~~~~~~~~~~~添加节点~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3. 添加新节点redis-trib.rb add-node 新增节点名 原集群节点名
# ./redis-trib.rb add-node 172.16.32.116:9000 172.16.32.116:7000 >>> Adding node 172.16.32.116:9000 to cluster 172.16.32.116:7000 >>> Performing Cluster Check (using node 172.16.32.116:7000) M: a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 slots:0-5460 (5461 slots) master 1 additional replica(s) M: 88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 slots:10923-16383 (5461 slots) master 1 additional replica(s) M: 273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 slots:5461-10922 (5462 slots) master 1 additional replica(s) S: 3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slots: (0 slots) slave replicates 88fe075375295b59eabe69fa1438ed7c7c314f43 S: a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slots: (0 slots) slave replicates 273107e5ac994d675749be0979556e761274bb93 S: aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slots: (0 slots) slave replicates a0b91f48e933c1f1d427c54917ce970bd25d29f8 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage...
4. 查看当前集群状态,9000是一个空的Master
# ./redis-cli -p 9000 cluster nodes a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 master - 0 1505321254767 1 connected 0-5460 273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 master - 0 1505321250759 2 connected 5461-10922 88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 master - 0 1505321251761 3 connected 10923-16383 3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slave 88fe075375295b59eabe69fa1438ed7c7c314f43 0 1505321255769 3 connected aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 1505321253765 1 connected a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slave 273107e5ac994d675749be0979556e761274bb93 0 1505321256771 2 connected
5. 为9000分配slot, redis的solt是固定的,就16384个,只能从其他节点获取slot,然后分配到9000
# ./redis-trib.rb reshard 172.16.32.116:9000 >>> Performing Cluster Check (using node 172.16.32.116:9000) M: 364ae8322ab2627e25b05d45b702448c74afad10 172.16.32.116:9000 slots: (0 slots) master 0 additional replica(s) M: a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 slots:0-5460 (5461 slots) master 1 additional replica(s) M: 273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 slots:5461-10922 (5462 slots) master 1 additional replica(s) S: 3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slots: (0 slots) slave replicates 88fe075375295b59eabe69fa1438ed7c7c314f43 S: aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slots: (0 slots) slave replicates a0b91f48e933c1f1d427c54917ce970bd25d29f8 M: 88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 slots:10923-16383 (5461 slots) master 1 additional replica(s) S: a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slots: (0 slots) slave replicates 273107e5ac994d675749be0979556e761274bb93 [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)? What is the receiving node ID? 364ae8322ab2627e25b05d45b702448c74afad10 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 300 slots. Source nodes: M: a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 slots:0-5460 (5461 slots) master 1 additional replica(s) M: 273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 slots:5461-10922 (5462 slots) master 1 additional replica(s) M: 88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 slots:10923-16383 (5461 slots) master 1 additional replica(s) Destination node: M: 364ae8322ab2627e25b05d45b702448c74afad10 172.16.32.116:9000 slots: (0 slots) master 0 additional replica(s) Resharding plan: Moving slot 5461 from 273107e5ac994d675749be0979556e761274bb93 Moving slot 5469 from 273107e5ac994d675749be0979556e761274bb93 Do you want to proceed with the proposed reshard plan (yes/no)? yes Moving slot 5461 from 172.16.32.116:7001 to 172.16.32.116:9000:
6. 可以看到,9000已经分配到的slot是0-98 5461-5561 10923-11021
# ./redis-cli -p 9000 cluster nodes a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 master - 0 1505324905062 1 connected 99-5460 273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 master - 0 1505324910075 2 connected 5562-10922 364ae8322ab2627e25b05d45b702448c74afad10 172.16.32.116:9000 myself,master - 0 0 7 connected 0-98 5461-5561 10923-11021 3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slave 88fe075375295b59eabe69fa1438ed7c7c314f43 0 1505324908070 3 connected aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 1505324911077 1 connected 88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 master - 0 1505324902057 3 connected 11022-16383 a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slave 273107e5ac994d675749be0979556e761274bb93 0 1505324909073 2 connected
~~~~~~~~~~~~~~~~~~~~~~~~~~~将9000变为slave~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7. 希望将9000变成7000的slave,但是由于有slot,执行失败,需要先转移slot
# redis-cli -c -p 9000 cluster replicate a0b91f48e933c1f1d427c54917ce970bd25d29f8 (error) ERR To set a master the node must be empty and without assigned slots.
8. 删除节点也是不可以的,总之,只要上面有slot。redis是不会让你删除的,而且需要人工介入,rebalance这些slot之后才行
# ./redis-trib.rb del-node 172.16.32.116:9000 364ae8322ab2627e25b05d45b702448c74afad10 >>> Removing node 364ae8322ab2627e25b05d45b702448c74afad10 from cluster 172.16.32.116:9000 [ERR] Node 172.16.32.116:9000 is not empty! Reshard data away and try again.
9.重新分配9000的slot到7000上
# ./redis-trib.rb reshard 172.16.32.116:9000 <<<<<<重新分配slot >>> Performing Cluster Check (using node 172.16.32.116:9000) M: 364ae8322ab2627e25b05d45b702448c74afad10 172.16.32.116:9000 slots:0-98,5461-5561,10923-11021 (299 slots) master 0 additional replica(s) M: a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 slots:99-5460 (5362 slots) master 1 additional replica(s) M: 273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 slots:5562-10922 (5361 slots) master 1 additional replica(s) S: 3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slots: (0 slots) slave replicates 88fe075375295b59eabe69fa1438ed7c7c314f43 S: aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slots: (0 slots) slave replicates a0b91f48e933c1f1d427c54917ce970bd25d29f8 M: 88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 slots:11022-16383 (5362 slots) master 1 additional replica(s) S: a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slots: (0 slots) slave replicates 273107e5ac994d675749be0979556e761274bb93 [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)? 300 <<<9000节点全部需要迁移的节点 What is the receiving node ID? a0b91f48e933c1f1d427c54917ce970bd25d29f8 <<<<<<7000的ID 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:364ae8322ab2627e25b05d45b702448c74afad10 <<<<<<9000的ID Source node #2:done Ready to move 300 slots. Source nodes: M: 364ae8322ab2627e25b05d45b702448c74afad10 172.16.32.116:9000 <<<<<<Source nodes slots:0-98,5461-5561,10923-11021 (299 slots) master 0 additional replica(s) Destination node: M: a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 <<<<<<<Destination node slots:99-5460 (5362 slots) master 1 additional replica(s) Resharding plan: Moving slot 0 from 364ae8322ab2627e25b05d45b702448c74afad10 ......... Moving slot 11021 from 364ae8322ab2627e25b05d45b702448c74afad10 Do you want to proceed with the proposed reshard plan (yes/no)? yes Moving slot 0 from 172.16.32.116:9000 to 172.16.32.116:7000: Moving slot 1 from 172.16.32.116:9000 to 172.16.32.116:7000: ........
10. 查询,可以看到9000已经没有slot了
# ./redis-cli -p 9000 cluster nodes a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 master - 0 1505328938056 8 connected 0-5561 10923-11021 273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 master - 0 1505328939059 2 connected 5562-10922 364ae8322ab2627e25b05d45b702448c74afad10 172.16.32.116:9000 myself,master - 0 0 7 connected 3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slave 88fe075375295b59eabe69fa1438ed7c7c314f43 0 1505328936053 3 connected aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 1505328933046 8 connected 88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 master - 0 1505328937054 3 connected 11022-16383 a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slave 273107e5ac994d675749be0979556e761274bb93 0 1505328934049 2 connected
11. 再次执行命令,将9000变成7000的slave,成功
# redis-cli -c -p 9000 cluster replicate a0b91f48e933c1f1d427c54917ce970bd25d29f8 OK
12. 查看状态,9000已经成为7000的slave
# ./redis-cli -p 9000 cluster nodes a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 master - 0 1505329564286 8 connected 0-5561 10923-11021 273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 master - 0 1505329561281 2 connected 5562-10922 364ae8322ab2627e25b05d45b702448c74afad10 172.16.32.116:9000 myself,slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 0 7 connected <<<<<<<<<<<<<< 3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slave 88fe075375295b59eabe69fa1438ed7c7c314f43 0 1505329558274 3 connected aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 1505329554266 8 connected 88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 master - 0 1505329563285 3 connected 11022-16383 a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slave 273107e5ac994d675749be0979556e761274bb93 0 1505329562283 2 connected
13. 删除节点9000,成功删除
# ./redis-trib.rb del-node 172.16.32.116:9000 364ae8322ab2627e25b05d45b702448c74afad10 >>> Removing node 364ae8322ab2627e25b05d45b702448c74afad10 from cluster 172.16.32.116:9000 >>> Sending CLUSTER FORGET messages to the cluster... >>> SHUTDOWN the node.
14. 连接9000,发现已经shutdown,无法连接
# ./redis-cli -p 9000 cluster nodes Could not connect to Redis at 127.0.0.1:9000: Connection refused Could not connect to Redis at 127.0.0.1:9000: Connection refused
15. 查看集群状态,9000已经不见了
# ./redis-cli -p 7000 cluster nodes 88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 master - 0 1505329693835 3 connected 11022-16383 273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 master - 0 1505329694837 2 connected 5562-10922 a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 myself,master - 0 0 8 connected 0-5561 10923-11021 3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slave 88fe075375295b59eabe69fa1438ed7c7c314f43 0 1505329696841 6 connected a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slave 273107e5ac994d675749be0979556e761274bb93 0 1505329695840 5 connected aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 1505329692833 8 connected
~~~~~~~~~~~~~~~~~~~~~~~~~~~再次启动9000,发现不同~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
16. 再次启动9000,发现一个有意思的事情。上面检查7000,集群已经没有9000了
# ./redis-cli -p 7000 cluster nodes 88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 master - 0 1505329898241 3 connected 11022-16383 273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 master - 0 1505329899242 2 connected 5562-10922 a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 myself,master - 0 0 8 connected 0-5561 10923-11021 3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slave 88fe075375295b59eabe69fa1438ed7c7c314f43 0 1505329902249 6 connected a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slave 273107e5ac994d675749be0979556e761274bb93 0 1505329901246 5 connected aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 1505329900244 8 connected
17. 但是查看9000,确仍然能看到整个集群的信息。
说明,在删除节点的过程,只是在原有集群中删除9000的信息。但是9000自身的信息并没有被删除,依然保留全部的信息,只是9000实例被关闭而已。
# ./redis-cli -p 9000 cluster nodes a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 master - 0 1505329902003 8 connected 0-5561 10923-11021 273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 master - 0 1505329903006 2 connected 5562-10922 3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slave 88fe075375295b59eabe69fa1438ed7c7c314f43 0 1505329906013 3 connected a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slave 273107e5ac994d675749be0979556e761274bb93 0 1505329908019 2 connected aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 1505329904008 8 connected 364ae8322ab2627e25b05d45b702448c74afad10 172.16.32.116:9000 myself,slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 0 7 connected 88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 master - 0 1505329907016 3 connected 11022-16383
18. 而9000的全部信息,是记录在自身目录的nodes.conf中
# more nodes.conf a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 master - 0 1505329544244 8 connected 0-5561 10923-11021 273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 master - 0 1505329542241 2 connected 5562-10922 364ae8322ab2627e25b05d45b702448c74afad10 172.16.32.116:9000 myself,slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 0 7 connected 3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slave 88fe075375295b59eabe69fa1438ed7c7c314f43 0 1505329541239 3 connected aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 1505329545246 8 connected 88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 master - 0 1505329543242 3 connected 11022-16383 a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slave 273107e5ac994d675749be0979556e761274bb93 0 1505329546248 2 connected vars currentEpoch 8 lastVoteEpoch 0
19. 到7001等其他节点中查看,nodes.conf已经没有9000的信息
# more nodes.conf 273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 myself,master - 0 0 2 connected 5562-10922 a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 master - 0 1505329680312 8 connected 0-5561 10923-11021 aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 1505329684319 8 connected 3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slave 88fe075375295b59eabe69fa1438ed7c7c314f43 0 1505329686321 6 connected a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slave 273107e5ac994d675749be0979556e761274bb93 0 1505329685318 5 connected 88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 master - 0 1505329683317 3 connected 11022-16383 vars currentEpoch 8 lastVoteEpoch 0
~~~~~~~~~~~~~~~~~~~~~~~~~~~再次添加9000,以及9001~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
20. 将9000和9001再次加入集群,开始下面的折腾。
注意:需要将9000和9001下的redis.conf外的文件清除,重启。然后才能再次加入集群。不然会遇到错误:
[ERR] Node 172.16.32.116:9001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
21. 加入集群
./redis-trib.rb add-node 172.16.32.116:9000 172.16.32.116:7002 ./redis-trib.rb add-node 172.16.32.116:9001 172.16.32.116:7002
22. 现在是两个空的Master节点
# ./redis-trib.rb check 172.16.32.116:9001 >>> Performing Cluster Check (using node 172.16.32.116:9001) M: c4ba7a1f537ac66076791461d6af9012741fee74 172.16.32.116:9001 slots: (0 slots) master 0 additional replica(s) M: dbf78b73f2ab9e37cbf31abbc2beb3d5413d5516 172.16.32.116:9000 slots: (0 slots) master 0 additional replica(s) [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.
23. 重分配100个slot到9000上,其实redis很聪明的,我连接的是9001,但是在分配的时候,它会问你,receiving node是谁,Source node 是谁。
# ./redis-trib.rb reshard 172.16.32.116:9001 >>> Performing Cluster Check (using node 172.16.32.116:9001) ...... [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)? 100 What is the receiving node ID? dbf78b73f2ab9e37cbf31abbc2beb3d5413d5516 <<<<<<<<<receiving node ID 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:aeb684429d220c0fd1392574d193cc1ae7577782 <<<<<<<Source node我选的是 8000 *** The specified node is not known or is not a master, please retry. <<<<<<<然而,并没能欺骗redis,它发现了,这个是slave,没有slot可以提供的。 Source node #1:273107e5ac994d675749be0979556e761274bb93 <<<<<<<<Source node再次指定为7001,开始分配了 Source node #2:done Ready to move 100 slots. Source nodes: M: 273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 slots:5562-10922 (5361 slots) master 1 additional replica(s) Destination node: M: dbf78b73f2ab9e37cbf31abbc2beb3d5413d5516 172.16.32.116:9000 slots: (0 slots) master 0 additional replica(s) Resharding plan: Moving slot 5562 from 273107e5ac994d675749be0979556e761274bb93 Moving slot 5563 from 273107e5ac994d675749be0979556e761274bb93
24. 查看分配情况,redis还是很聪明灵活的。
# redis-cli -p 7001 cluster nodes 273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 myself,master - 0 0 2 connected 5662-10922 a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 master - 0 1505330856605 8 connected 0-5561 10923-11021 aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 1505330853598 8 connected 3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slave 88fe075375295b59eabe69fa1438ed7c7c314f43 0 1505330860611 6 connected a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slave 273107e5ac994d675749be0979556e761274bb93 0 1505330859608 5 connected c4ba7a1f537ac66076791461d6af9012741fee74 172.16.32.116:9001 master - 0 1505330862615 9 connected <<<<<<<<<<<<<<<<<<<<<依然是空的 88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 master - 0 1505330861612 3 connected 11022-16383 dbf78b73f2ab9e37cbf31abbc2beb3d5413d5516 172.16.32.116:9000 master - 0 1505330858607 10 connected 5562-5661 <<<<<<<<<<<<<<<<<<<<<从7001要来100个slot
25. 将9001添加为9000的slave节点 redis-cli -p <slave IP:port> cluster nodes <Master ID 号>
# redis-cli -p 9001 cluster nodes dbf78b73f2ab9e37cbf31abbc2beb3d5413d5516 273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 myself,master - 0 0 2 connected 5662-10922 a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 master - 0 1505331457798 8 connected 0-5561 10923-11021 aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 1505331454791 8 connected 3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slave 88fe075375295b59eabe69fa1438ed7c7c314f43 0 1505331456795 6 connected a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slave 273107e5ac994d675749be0979556e761274bb93 0 1505331458799 10 connected c4ba7a1f537ac66076791461d6af9012741fee74 172.16.32.116:9001 slave dbf78b73f2ab9e37cbf31abbc2beb3d5413d5516 0 1505331459801 10 connected 88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 master - 0 1505331455793 3 connected 11022-16383 dbf78b73f2ab9e37cbf31abbc2beb3d5413d5516 172.16.32.116:9000 master - 0 1505331453788 10 connected 5562-5661
经过各种折腾,redis添加,删除,重分配slot等操作,都测试完了。
中间有很多命令输出部门,视乎有点重复。但是为了更好的阅读理解,观察每一步操作的变化。后面查阅也更容易一些。
毕竟,年纪大了,记性不好。好多自己写过的blog,回头翻阅的时候,发现某些步骤,不是很好理解了。虽然我的blog,都是基于自己测试的结果,但是依然会忘记。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# redis
# cluster
# 命令
# 原理
# 详解SpringBoot Redis自适应配置(Cluster Standalone Sentine
# Redis Cluster集群数据分片机制原理
# docker redis5.0 cluster集群搭建的实现
# 使用Ruby脚本部署Redis Cluster集群步骤讲解
# php成功操作redis cluster集群的实例教程
# Redis cluster集群的介绍
# Windows环境下Redis Cluster环境搭建(图文)
# 如何用docker部署redis cluster的方法
# spring集成redis cluster详解
# 解析Redis Cluster原理
# 的是
# 可以看到
# 很聪明
# 都是
# 端口号
# 是一个
# 我是
# 很好
# 让你
# 有很多
# 说了
# 我只
# 不可以
# 不多
# 已经成为
# 大了
# 不见了
# 没能
# 这篇文章
# 问你
相关文章:
建站之星2.7模板快速切换与批量管理功能操作指南
魔毅自助建站系统:模板定制与SEO优化一键生成指南
网站网页制作专业公司,怎样制作自己的网页?
上海网站制作开发公司,上海买房比较好的网站有哪些?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
如何通过虚拟主机快速搭建个人网站?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
Android自定义控件实现温度旋转按钮效果
网站制作的方法有哪些,如何将自己制作的网站发布到网上?
宝塔建站后网页无法访问如何解决?
常州企业建站如何选择最佳模板?
早安海报制作网站推荐大全,企业早安海报怎么每天更换?
建站之星24小时客服电话如何获取?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
c# await 一个已经完成的Task会发生什么
c++ stringstream用法详解_c++字符串与数字转换利器
如何选择高效可靠的多用户建站源码资源?
北京建设网站制作公司,北京古代建筑博物馆预约官网?
如何确保西部建站助手FTP传输的安全性?
如何通过VPS建站无需域名直接访问?
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?
制作销售网站教学视频,销售网站有哪些?
如何用y主机助手快速搭建网站?
购物网站制作公司有哪些,哪个购物网站比较好?
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
免费ppt制作网站,有没有值得推荐的免费PPT网站?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
网站插件制作软件免费下载,网页视频怎么下到本地插件?
制作网站的软件免费下载,免费制作app哪个平台好?
如何用PHP快速搭建CMS系统?
如何用低价快速搭建高质量网站?
如何快速查询域名建站关键信息?
北京网站制作网页,网站升级改版需要多久?
如何快速配置高效服务器建站软件?
名字制作网站免费,所有小说网站的名字?
如何在Golang中引入测试模块_Golang测试包导入与使用实践
,购物网站怎么盈利呢?
北京网站制作公司哪家好一点,北京租房网站有哪些?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
外贸公司网站制作哪家好,maersk船公司官网?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
Python文件管理规范_工程实践说明【指导】
,网页ppt怎么弄成自己的ppt?
建站VPS选购需注意哪些关键参数?
,sp开头的版面叫什么?
如何高效完成自助建站业务培训?
安徽网站建设与外贸建站服务专业定制方案
建站主机服务器选购指南:轻量应用与VPS配置解析
*请认真填写需求信息,我们会在24小时内与您取得联系。