Redis分片集群-集群伸缩

redis-cli --cluster提供了很多操作集群的命令,可以通过下面方式查看:

redis-cli --cluster help执行如下:

 比如,添加节点的命令:

 new_host代表需要添加的节点ip, exitsting_host代表已经存在的主机IP,也即集群中已经有的,为什么需要知道旧节点的ip端口呢,因为要向集群添加节点,需要通知集群中的每个角色,也就是得先联系上这个集群,告诉这个端口号,客户端命令就可以联系上这个集群,从而把这个新节点信息通知给集群中的每一个角色,新增的节点在没有指定的情况下,默认就是主节点,如果加上后面的注释部分比如cluster-slave就代表是从节点,还可以通过cluster-master-id指定它的主节点是谁。

首先,创建一个文件夹存放节点配置文件。

mkdir 9004

 接着把redis.conf文件拷贝放入到9004文件夹下,执行命令:

cp redis.conf 9004

通过命令将配置文件里面的端口号改一下:

sed -i s/6379/9004/g 9004/redis.conf

启动新加的节点:

redis-server 9004/redis.conf

启动后查看一下进程:

ps -ef | grep redis

如下图:

但现在它还没有成为集群中的节点,我们要通过这个命令执行让其成为集群节点的一部分:

redis-cli --cluster add-node 192.168.137.11:9004 192.168.137.11:9001

 为了更准确的查看添加信息,可以执行:

redis-cli -p 9001 cluster nodes

 但是上图的对比发现,9004是没有任何插槽的,这个时候需要重新分配集群的插槽给9004,需要就9001上的一部分插槽分配给9004.

执行:redis-cli -c -p 9001

输入不同的变量值,查看插槽的显示信息:

 从上图可看出,num的插槽是2765,如果想要将num分配在9004这个节点上,则需将指定的插槽移动到9004上。执行:

redis-cli --cluster reshard 192.168.137.11:9001

上面这个指令地址192.168.137.11:9001代表的是从哪个集群ip上进行分片,我们现在是想从9001这个集群上获取分配,所以填9001这个就好。如下图:

 回车,在输入要分配到哪个记得,也就是9004这个节点地址,直接复制上面的9004这个节点的id即可:

 回车,接下来它又问你从哪个源进行拷贝,毫无疑问从9001上进行拷贝,复制它的id填入即可:

 写完后,再填入done代表结束。

 后面还会提示你要不要将这3000个插槽移动过去,输入yes回车即可。

 0到2999个插槽移动完成:

 再执行查询集群节点信息的命令:redis-cli -p 9001 cluster nodes,可以看到新加的9004节点已经有插槽值分配到。

 执行命令:redis-cli -c -p 9001,可以发现num值已经存在了9004这个节点上了(原来是在9001上的 )。

 这同时也说明了,redis的数据是跟着插槽走的。记住两个命令,一个是:add-node,另一个是:reshard,可以通过帮助文档命令:redis-cli --cluster help查看。

 接下来,我们演示下删除主节点,我们现在要将9004这个节点删除。

如果主节点有从节点,将从节点转移到其他主节点
如果主节点有slot,去掉分配的slot,然后在删除主节点

过程如下:

1.槽位移动

执行名:redis-cli --cluster reshard 192.168.137.11:9004

 按照上图的步骤回车一步一步执行即可,接下来它又问从哪个源进行拷贝,肯定是需要删除的这个节点上拷贝了:

 接着,执行done操作,后面又问要不要将这3000个槽位移动过去,yes即可:

2.删除主节点9004 

直接执行:redis-cli --cluster del-node 192.168.137.11:9004 30977fd928bc445a89e86102f43eeb0779ee8b23

 

 接着验证一下:redis-cli -p 9001 cluster nodes

 

posted @ 2023-06-26 15:30  xycccode  阅读(33)  评论(0编辑  收藏  举报