Redis如何安全下线缩容集群节点_先将旧节点的Slot迁出再通过del-node指令移除
del-node前必须确保Slot迁出完成且旧节点无key残留否则报错需用node ID而非host:port迁移del-node后须手动shutdown旧节点进程并刷新客户端连接池。del-node 执行前必须确保 Slot 迁出完成Redis 集群缩容不是删节点就完事del-node 本质是“驱逐”它只检查目标节点是否还持有 Slot —— 只要还有任意一个 Slot 没迁走命令直接报错ERR Target node is not empty. All slots must be covered by other nodes.常见错误是以为迁移命令发出去就等于完成了。实际上 redis-cli --cluster reshard 或 CLUSTER SETSLOT ... MIGRATING 只是发起迁移真正数据同步、状态切换、槽位归属变更需要时间且依赖客户端是否重定向、是否触发 ASK/MOVED 响应。迁移完成后务必用 redis-cli --cluster check any-node 验证所有 Slot 是否被其他节点接管输出里不能出现 [ERROR] Slot XXX is not covered 或 xxx has slots but no keys 类提示更直接的方式是连上旧节点执行 CLUSTER SLOTS返回结果应为空数组再连上任意新节点执行 CLUSTER NODES确认旧节点状态为 fail? 或已消失别跳过 key 清理即使 Slot 已迁出旧节点上仍可能残留 key比如迁移中断、客户端写入未重定向需手动执行 FLUSHALL ASYNC 或逐库 FLUSHDB ASYNC注意不是 FLUSHALL 同步阻塞reshard 迁移时指定 --to 节点 ID 而非 host:port用 redis-cli --cluster reshard 迁移 Slot交互式流程里要求输入 “target node id”这里必须填目标节点的 40 位 ID可通过 CLUSTER NODES 查不能填 127.0.0.1:7001 或域名 —— 填错会导致迁移卡在 IMPORTING 状态旧节点无法 del-node。原因在于集群元数据只认 node idhost:port 是客户端连接信息不参与 Slot 归属决策。填错后你看到的现象是迁移命令看似成功但 CLUSTER SLOTS 在旧节点仍显示该 Slot新节点也无对应记录整个 Slot 处于“悬空”状态。查目标节点 ID连任意节点执行 CLUSTER NODES找 role master 且是你想迁入的节点那一行开头那串字符就是 ID批量迁移更稳避免交互式操作出错用非交互方式指定参数例如redis-cli --cluster reshard 127.0.0.1:7000 --cluster-from old-node-id --cluster-to new-node-id --cluster-slots 100 --cluster-yes注意 --cluster-slots 是指本次迁移的 Slot 数量不是起始编号如需精确控制哪些 Slot得用 CLUSTER SETSLOT MIGRATE 手动逐个操作del-node 后旧节点进程不会自动退出del-node 只是让集群元数据剔除该节点它对旧节点进程本身毫无影响 —— 进程照常运行端口照常监听只是不再被集群承认。如果此时不关进程它会不断尝试重连集群日志刷满 Connection refused 或 Node x.x.x.x:xxxx is not in cluster。 AI智研社 AI智研社是一个专注于人工智能领域的综合性平台