首页/数据/数据库速查/缩容:删节点与槽归还
Redis 运维与场景124 条

缩容:删节点与槽归还

删主节点前必须先把它的槽迁走并确认无数据;删从节点相对简单;最后用 CLUSTER FORGET 让残留节点忘记旧节点(必要时)。

数据库速查数据更新于 2026-10-13

集群缩容怎么删节点

删主节点前必须先把它的槽全部迁走并确认没有数据,否则槽会永久丢失、集群进入 fail 状态;删从节点相对简单,直接 del-node 即可。节点移除后,其他节点上残留的旧节点记录需要逐个执行 CLUSTER FORGET 清理。

基本信息

适用Redis 5.0 及以上 Cluster 模式
删主前提无槽、无数据,且其他节点已接管
命令入口redis-cli --cluster del-node 与 CLUSTER FORGET
常见坑先停节点再删,导致槽无人接管

安全删除主节点

安全删除主节点
# 1) 先迁走全部槽(把 from 换成待删节点,to 换成保留节点)
redis-cli --cluster reshard 10.0.0.1:6379 --cluster-from <待删节点ID> --cluster-to <保留节点ID> --cluster-slots <该节点槽数> --cluster-yes
# 2) 确认槽已迁空、键已清空
redis-cli -h 待删主机 -p 6379 CLUSTER COUNTKEYSINSLOT <槽号>   # 逐个关键槽抽查
redis-cli -h 待删主机 -p 6379 DBSIZE                           # 应为 0
redis-cli --cluster check 10.0.0.1:6379                         # 确认集群槽映射完整
# 3) 移除节点
redis-cli --cluster del-node 10.0.0.1:6379 <待删节点ID>
# 4) 其他节点上清理残留记录
redis-cli -h 10.0.0.2 -p 6379 CLUSTER FORGET <待删节点ID>

步骤与检查点

步骤命令检查点
迁槽--cluster reshard确认待删节点槽数为 0
确认数据DBSIZE、CLUSTER COUNTKEYSINSLOT为 0 才继续
删除节点--cluster del-node输出节点已移除
清理残留CLUSTER FORGET在其它节点逐个执行
最终确认--cluster check槽映射完整、无 fail 节点

典型使用场景

  • 缩容降本:把节点数从 N 减到 N-1
  • 下线故障节点并回收资源
  • 机房合并:把节点迁出即将停用的机房
  • 替换硬件:先加新节点再删旧节点
  • 演练集群变更流程并沉淀操作手册
带槽直接删除主节点会让这些槽永久丢失,集群标记 fail;删除前必须迁空槽并确认数据已无,操作前先备份。
CLUSTER FORGET 不能在目标节点自身上执行,应在仍存活的其他节点上逐个执行,用于清除旧节点的记录。

缩容前后的核查

  • 变更前执行 CLUSTER INFO 与 cluster check 留档,便于事后比对状态
  • 槽迁移期间会产生跨节点请求,尽量安排在低峰时段执行
  • 删节点后核对副本要求,避免某个分片只剩单副本
  • 记录节点 ID、槽范围与变更时间,作为变更审计材料

易错点

  • 先把节点停掉再删:槽无人接管,集群直接进入 fail 状态
  • 在待删节点上执行 CLUSTER FORGET:命令会被拒绝或造成状态混乱,应在其他节点执行
  • 跳过大 key 的核对:节点上仍有关键数据时删节点会造成数据丢失
  • 缩容后不改客户端拓扑缓存:部分客户端仍指向已删节点,出现持续报错

数据来源与参考

  • Redis 官方文档: 移除节点
  • Redis 官方文档: CLUSTER FORGET

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