Redis还是挺好玩的,今天测试了集群的添加、删除节点、重分配slot等。更深入的理解redis的游戏规则。步骤繁多,但是详细。

环境解释:

我是在一台Centos 6.9上测试的,各个redis节点以端口号区分。文中针对各个redis,我只是以端口号代表。

Master Node172.16.32.116:7000172.16.32.116:7001172.16.32.116:7002Slave Node172.16.32.116:8000172.16.32.116:8001172.16.32.116:8002用来折腾的Node172.16.32.116:9000172.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:7000172.16.32.116:7001172.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-5460273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 master - 0 1505321250759 2 connected 5461-1092288fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 master - 0 1505321251761 3 connected 10923-163833d27f60a1cc4d9c8f09aca928b03f0e083722d3b 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 273107e5ac994d675749be0979556e761274bb93Do 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-5460273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 master - 0 1505324910075 2 connected 5562-10922364ae8322ab2627e25b05d45b702448c74afad10 172.16.32.116:9000 myself,master - 0 0 7 connected 0-98 5461-5561 10923-110213d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slave 88fe075375295b59eabe69fa1438ed7c7c314f43 0 1505324908070 3 connected

aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 1505324911077 1 connected88fe075375295b59eabe69fa1438ed7c7c314f43 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 364ae8322ab2627e25b05d45b702448c74afad10Do 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-11021273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 master - 0 1505328939059 2 connected 5562-10922364ae8322ab2627e25b05d45b702448c74afad10 172.16.32.116:9000 myself,master - 0 0 7 connected3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slave 88fe075375295b59eabe69fa1438ed7c7c314f43 0 1505328936053 3 connected

aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 1505328933046 8 connected88fe075375295b59eabe69fa1438ed7c7c314f43 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-11021273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 master - 0 1505329561281 2 connected 5562-10922364ae8322ab2627e25b05d45b702448c74afad10 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 connected88fe075375295b59eabe69fa1438ed7c7c314f43 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 nodes88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 master - 0 1505329693835 3 connected 11022-16383273107e5ac994d675749be0979556e761274bb93 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-110213d27f60a1cc4d9c8f09aca928b03f0e083722d3b 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 nodes88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 master - 0 1505329898241 3 connected 11022-16383273107e5ac994d675749be0979556e761274bb93 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-110213d27f60a1cc4d9c8f09aca928b03f0e083722d3b 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-11021273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 master - 0 1505329903006 2 connected 5562-109223d27f60a1cc4d9c8f09aca928b03f0e083722d3b 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 connected364ae8322ab2627e25b05d45b702448c74afad10 172.16.32.116:9000 myself,slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 0 7 connected88fe075375295b59eabe69fa1438ed7c7c314f43 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-11021273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 master - 0 1505329542241 2 connected 5562-10922364ae8322ab2627e25b05d45b702448c74afad10 172.16.32.116:9000 myself,slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 0 7 connected3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slave 88fe075375295b59eabe69fa1438ed7c7c314f43 0 1505329541239 3 connected

aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 1505329545246 8 connected88fe075375295b59eabe69fa1438ed7c7c314f43 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.conf273107e5ac994d675749be0979556e761274bb93 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 connected3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slave 88fe075375295b59eabe69fa1438ed7c7c314f43 0 1505329686321 6 connected

a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slave 273107e5ac994d675749be0979556e761274bb93 0 1505329685318 5 connected88fe075375295b59eabe69fa1438ed7c7c314f43 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 nodes273107e5ac994d675749be0979556e761274bb93 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 connected3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 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 dbf78b73f2ab9e37cbf31abbc2beb3d5413d5516273107e5ac994d675749be0979556e761274bb93 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 connected3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 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 connected88fe075375295b59eabe69fa1438ed7c7c314f43 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等操作,都测试完了。

