【已解决】Redis分片集群在缩容的时候,执行删除节点命令提示:is not empty! Reshard data away and try again
- Redis
- 时间:2023-01-04 20:01
- 4393人已阅读
🔔🔔🔔好消息!好消息!🔔🔔🔔
有需要的朋友👉:联系凯哥
Redis分片集群,扩容之后,需要进行缩容,在执行删除节点命令命令的时候,提示如下错误:is not empty! Reshard data away and try again
提示[ERR] Node 127.0.0.1:7004 is not empty! Reshard data away and try again.
说明,当前该节点还有哈希槽信息,我们需要重哈希移走所有的数据才行,接下来执行操作删除节点操作。
这里顺便说下,删除节点命令:
redis-cli --cluster del-node host:port node_id
解决方案:
我们将7004的哈希槽移动到7001上。因为,7004的槽就是从7001上分配的。
是使用的命令是:reshard.我们来看下reshard命令怎么使用:
所以命令就是:
redis-cli --cluster reshard 192.168.1.11:7004
为什么是7003呢?因为,我们需要将7004的槽还给7001
我们可以看到提示,询问我们,要移动多少个插槽呢?我们计划移动3000个。所以,输入3000。输入后,新的问题又来了。如下图:
询问,这3000个插槽,是哪个node来接收这些插槽呢?
我们需要将这些插槽移动到7001这个节点上,所以,这里输入的node id应该是7001这个节点的id.那么7001这个节点的id是多少呢?我们上面已经看过了:
复制这个id,然后拷贝到刚才询问的控制台后,将id粘贴。
这里又询问了,你的插槽是从哪里移动过来的?
all:代表圈闭,也就是三个节点,各转移一部分;
具体的id:目标节点的id;
done:没有。
我们这里要从7004获取,因此,这里需要输入7004这个节点的id:
其他的输入done就可以。输入之后,回车。这样插槽转移就准备好了。接着又会提示,确认要转移吗?输入yes:
分配完成之后,我们可以通过命令查看分支的结果。使用命令:
redis-cli -p 7001 cluster nodes
移动前后,对比:
这样,7004节点的槽就移动给了7001,我们就可以执行删除7004节点命令了。
删除之后,再次查看集群信息:
使用ps命令查看redis信息:
发现,也没有了。
所以,我们可以得到以下结论:将节点从集群中移除的时候,节点不仅会从集群中删除,而且实例也会直接被停掉。
上一篇: 【图文教程】Redis分片集群搭建