redis集群新增节点:[ERR] Node is not empty

本文介绍了在Redis集群中新增节点遇到的问题及解决步骤。首先需要停止服务并删除相关配置文件,若问题未解决,则需进一步清除所有节点的配置文件甚至清空数据库。

给集群新增节点时提示

./redis-trib.rb add-node 192.168.1.198:7006 192.168.1.198:7000


解决办法:

1、先杀掉新增redis节点服务

2、删除新增节点appendonly.aof、dump.rdb、nodes.conf再执行

3、还不行再删除所有redis节点的appendonly.aof、dump.rdb、nodes.conf,再执行

4、还不行清库再执行

[root@localhost ~]# cd /usr/local/redis-3.0.6/src/
[root@localhost src]# redis-cli -c -p 7000
127.0.0.1:7000>  flushdb
OK

我是进行到第2步就解决了


[root@localhost 7006]# cd /usr/local/redis-3.0.6/src/
#增加主节点操作192.168.1.198:7000是任意的旧节点
[root@localhost src]# ./redis-trib.rb add-node 192.168.1.198:7006 192.168.1.198:7000
>>> Adding node 192.168.1.198:7006 to cluster 192.168.1.198:7000
>>> Performing Cluster Check (using node 192.168.1.198:7000)
M: 2f70e9f2b4a06a846e46d7034a54e0fe6971beea 192.168.1.198:7000
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 6c4f18b9e8729c3ab5d43b00b0bc1e2ee976f299 192.168.1.199:7004
   slots: (0 slots) slave
   replicates 26101db06b5c2d4431ca8308cf43d51f6939b4fc
S: ebb27bd0a48b67a4f4e0584be27c1c909944e935 192.168.1.199:7005
   slots: (0 slots) slave
   replicates 2f70e9f2b4a06a846e46d7034a54e0fe6971beea
M: e60f49920cf8620927b200b0001892d08067d065 192.168.1.198:7001
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: 02f1958bd5032caca2fd47a56362c8d562d7e621 192.168.1.199:7003
   slots: (0 slots) slave
   replicates e60f49920cf8620927b200b0001892d08067d065
M: 26101db06b5c2d4431ca8308cf43d51f6939b4fc 192.168.1.198:7002
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 192.168.1.198:7006 to make it join the cluster.
[OK] New node added correctly.


<think>好的,我现在需要帮助用户了解如何从Redis集群中移除节点。首先,我得回忆一下Redis集群的相关知识,特别是节点移除的步骤和注意事项。根据用户提供的引用内容,有几个关键点需要注意: 1. 用户提到了两种删除节点的方法,一种是使用`redis-cli --cluster del-node`命令,另一种是使用`redis-trib.rb del-node`脚本。这可能涉及不同版本的Redis工具,需要区分清楚。 2. 引用[3]指出,如果节点不为空,或者已经包含数据,删除时会报错。这意味着在删除节点前需要确保节点是空的,或者数据已经迁移走。 3. 引用[4]提到了failover的处理,这可能和删除主节点前需要先进行故障转移有关,特别是当要删除的是主节点时,需要先将其数据迁移到其他节点。 接下来,我需要整理步骤。首先,确定要删除的节点是主节点还是从节点。如果是主节点,必须确保它没有负责的哈希槽,否则需要重新分片。而删除从节点相对简单,直接执行命令即可。但需要注意,如果主节点有从节点,删除从节点可能会影响高可用性。 然后,检查节点是否为空。如果节点包含数据,需要使用`redis-cli --cluster reshard`或`redis-cli --cluster rebalance`来迁移数据。这可能涉及到哈希槽的重新分配,需要用户确认迁移的数据量。 此外,还要注意集群的健康状态。在删除节点前,确保集群处于正常状态,没有故障节点,否则操作可能会失败。使用`CLUSTER NODES`命令查看节点信息,确认要删除的节点的ID和角色。 可能遇到的错误包括节点不为空([ERR] Node ... is not empty),这时候需要先清空节点数据或者迁移数据。另外,删除主节点前如果没有迁移哈希槽,也会导致失败。需要逐步引导用户完成这些步骤,避免遗漏。 最后,生成相关问题时要涵盖用户可能进一步想了解的内容,比如数据迁移、集群检查、故障处理等,确保全面覆盖移除节点相关的知识点。</think>从Redis集群中移除节点的步骤如下,需根据节点类型(主/从)选择不同操作: ### 一、移除从节点(Slave) 1. **查看节点信息** 执行`redis-cli --cluster check <任意节点IP>:<端口>`确认要删除的从节点ID和状态[^2]。 2. **执行删除命令** ```bash redis-cli --cluster del-node <从节点IP>:<端口> <从节点ID> ``` 或使用旧版工具: ```bash redis-trib.rb del-node <从节点IP>:<端口> <从节点ID> ``` ### 二、移除主节点(Master) 1. **迁移哈希槽** 主节点需先释放所有哈希槽: ```bash redis-cli --cluster reshard <主节点IP>:<端口> ``` 按提示将哈希槽迁移到其他主节点[^3]。 2. **确认数据清空** 检查节点是否已无数据: ```bash redis-cli -h <主节点IP> -p <端口> DBSIZE ``` 若返回值不为0,需重新分片或等待迁移完成[^3]。 3. **删除节点** ```bash redis-cli --cluster del-node <主节点IP>:<端口> <主节点ID> ``` ### 三、验证操作 执行集群检查确认节点已移除: ```bash redis-cli --cluster check <存活节点IP>:<端口> ``` ### 常见错误处理 - **节点不为空错误**:若出现`[ERR] Node ... is not empty`,需先完成数据迁移 - **节点仍存连接**:使用`CLUSTER FORGET <节点ID>`手动断开残留连接[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值