讲师中心 微信公众号
AI工具推荐 视频效率加速

Redis如何安全下线缩容集群节点_先将旧节点的Slot迁出再通过del-node指令移除

落涛同学_2673

落涛同学_2673

发布时间:2026-03-27 12:02:02

|

435人浏览过

|

来源于php中文网

原创

del-node前必须确保Slot迁出完成且旧节点无key残留,否则报错;需用node ID而非host:port迁移;del-node后须手动shutdown旧节点进程,并刷新客户端连接池。

redis如何安全下线缩容集群节点_先将旧节点的slot迁出再通过del-node指令移除

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></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 id,host: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</new-node-id></old-node-id>
  • 注意 --cluster-slots 是指本次迁移的 Slot 数量,不是起始编号;如需精确控制哪些 Slot,得用 CLUSTER SETSLOT + MIGRATE 手动逐个操作

del-node 后旧节点进程不会自动退出

del-node 只是让集群元数据剔除该节点,它对旧节点进程本身毫无影响 —— 进程照常运行,端口照常监听,只是不再被集群承认。如果此时不关进程,它会不断尝试重连集群,日志刷满 Connection refused 或 Node x.x.x.x:xxxx is not in cluster。

更麻烦的是:若误将旧节点配置保留在运维脚本或服务发现中,后续扩容或故障恢复可能意外把它拉回来,导致 Slot 冲突或数据不一致。

  • 执行 del-node 后,立刻在旧节点机器上执行 redis-cli -p <port> shutdown</port>(注意加 -p 指定端口)
  • 确认进程已退出:ps aux | grep redis | grep <port></port> 应无输出;同时检查 systemd 或 supervisor 是否设了自动重启,如有,先 disable 对应 service
  • 别依赖“节点下线=服务停”:Redis 没有内置下线即停机制,一切靠运维主动收尾

客户端连接池没刷新会导致请求打到已 del-node 的节点

集群节点下线后,老客户端(尤其是用了长连接池的 Java/Go 客户端)可能还在往旧节点发请求,因为它们缓存了 CLUSTER NODES 结果或连接地址。现象是部分请求失败,报错类似 MOVED 123 127.0.0.1:7000(但 7000 已下线),或直接连接超时。

这不是 Redis 的问题,而是客户端没及时感知拓扑变更。Redis 本身只通过 MOVED 响应引导重定向,但客户端若忽略或缓存太死,就会持续错连。

  • Jedis:确保使用 4.0+ 版本,并开启 refreshPeriod(默认 60s),或调用 ClusterCommandExecutor.refreshNodes() 强制刷新
  • lettuce:启用 DynamicNodeProvider,并设置 refreshTriggersReconnect 和 adaptiveRefreshTriggersTimeout
  • 最保险的做法:缩容窗口期,滚动重启客户端应用,而非依赖自动刷新

Slot 迁移和 del-node 只解决服务端视角,客户端连接池才是最后一公里。漏掉这步,缩容等于白干,还埋下间歇性故障隐患。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

码上飞
码上飞 Hot

一款基于自然语言的AI应用开发平台,可根据用户描述自动生成应用程序,帮助个人和团队快速完成应用原型与开发。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

相关专题

更多
scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1049

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3320

2023.10.25

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4829

2023.11.02

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4395

2023.11.14

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

8412

2024.04.02

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

663

2024.04.07

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

776

2024.04.07

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

8622

2024.04.07

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

0

2026.11.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn