Redis集群节点移除操作指南,如何无损移除Redis集群节点,Redis集群节点移除常见问题

文章导读
无损移除Redis集群节点的核心步骤:1. 使用redis-cli --cluster rebalance 将从节点数据重新平衡到其他从节点;2. redis-cli --cluster del-node <cluster_host>:<cluster_port> <node_id> 移除空闲从节点;3. 对于主节点,先将所有槽重新分配到其他主节点,使用redi
📋 目录
  1. A 步骤详解
  2. B 主节点移除流程
  3. C 常见问题一
  4. D 无故障转移移除
  5. E 脚本自动化
  6. F 故障排除
A A

无损移除Redis集群节点的核心步骤:1. 使用redis-cli --cluster rebalance 将从节点数据重新平衡到其他从节点;2. redis-cli --cluster del-node <cluster_host>:<cluster_port> <node_id> 移除空闲从节点;3. 对于主节点,先将所有槽重新分配到其他主节点,使用redis-cli --cluster reshard,然后del-node移除;确保在高峰期外操作,避免数据丢失。

步骤详解

首先,连接到集群:redis-cli -c -h 127.0.0.1 -p 7000。然后查看集群信息:cluster nodes,记录要移除节点的ID。对于从节点,直接执行:redis-cli --cluster del-node 127.0.0.1:7005 <NODE_ID>。如果是从节点且无数据,会直接移除。

主节点移除流程

主节点移除前必须清空槽位:redis-cli --cluster reshard 127.0.0.1:7000 --cluster-from <NODE_ID> --cluster-to <TARGET_NODE_ID> --cluster-slots 16384。将所有16384个槽迁移完毕后,再del-node移除。整个过程数据会自动迁移,不会丢失。

Redis集群节点移除操作指南,如何无损移除Redis集群节点,Redis集群节点移除常见问题

常见问题一

移除时提示"node is not empty":说明节点还有槽或数据未迁移完。先用cluster countkeysinslot检查每个槽是否有key,然后reshard迁移。

无故障转移移除

为了无损,确保集群至少有3个主节点,且每个主有从节点。移除前检查cluster info,确保cluster_state:ok。操作后验证cluster nodes无异常。

脚本自动化

redis-cli --cluster rebalance --cluster-weight <NODE_ID>=0 127.0.0.1:7000 将权重设为0后自动平衡,然后del-node。适用于大规模集群。

Redis集群节点移除操作指南,如何无损移除Redis集群节点,Redis集群节点移除常见问题

故障排除

如果节点下线:cluster forget <NODE_ID>手动忘记顽固节点。网络问题导致reshard失败:检查防火墙和端口7000/16379。

FAQ
Q: 移除主节点数据会丢失吗?
A: 不会,只要正确reshard迁移槽位,数据会复制到新主节点。
Q: 从节点直接del-node可以吗?
A: 可以,如果它是空闲从节点,直接移除无影响。
Q: 集群只剩2主节点能移除吗?
A: 不推荐,至少保持3主以确保高可用,先加新节点。
Q: reshard卡住怎么办?
A: 用--cluster-timeout 30000增加超时,或手动migrating/auth slots。