集群缩容怎么删节点
删主节点前必须先把它的槽全部迁走并确认没有数据,否则槽会永久丢失、集群进入 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、槽范围与变更时间,作为变更审计材料