Redis还是挺好玩的,今天测试了集群的添加、删除节点、重分配slot等。更深入的理解redis的游戏规则。步骤繁多,但是详细。
环境解释:
我是在一台Centos 6.9上测试的,各个redis节点以端口号区分。文中针对各个redis,我只是以端口号代表。
1
2
3
4
5
6
7
8
9
10
11
<code>~~~~Master Node~~~~~</code>
<code>172.16.32.116:7000</code>
<code>172.16.32.116:7001</code>
<code>172.16.32.116:7002</code>
<code>~~~~Slave Node~~~~~</code>
<code>172.16.32.116:8000</code>
<code>172.16.32.116:8001</code>
<code>172.16.32.116:8002</code>
<code>~~~~用来折腾的Node~~~~~</code>
<code>172.16.32.116:9000</code>
<code>172.16.32.116:9001</code>
1. 创建redis集群
注:更多redis集群创建,请参阅
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<code># ./redis-trib.rb </code><code>create</code> <code>--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</code>
<code>>>> Creating cluster</code>
<code>>>> Performing hash slots allocation </code><code>on</code> <code>6 nodes...</code>
<code>Using 3 masters:</code>
<code>Adding replica 172.16.32.116:8000 </code><code>to</code> <code>172.16.32.116:7000</code>
<code>Adding replica 172.16.32.116:8001 </code><code>to</code> <code>172.16.32.116:7001</code>
<code>Adding replica 172.16.32.116:8002 </code><code>to</code> <code>172.16.32.116:7002</code>
<code>M: a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000</code>
<code> </code><code>slots:0-5460 (5461 slots) master</code>
<code>M: 273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001</code>
<code> </code><code>slots:5461-10922 (5462 slots) master</code>
<code>M: 88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002</code>
<code> </code><code>slots:10923-16383 (5461 slots) master</code>
<code>S: aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000</code>
<code> </code><code>replicates a0b91f48e933c1f1d427c54917ce970bd25d29f8</code>
<code>S: a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001</code>
<code> </code><code>replicates 273107e5ac994d675749be0979556e761274bb93</code>
<code>S: 3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002</code>
<code> </code><code>replicates 88fe075375295b59eabe69fa1438ed7c7c314f43</code>
<code>Can I </code><code>set</code> <code>the above configuration? (type </code><code>'yes'</code> <code>to</code> <code>accept): yes</code>
<code>>>> Nodes configuration updated</code>
<code>>>> Assign a different config epoch </code><code>to</code> <code>each node</code>
<code>>>> Sending CLUSTER MEET messages </code><code>to</code> <code>join</code> <code>the cluster</code>
<code>Waiting </code><code>for</code> <code>the cluster </code><code>to</code> <code>join</code><code>...</code>
<code>>>> Performing Cluster </code><code>Check</code> <code>(using node 172.16.32.116:7000)</code>
<code>M: aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000</code>
<code> </code><code>slots: (0 slots) master</code>
<code>M: a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001</code>
<code>M: 3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002</code>
<code>[OK] </code><code>All</code> <code>nodes agree about slots configuration.</code>
<code>>>> </code><code>Check</code> <code>for</code> <code>open</code> <code>slots...</code>
<code>>>> </code><code>Check</code> <code>slots coverage...</code>
<code>[OK] </code><code>All</code> <code>16384 slots covered.</code>
2. 检查集群状态
<code># ./redis-trib.rb </code><code>check</code> <code>172.16.32.116:7000</code>
<code> </code><code>1 additional replica(s)</code>
<code> </code><code>slots: (0 slots) slave</code>
~~~~~~~~~~~~~~~~~~~~~~~~~~~添加节点~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3. 添加新节点redis-trib.rb add-node 新增节点名 原集群节点名
<code># ./redis-trib.rb </code><code>add</code><code>-node 172.16.32.116:9000 172.16.32.116:7000</code>
<code>>>> Adding node 172.16.32.116:9000 </code><code>to</code> <code>cluster 172.16.32.116:7000</code>
4. 查看当前集群状态,9000是一个空的Master
<code># ./redis-cli -p 9000 cluster nodes</code>
<code>a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 master - 0 1505321254767 1 connected 0-5460</code>
<code>273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 master - 0 1505321250759 2 connected 5461-10922</code>
<code>88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 master - 0 1505321251761 3 connected 10923-16383</code>
<code>3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slave 88fe075375295b59eabe69fa1438ed7c7c314f43 0 1505321255769 3 connected</code>
<code>aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 1505321253765 1 connected</code>
<code>a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slave 273107e5ac994d675749be0979556e761274bb93 0 1505321256771 2 connected</code>
5. 为9000分配slot, redis的solt是固定的,就16384个,只能从其他节点获取slot,然后分配到9000
48
49
50
51
52
<code># ./redis-trib.rb reshard 172.16.32.116:9000</code>
<code>>>> Performing Cluster </code><code>Check</code> <code>(using node 172.16.32.116:9000)</code>
<code>M: 364ae8322ab2627e25b05d45b702448c74afad10 172.16.32.116:9000</code>
<code> </code><code>0 additional replica(s)</code>
<code>How many slots do you want </code><code>to</code> <code>move</code> <code>(</code><code>from</code> <code>1 </code><code>to</code> <code>16384)? </code>
<code>What </code><code>is</code> <code>the receiving node ID? 364ae8322ab2627e25b05d45b702448c74afad10 Please enter </code><code>all</code> <code>the source node IDs.</code>
<code> </code><code>Type </code><code>'all'</code> <code>to</code> <code>use </code><code>all</code> <code>the nodes </code><code>as</code> <code>source nodes </code><code>for</code> <code>the hash slots.</code>
<code> </code><code>Type </code><code>'done'</code> <code>once you entered </code><code>all</code> <code>the source nodes IDs.</code>
<code>Source node #1:</code><code>all</code>
<code>Ready </code><code>to</code> <code>move</code> <code>300 slots.</code>
<code> </code><code>Source nodes:</code>
<code> </code><code>M: a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000</code>
<code> </code><code>M: 273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001</code>
<code> </code><code>M: 88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002</code>
<code> </code><code>Destination node:</code>
<code> </code><code>M: 364ae8322ab2627e25b05d45b702448c74afad10 172.16.32.116:9000</code>
<code> </code><code>Resharding plan:</code>
<code> </code><code>Moving slot 5461 </code><code>from</code> <code>273107e5ac994d675749be0979556e761274bb93</code>
<code> </code><code>Moving slot 5469 </code><code>from</code> <code>273107e5ac994d675749be0979556e761274bb93</code>
<code>Do you want </code><code>to</code> <code>proceed </code><code>with</code> <code>the proposed reshard plan (yes/</code><code>no</code><code>)? yes</code>
<code>Moving slot 5461 </code><code>from</code> <code>172.16.32.116:7001 </code><code>to</code> <code>172.16.32.116:9000:</code>
6. 可以看到,9000已经分配到的slot是0-98 5461-5561 10923-11021
<code>a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 master - 0 1505324905062 1 connected 99-5460</code>
<code>273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 master - 0 1505324910075 2 connected 5562-10922</code>
<code>364ae8322ab2627e25b05d45b702448c74afad10 172.16.32.116:9000 myself,master - 0 0 7 connected 0-98 5461-5561 10923-11021</code>
<code>3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slave 88fe075375295b59eabe69fa1438ed7c7c314f43 0 1505324908070 3 connected</code>
<code>aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 1505324911077 1 connected</code>
<code>88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 master - 0 1505324902057 3 connected 11022-16383</code>
<code>a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slave 273107e5ac994d675749be0979556e761274bb93 0 1505324909073 2 connected</code>
~~~~~~~~~~~~~~~~~~~~~~~~~~~将9000变为slave~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7. 希望将9000变成7000的slave,但是由于有slot,执行失败,需要先转移slot
<code># redis-cli -c -p 9000 cluster replicate a0b91f48e933c1f1d427c54917ce970bd25d29f8</code>
<code>(error) ERR </code><code>To</code> <code>set</code> <code>a master the node must be empty </code><code>and</code> <code>without assigned slots.</code>
8. 删除节点也是不可以的,总之,只要上面有slot。redis是不会让你删除的,而且需要人工介入,rebalance这些slot之后才行
<code># ./redis-trib.rb del-node 172.16.32.116:9000 364ae8322ab2627e25b05d45b702448c74afad10</code>
<code>>>> Removing node 364ae8322ab2627e25b05d45b702448c74afad10 </code><code>from</code> <code>cluster 172.16.32.116:9000</code>
<code>[ERR] Node 172.16.32.116:9000 </code><code>is</code> <code>not</code> <code>empty! Reshard data away </code><code>and</code> <code>try again.</code>
9.重新分配9000的slot到7000上
<code># ./redis-trib.rb reshard 172.16.32.116:9000 <<<<<<重新分配slot</code>
<code> </code><code>slots:0-98,5461-5561,10923-11021 (299 slots) master</code>
<code> </code><code>slots:99-5460 (5362 slots) master</code>
<code> </code><code>slots:5562-10922 (5361 slots) master</code>
<code> </code><code>slots:11022-16383 (5362 slots) master</code>
<code>How many slots do you want </code><code>to</code> <code>move</code> <code>(</code><code>from</code> <code>1 </code><code>to</code> <code>16384)? 300 <<<9000节点全部需要迁移的节点</code>
<code>What </code><code>is</code> <code>the receiving node ID? a0b91f48e933c1f1d427c54917ce970bd25d29f8 <<<<<<7000的ID</code>
<code>Please enter </code><code>all</code> <code>the source node IDs.</code>
<code>Source node #1:364ae8322ab2627e25b05d45b702448c74afad10 <<<<<<9000的ID</code>
<code>Source node #2:done</code>
<code> </code><code>M: 364ae8322ab2627e25b05d45b702448c74afad10 172.16.32.116:9000 <<<<<<Source nodes</code>
<code> </code><code>M: a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 <<<<<<<Destination node</code>
<code> </code><code>Moving slot 0 </code><code>from</code> <code>364ae8322ab2627e25b05d45b702448c74afad10</code>
<code>.........</code>
<code> </code><code>Moving slot 11021 </code><code>from</code> <code>364ae8322ab2627e25b05d45b702448c74afad10</code>
<code>Moving slot 0 </code><code>from</code> <code>172.16.32.116:9000 </code><code>to</code> <code>172.16.32.116:7000:</code>
<code>Moving slot 1 </code><code>from</code> <code>172.16.32.116:9000 </code><code>to</code> <code>172.16.32.116:7000:</code>
<code>........</code>
10. 查询,可以看到9000已经没有slot了
<code>a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 master - 0 1505328938056 8 connected 0-5561 10923-11021</code>
<code>273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 master - 0 1505328939059 2 connected 5562-10922</code>
<code>364ae8322ab2627e25b05d45b702448c74afad10 172.16.32.116:9000 myself,master - 0 0 7 connected</code>
<code>3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slave 88fe075375295b59eabe69fa1438ed7c7c314f43 0 1505328936053 3 connected</code>
<code>aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 1505328933046 8 connected</code>
<code>88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 master - 0 1505328937054 3 connected 11022-16383</code>
<code>a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slave 273107e5ac994d675749be0979556e761274bb93 0 1505328934049 2 connected</code>
11. 再次执行命令,将9000变成7000的slave,成功
<code>OK</code>
12. 查看状态,9000已经成为7000的slave
<code>a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 master - 0 1505329564286 8 connected 0-5561 10923-11021</code>
<code>273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 master - 0 1505329561281 2 connected 5562-10922</code>
<code>364ae8322ab2627e25b05d45b702448c74afad10 172.16.32.116:9000 myself,slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 0 7 connected <<<<<<<<<<<<<<</code>
<code>3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slave 88fe075375295b59eabe69fa1438ed7c7c314f43 0 1505329558274 3 connected</code>
<code>aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 1505329554266 8 connected</code>
<code>88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 master - 0 1505329563285 3 connected 11022-16383</code>
<code>a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slave 273107e5ac994d675749be0979556e761274bb93 0 1505329562283 2 connected</code>
13. 删除节点9000,成功删除
<code>>>> Sending CLUSTER FORGET messages </code><code>to</code> <code>the cluster...</code>
<code>>>> SHUTDOWN the node.</code>
14. 连接9000,发现已经shutdown,无法连接
<code>Could </code><code>not</code> <code>connect</code> <code>to</code> <code>Redis </code><code>at</code> <code>127.0.0.1:9000: </code><code>Connection</code> <code>refused</code>
15. 查看集群状态,9000已经不见了
<code># ./redis-cli -p 7000 cluster nodes</code>
<code>88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 master - 0 1505329693835 3 connected 11022-16383</code>
<code>273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 master - 0 1505329694837 2 connected 5562-10922</code>
<code>a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 myself,master - 0 0 8 connected 0-5561 10923-11021</code>
<code>3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slave 88fe075375295b59eabe69fa1438ed7c7c314f43 0 1505329696841 6 connected</code>
<code>a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slave 273107e5ac994d675749be0979556e761274bb93 0 1505329695840 5 connected</code>
<code>aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 1505329692833 8 connected</code>
~~~~~~~~~~~~~~~~~~~~~~~~~~~再次启动9000,发现不同~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
16. 再次启动9000,发现一个有意思的事情。上面检查7000,集群已经没有9000了
<code>88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 master - 0 1505329898241 3 connected 11022-16383</code>
<code>273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 master - 0 1505329899242 2 connected 5562-10922</code>
<code>3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slave 88fe075375295b59eabe69fa1438ed7c7c314f43 0 1505329902249 6 connected</code>
<code>a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slave 273107e5ac994d675749be0979556e761274bb93 0 1505329901246 5 connected</code>
<code>aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 1505329900244 8 connected</code>
17. 但是查看9000,确仍然能看到整个集群的信息。说明,在删除节点的过程,只是在原有集群中删除9000的信息。但是9000自身的信息并没有被删除,依然保留全部的信息,只是9000实例被关闭而已。
<code>a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 master - 0 1505329902003 8 connected 0-5561 10923-11021</code>
<code>273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 master - 0 1505329903006 2 connected 5562-10922</code>
<code>3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slave 88fe075375295b59eabe69fa1438ed7c7c314f43 0 1505329906013 3 connected</code>
<code>a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slave 273107e5ac994d675749be0979556e761274bb93 0 1505329908019 2 connected</code>
<code>aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 1505329904008 8 connected</code>
<code>364ae8322ab2627e25b05d45b702448c74afad10 172.16.32.116:9000 myself,slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 0 7 connected</code>
<code>88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 master - 0 1505329907016 3 connected 11022-16383</code>
18. 而9000的全部信息,是记录在自身目录的nodes.conf中
<code># more nodes.conf</code>
<code>a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 master - 0 1505329544244 8 connected 0-5561 10923-11021</code>
<code>273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 master - 0 1505329542241 2 connected 5562-10922</code>
<code>3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slave 88fe075375295b59eabe69fa1438ed7c7c314f43 0 1505329541239 3 connected</code>
<code>aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 1505329545246 8 connected</code>
<code>88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 master - 0 1505329543242 3 connected 11022-16383</code>
<code>a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slave 273107e5ac994d675749be0979556e761274bb93 0 1505329546248 2 connected</code>
<code>vars currentEpoch 8 lastVoteEpoch 0</code>
19. 到7001等其他节点中查看,nodes.conf已经没有9000的信息
<code>273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 myself,master - 0 0 2 connected 5562-10922</code>
<code>a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 master - 0 1505329680312 8 connected 0-5561 10923-11021</code>
<code>aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 1505329684319 8 connected</code>
<code>3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slave 88fe075375295b59eabe69fa1438ed7c7c314f43 0 1505329686321 6 connected</code>
<code>a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slave 273107e5ac994d675749be0979556e761274bb93 0 1505329685318 5 connected</code>
<code>88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 master - 0 1505329683317 3 connected 11022-16383</code>
~~~~~~~~~~~~~~~~~~~~~~~~~~~再次添加9000,以及9001~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
20. 将9000和9001再次加入集群,开始下面的折腾。
注意:需要将9000和9001下的redis.conf外的文件清除,重启。然后才能再次加入集群。不然会遇到错误:
<code>[ERR] Node 172.16.32.116:9001 </code><code>is</code> <code>not</code> <code>empty. Either the node already knows other nodes (</code><code>check</code> <code>with</code> <code>CLUSTER NODES) </code><code>or</code> <code>contains</code> <code>some</code> <code>key</code> <code>in</code> <code>database</code> <code>0.</code>
21. 加入集群
<code>./redis-trib.rb </code><code>add</code><code>-node 172.16.32.116:9000 172.16.32.116:7002</code>
<code>./redis-trib.rb </code><code>add</code><code>-node 172.16.32.116:9001 172.16.32.116:7002</code>
22. 现在是两个空的Master节点
<code># ./redis-trib.rb </code><code>check</code> <code>172.16.32.116:9001</code>
<code>>>> Performing Cluster </code><code>Check</code> <code>(using node 172.16.32.116:9001)</code>
<code>M: c4ba7a1f537ac66076791461d6af9012741fee74 172.16.32.116:9001</code>
<code>M: dbf78b73f2ab9e37cbf31abbc2beb3d5413d5516 172.16.32.116:9000</code>
<code> </code>
23. 重分配100个slot到9000上,其实redis很聪明的,我连接的是9001,但是在分配的时候,它会问你,receiving node是谁,Source node 是谁。
<code># ./redis-trib.rb reshard 172.16.32.116:9001</code>
<code>......</code>
<code>How many slots do you want </code><code>to</code> <code>move</code> <code>(</code><code>from</code> <code>1 </code><code>to</code> <code>16384)? 100</code>
<code>What </code><code>is</code> <code>the receiving node ID? dbf78b73f2ab9e37cbf31abbc2beb3d5413d5516 <<<<<<<<<receiving node ID</code>
<code>Source node #1:aeb684429d220c0fd1392574d193cc1ae7577782 <<<<<<<Source node我选的是 8000</code>
<code>*** The specified node </code><code>is</code> <code>not</code> <code>known </code><code>or</code> <code>is</code> <code>not</code> <code>a master, please retry. <<<<<<<然而,并没能欺骗redis,它发现了,这个是slave,没有slot可以提供的。 </code>
<code>Source node #1:273107e5ac994d675749be0979556e761274bb93 <<<<<<<<Source node再次指定为7001,开始分配了</code>
<code>Ready </code><code>to</code> <code>move</code> <code>100 slots.</code>
<code> </code><code>M: dbf78b73f2ab9e37cbf31abbc2beb3d5413d5516 172.16.32.116:9000</code>
<code> </code><code>Moving slot 5562 </code><code>from</code> <code>273107e5ac994d675749be0979556e761274bb93</code>
<code> </code><code>Moving slot 5563 </code><code>from</code> <code>273107e5ac994d675749be0979556e761274bb93</code>
24. 查看分配情况,redis还是很聪明灵活的。
<code># redis-cli -p 7001 cluster nodes</code>
<code>273107e5ac994d675749be0979556e761274bb93 172.16.32.116:7001 myself,master - 0 0 2 connected 5662-10922</code>
<code>a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 master - 0 1505330856605 8 connected 0-5561 10923-11021</code>
<code>aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 1505330853598 8 connected</code>
<code>3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slave 88fe075375295b59eabe69fa1438ed7c7c314f43 0 1505330860611 6 connected</code>
<code>a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slave 273107e5ac994d675749be0979556e761274bb93 0 1505330859608 5 connected</code>
<code>c4ba7a1f537ac66076791461d6af9012741fee74 172.16.32.116:9001 master - 0 1505330862615 9 connected <<<<<<<<<<<<<<<<<<<<<依然是空的</code>
<code>88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 master - 0 1505330861612 3 connected 11022-16383</code>
<code>dbf78b73f2ab9e37cbf31abbc2beb3d5413d5516 172.16.32.116:9000 master - 0 1505330858607 10 connected 5562-5661 <<<<<<<<<<<<<<<<<<<<<从7001要来100个slot</code>
25. 将9001添加为9000的slave节点 redis-cli -p <slave IP:port> cluster nodes <Master ID 号>
<code># redis-cli -p 9001 cluster nodes dbf78b73f2ab9e37cbf31abbc2beb3d5413d5516</code>
<code>a0b91f48e933c1f1d427c54917ce970bd25d29f8 172.16.32.116:7000 master - 0 1505331457798 8 connected 0-5561 10923-11021</code>
<code>aeb684429d220c0fd1392574d193cc1ae7577782 172.16.32.116:8000 slave a0b91f48e933c1f1d427c54917ce970bd25d29f8 0 1505331454791 8 connected</code>
<code>3d27f60a1cc4d9c8f09aca928b03f0e083722d3b 172.16.32.116:8002 slave 88fe075375295b59eabe69fa1438ed7c7c314f43 0 1505331456795 6 connected</code>
<code>a96cad95dca2a8e1e0302bff4f835260d92e3d31 172.16.32.116:8001 slave 273107e5ac994d675749be0979556e761274bb93 0 1505331458799 10 connected</code>
<code>c4ba7a1f537ac66076791461d6af9012741fee74 172.16.32.116:9001 slave dbf78b73f2ab9e37cbf31abbc2beb3d5413d5516 0 1505331459801 10 connected</code>
<code>88fe075375295b59eabe69fa1438ed7c7c314f43 172.16.32.116:7002 master - 0 1505331455793 3 connected 11022-16383</code>
<code>dbf78b73f2ab9e37cbf31abbc2beb3d5413d5516 172.16.32.116:9000 master - 0 1505331453788 10 connected 5562-5661</code>
经过各种折腾,redis添加,删除,重分配slot等操作,都测试完了。
中间有很多命令输出部门,视乎有点重复。但是为了更好的阅读理解,观察每一步操作的变化。后面查阅也更容易一些。
毕竟,年纪大了,记性不好。好多自己写过的blog,回头翻阅的时候,发现某些步骤,不是很好理解了。虽然我的blog,都是基于自己测试的结果,但是依然会忘记。
本文转自 hsbxxl 51CTO博客,原文链接:http://blog.51cto.com/hsbxxl/1965706,如需转载请自行联系原作者