一、前提
基于上一章redis5.0.9集群搭建
本章内容介绍如何将2个节点添加到现有的集群环境中,然后再减少节点恢复成原来的环境。
当前的集群情况为三主三从,如图:
二、添加新节点到集群
启动新节点,配置与前章配置一致
src/redis-server redis.conf
添加新节点到集群当中,第一个ip:port 为当前新增的节点主机和端口信息,后面的ip:port为当前集群中存活的一台主机端口信息
src/redis‐cli ‐a 123456 ‐‐cluster add‐node 192.168.59.103:6379 192.168.59.100:6379
出现如图
然后进入客户端,输入cluster nodes 查看当前集群节点信息,如图,能看到192.168.59.103:6379的节点以及添加进来并且是一个主节点了,但是当前还没有分配槽位,所以我们还需要给这个节点分配槽位
src/redis-cli -c -a 123456 -h 192.168.59.100 -p 6379
cluster nodes
三、分配槽位
给新节点分配slot槽位,ip:port 为当前集群中的某一任意节点
src/redis‐cli ‐a 123456 ‐‐cluster reshard 192.168.59.100:6379
大概会出现如下需要填写的信息
# 要分配的槽位数
How many slots do you want to move (from 1 to 16384)? 4000
# 分配到新的节点的ID,id就是cluster nodes命令得到的每一个节点信息列表最前面那一串东西
What is the receiving node ID? 2cad271da0c87eac5d6965b59cd07cfd47b4351d
# 输入 all 代表从现有的各个master中抽取出4000个槽位给点新节点
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
... ...
# 确认分配 yes
Do you want to proceed with the proposed reshard plan (yes/no)? yes
然后cluster nodes查看节点信息,如图,可以看到刚刚新增的103节点分配了4000个槽位
四、为新节点添加从节点
接下来为刚刚新增的103节点添加一个从节点,下面的192.168.59.103:6380的一个新的redis节点,添加到集群中
src/redis‐cli ‐a 123456 ‐‐cluster add‐node 192.168.59.103:6380 192.168.59.100:6379
查看节点信息,可以看到新的节点也是一个master节点,所以要把它指定为上面6379节点的从节点
连接新节点(6080)的客户端
src/redis-cli -a 123456 -c -h 192.168.59.103 -p 6380
指定为192.168.59.103:6379节点的从节点
cluster replicate 2cad271da0c87eac5d6965b59cd07cfd47b4351d
看到如图,ok了
五、删除节点
把刚刚添加的192.168.59.103::6379(master)和192.168.59.103::6380(slave)从集群重移除,并把已分配的槽位移动到另外一个主节点192.168.59.100:6379上。
先删除从节点 ip:port 为需要删除的节点的信息,最后一串是它对应的ID
src/redis-cli -a 123456 --cluster del-node 192.168.59.103:6380 0d8230fce485264665fc483b412c30b3f9c81bb1
可以看到已经没有了刚才的节点
最后删除主节点192.168.59.103::6379,在此之前要把槽位分配到某一个主节点上,这里放到192.168.59.100.6379主节点。
ip端口为集群中任意一个存活节点
src/redis-cli -a 123456 --cluster reshard 192.168.59.100:6379
# 需要移除多少槽位,这里的槽位=所需要删除的节点的所占槽位
How many slots do you want to move (from 1 to 16384)? 4000
# 分配到哪个节点,值为节点id
What is the receiving node ID? d1d52cce852a949eb6173620f2ed1e44b6cf9e1f
# source node 为 192.168.59.103::6379 的id
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: 2cad271da0c87eac5d6965b59cd07cfd47b4351d
# 输入done执行生成计划,
Source node 2:done
# 执行 yes,结束
Do you want to proceed with the proposed reshard plan (yes/no)? Yes
可以看到192.168.59.103:6379已经没有槽位了
最后安全删除即可
src/redis-cli -a 123456 --cluster del-node 192.168.59.103:6379 2cad271da0c87eac5d6965b59cd07cfd47b4351d