【已解决】Redis分片集群在缩容的时候,执行删除节点命令提示:is not empty! Reshard data away and try again

  • 作者: 凯哥Java(公众号:凯哥Java)
  • Redis
  • 时间:2023-01-04 20:01
  • 4393人已阅读
简介 Redis分片集群,扩容之后,需要进行缩容,在执行删除节点命令命令的时候,提示如下错误:isnotempty!Resharddataawayandtryagain提示[ERR]Node127.0.0.1:7004isnotempty!Resharddataawayandtryagain.说明,当前该节点还有哈希槽信息,我们需要重哈希移走所有的数据才行,接下来执行操作删除节点操作。这里顺便说下,删除

🔔🔔🔔好消息!好消息!🔔🔔🔔

有需要的朋友👉:联系凯哥 微信号 kaigejava2022

Redis分片集群,扩容之后,需要进行缩容,在执行删除节点命令命令的时候,提示如下错误:is not empty! Reshard data away and try againf909a0a357caac06a48a576f78a9a968.png

提示[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

8eafaf823975321fdf5a9210f4bac663.png

解决方案:

我们将7004的哈希槽移动到7001上。因为,7004的槽就是从7001上分配的。

是使用的命令是:reshard.我们来看下reshard命令怎么使用:

bbb0b1ab1ab37fb8705ea7f948cfdc88.png

所以命令就是:

redis-cli --cluster reshard 192.168.1.11:7004

为什么是7003呢?因为,我们需要将7004的槽还给7001

357afebec1b4af311378d6ea6730a520.png

我们可以看到提示,询问我们,要移动多少个插槽呢?我们计划移动3000个。所以,输入3000。输入后,新的问题又来了。如下图:

7206f5e1a6a281a496350c23db472dfc.png

询问,这3000个插槽,是哪个node来接收这些插槽呢?

我们需要将这些插槽移动到7001这个节点上,所以,这里输入的node id应该是7001这个节点的id.那么7001这个节点的id是多少呢?我们上面已经看过了:

e44526652c169991aab3824b64441e15.png

复制这个id,然后拷贝到刚才询问的控制台后,将id粘贴。

这里又询问了,你的插槽是从哪里移动过来的?

all:代表圈闭,也就是三个节点,各转移一部分;

具体的id:目标节点的id;

done:没有。

我们这里要从7004获取,因此,这里需要输入7004这个节点的id:

b07165abdc87a8ca50167a0d523d7ad1.png

其他的输入done就可以。输入之后,回车。这样插槽转移就准备好了。接着又会提示,确认要转移吗?输入yes:

873a07144d3bb3b1cda2c385856a13ab.png

分配完成之后,我们可以通过命令查看分支的结果。使用命令:

redis-cli -p 7001 cluster nodes

移动前后,对比:

f6d5fd779b72575c1dc0d4da70a00ad0.png

这样,7004节点的槽就移动给了7001,我们就可以执行删除7004节点命令了。

807d507dd5223c6c2dc0b3a922eaaa5f.png删除之后,再次查看集群信息:

3ae95dcfb3286ff7fe4dc5bd5ffc6806.png使用ps命令查看redis信息:

6a968438efb16988f184a3c5e36c60a2.png发现,也没有了。

所以,我们可以得到以下结论:将节点从集群中移除的时候,节点不仅会从集群中删除,而且实例也会直接被停掉。



TopTop