del-node 的作用
redis-cli --cluster del-node 把指定节点从集群拓扑中移除,它向集群内其他节点广播遗忘指令,让该节点不再参与投票与槽分配。删除从节点可以直接执行;删除主节点前必须先把该节点负责的全部槽迁走,否则会留下无主槽,集群状态会变成 fail,客户端写入立刻报 CLUSTERDOWN。这是缩容收尾的标准动作,顺序与扩容正好相反。
基本信息
| 命令格式 | redis-cli --cluster del-node <集群任一节点> <node-id> |
|---|---|
| 节点标识 | 40 位十六进制 CLUSTER NODES 中每行的首个字段 |
| 主节点前置 | 先用 reshard 把槽全部迁走并 check 确认 |
| 执行结果 | CLUSTER NODES 中该节点消失,槽仍完整 |
典型使用场景
- 机器到期退租,把节点从集群摘除后再下架服务器
- 替换一台故障且确定不再恢复的主节点
- 清理早期搭建集群时留下的测试节点与空主节点
- 缩容过程中先把槽匀出再删节点,最后回收实例与端口
- 误用 cluster meet 拉进了不该加入的节点时把它移出
缩容完整步骤
缩容完整步骤
redis-cli -p 7000 CLUSTER NODES | grep master # 找出待删主节点的 node-id
redis-cli --cluster reshard 10.0.0.11:7000 --cluster-from <待删id> --cluster-to <目标id> --cluster-slots 5461 --cluster-yes
redis-cli --cluster check 10.0.0.11:7000 # 确认已无槽指向待删节点
redis-cli --cluster del-node 10.0.0.11:7000 <待删id> # 执行移除
redis-cli --cluster check 10.0.0.11:7000 # 复核拓扑仍完整
redis-cli -p 7000 CLUSTER NODES | wc -l # 节点数是否如预期减少安全顺序与核对
| 步骤 | 动作 | 失败后果 |
|---|---|---|
| 1 | 迁走待删主节点的全部槽 | 残留无主槽,集群进入 fail |
| 2 | check 确认槽覆盖完整 | 漏检就删会带病下线 |
| 3 | 执行 del-node 移除拓扑记录 | 其他节点仍认为它在线并继续投票 |
| 4 | 停止进程并清理数据目录 | 仅为回收资源,不影响集群状态 |
del-node 只改拓扑,不会删任何数据文件、也不会停进程,实例与端口仍需按规范单独回收。
待删节点与其他节点之间必须网络可达,否则遗忘消息传播不完整,个别节点可能长期保留旧节点信息。