Redis Cluster新增节点以及重新分配槽位

Redis Cluster新增节点以及重新分配槽位

图片来源:pexels.com

背景介绍

由于又新增了一台服务器,也搭建了两个Redis Cluster,因此想把它们也加入进集群里面来,就有了这么一篇文章。

开始动手

根据上一篇文章

使用docker在多台物理机上搭建redis-cluster

这些步骤做完后,就开始添加Redis Cluster的节点了;

首先查看节点帮助命令:

root@05ca62be4abd:/data# redis-cli --cluster help
Cluster Manager Commands:
  ...
  reshard        host:port
                 --cluster-from <arg>
                 --cluster-to <arg>
                 --cluster-slots <arg>
                 --cluster-yes
                 --cluster-timeout <arg>
                 --cluster-pipeline <arg>
                 --cluster-replace
  ...
  add-node       new_host:new_port existing_host:existing_port
                 --cluster-slave
                 --cluster-master-id <arg>
  ...
  help           

For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.

这里只列出来了,本篇文章需要用到的命令。

可以看到,有一个add-node命令,可以通过add-node命令来添加新的节点。

这里,我把它添加到已存在的节点上:

redis-cli --cluster add-node 192.168.11.229:7006 192.168.11.164:7004 \
-h 192.168.11.176 -p 7000 -a 123456

添加一个节点后,当然还没完,还要给它指定从节点,添加从节点需要一个主节点的ID:

通过cluster nodes或者redis-cli --cluster check来查看节点信息,然后找到刚刚添加的7006节点的ID:

192.168.11.176:7000> cluster nodes
...
0f5b82317f636c308c7b2275c31748e115307cf5 192.168.11.229:7006@17006 ....
...

然后再根据刚刚命令的提示,只需要指定 --cluster-slave和 --cluster-master-id就好了:

redis-cli --cluster add-node --cluster-slave \
--cluster-master-id 0f5b82317f636c308c7b2275c31748e115307cf5 \
192.168.11.229:7007 192.168.11.229:7006 \
-h 192.168.11.176 -p 7000 -a 123456

192.168.11.229:7007指定为192.168.11.229:7006的从节点。

添加完主从后,由于它还是一个空节点,没有将槽分配给它,数据也是无法存入这台服务器的。

接下来,就是重新分配槽:

redis-cli -h 192.168.11.176 -p 7000 --cluster reshard 192.168.11.229:7006 -a 123456

接着它会提示,要分配多少个槽位给它(我这里分配的是4096):

How many slots do you want to move (from 1 to 16384)? 4096

接着就是接收的节点ID,也就是刚刚新增的节点ID:

What is the receiving node ID? 0f5b82317f636c308c7b2275c31748e115307cf5

接着再提示你,是否所有的节点都重新分配还是指定的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:all

最后,再跟你确定,是否要这么做:

Do you want to proceed with the proposed reshard plan (yes/no)? yes

确定之后,它一顿操作...

操作完了之后,我们只需要去看一下节点的信息就好了:

root@05ca62be4abd:/data# redis-cli -h 192.168.11.176 -p 7000
192.168.11.176:7000> auth 123456
OK
192.168.11.176:7000> CLUSTER NODES
a7fc511b1329adc326008a5afcb7509595542b00 192.168.11.161:7002@17002 master - 0 1584888271565 3 connected 6827-10922
9e98eb92b6ca009dfad3b5f0a5de0b20f9556d03 192.168.11.161:7003@17003 slave d6f8e0e0a68305f3c528559dd957064cf879c2a3 0 1584888270534 4 connected
0f5b82317f636c308c7b2275c31748e115307cf5 192.168.11.229:7006@17006 master - 0 1584888272463 7 connected 0-1364 5461-6826 10923-12287
d6f8e0e0a68305f3c528559dd957064cf879c2a3 192.168.11.176:7000@17000 myself,master - 0 1584888268000 1 connected 1365-5460
1485bf7bc3e9450b92c947bdf53e840b63b7e473 192.168.11.164:7005@17005 slave a7fc511b1329adc326008a5afcb7509595542b00 0 1584888271569 6 connected
f8a802117f0c359bf442ffe7423ed35ae1b55c7a 192.168.11.229:7007@17007 slave 0f5b82317f636c308c7b2275c31748e115307cf5 0 1584888271451 7 connected
698ef9f594d3ded276ca4f2a4cbd511306bc521f 192.168.11.176:7001@17001 slave 155c2445cccde113ac50041c6efacdcfa7e76905 0 1584888272000 5 connected
155c2445cccde113ac50041c6efacdcfa7e76905 192.168.11.164:7004@17004 master - 0 1584888270543 5 connected 12288-16383

可以看到,新增的节点,被分配了大概有4000多个槽位,这样也就完成啦。


END

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×