Redis Cluster 添加/删除 完整折腾步骤的更多相关文章

  1. redis cluster 添加 删除 重分配 节点

    redis cluster配置好,并运行一段时间后,我们想添加节点,或者删除节点,该怎么办呢.  一,redis cluster命令 //集群(cluster) CLUSTER INFO 打印集群的信 ...

  2. redis cluster 添加/删除节点操作

    RedisCluster 添加/删除节点 添加节点新配置两个测试节点8008和9009 [root@--- ~]# /usr/local/redis-/bin/redis-server /u02/re ...

  3. 向redis中添加删除list列表

    转: 向redis中添加删除list列表 2018年04月18日 15:44:54 luo_yu_1106 阅读数:4082   一.添加 向redis中添加队列有两种方式 1.lpush l是lef ...

  4. PyCharm自定义代码块设置方法-添加-删除【详细步骤】

    原文:https://blog.csdn.net/chichu261/article/details/82887108 在做项目的时候,有些代码会需要频繁的码.如果去已有的项目中去复制,又需要找很久. ...

  5. Redis(十)集群:Redis Cluster

    一.数据分布 1.数据分布理论 2.Redis数据分区 Redis Cluser采用虚拟槽分区,所有的键根据哈希函数映射到0~16383整数槽内,计算公式:slot=CRC16(key)&16 ...

  6. Redis Cluster 集群节点维护 (三)

    Redis Cluster 集群节点维护: 集群运行很久之后,难免由于硬件故障,网络规划,业务增长,等原因对已有集群进行相应的调整,比如增加redis nodes 节点,减少节点,节点迁移,更换服务器 ...

  7. redis cluster中添加删除重分配节点例子

    redis cluster配置好,并运行一段时间后,我们想添加节点,或者删除节点,该怎么办呢. 一,redis cluster命令行     //集群(cluster)  CLUSTER INFO 打 ...

  8. centos8平台redis cluster集群添加/删除node节点(redis5.0.7)

    一,当前redis cluster的node情况: 我们的添加删除等操作都是以这个cluster作为demo cluster采用六台redis,3主3从 redis1 : ip: 172.17.0.2 ...

  9. ORACLE 11gR2 RAC添加删除(正常及强制)节点操作步骤(删除篇)

    ORACLE 11gR2 RAC添加删除(正常及强制)节点操作步骤(删除篇) 本文主要转载 [  http://www.cnxdug.org/?p=2511 ] 有部分细节自己实验添加,再此谢谢前辈. ...

随机推荐

  1. js之DOM

    DOM对象 什么是HTML  DOM HTML  Document Object Model(文档对象模型) HTML DOM 定义了访问和操作HTML文档的标准方法 HTML DOM 把 HTML ...

  2. hbase启动后子节点的regionserver不能启动

    启动hbase后,主节点的进程正常,但是子节点的regionserver进程会自动挂掉 然后我们看看子节点的情况 可以看到挂掉了 我们这样解决问题,先把hadoop目录下的这个两个文件放到hbase的 ...

  3. RecyclerView实现ViewPager效果;

    看代码就好了,RecyclerView实现Viewpager的效果,添加了界面的改变监听,用法和普通的RecyclerView一样,还可以设置一次滑动多个界面: public class VpRecy ...

  4. solr学习之域的管理与中文分析器配置

    该文使用  Centos6.5 64 位    solr4.10.3   IK-Analyzer中文分析器 一.solr域 在solr中域的概念与lucene中域的概念相同,数据库的一条记录或者一个文 ...

  5. Docker 核心技术与实现原理

    提到虚拟化技术,我们首先想到的一定是 Docker,经过四年的快速发展 Docker 已经成为了很多公司的标配,也不再是一个只能在开发阶段使用的玩具了.作为在生产环境中广泛应用的产品,Docker 有 ...

  6. SOA, EDA, 和 ESB

    SOA----面向服务架构,实际上强调的是软件的一种架构,一种支撑软件运行的相对稳定的结构,表面含义如此,其实SOA是一种通过服务整合来解决系统集成的一种思想.不是具体的技术,本质上是一种策略.思想. ...

  7. [java,2017-12-01] 播放音频文件

    废话不多说,直接上代码 jar包 <!-- 2017-12-01音频播放jar包 --> <dependency> <groupId>javazoom</gr ...

  8. java中的Map

    Java8增强的Map集合 Map接口中定义了如下常用的方法. void clear():删除该Map对象中的所有key-value对. boolean containsKey(Object key) ...

  9. 36.scrapy框架采集全球玻璃网数据

    1.采集目标地址 https://www.glass.cn/gongying/sellindex.aspx 网站比较简单,没什么大的需要注意的问题.2.通过分析测试 https://www.glass ...

  10. Linux实用命令整理

    说明 点击标题可进入详细讲解的章节 0. 基本命令 linux 基本命令整理 1. 压缩 解压 tar -zcvf a.tar.gz a #把a压缩成a.tar.gz tar -zxvf a.tar. ...