为什么Redis集群的Slot槽位迁移会卡在migrating状态_解决大数据量下阻塞IO的几种技巧

胖枫酱_8249

胖枫酱_8249

2026-06-08

524人浏览

原创

slot迁移卡在migrating状态本质是redis单线程被大key或慢操作阻塞,导致migrate同步执行时无法响应其他请求;需先用scan分批迁移小key、单独处理大key,必要时用cluster setslot slot stable强制恢复。

为什么redis集群的slot槽位迁移会卡在migrating状态_解决大数据量下阻塞io的几种技巧

Slot迁移卡在 MIGRATING 状态,本质是 Redis 主线程被大 Key 或慢操作阻塞,无法推进状态切换 —— 不是网络或配置问题,而是单线程模型下的同步阻塞行为。

为什么 CLUSTER SETSLOT ... MIGRATING 后就卡住不动

执行该命令只是给 slot 打上标记,并不触发实际迁移;真正迁移靠客户端访问触发(ASK 重定向 + MIGRATE 命令)或人工调用 MIGRATE。但只要 slot 下存在一个超大 Hash/List/Set(比如百万级成员),MIGRATE 就会一次性序列化整个结构,阻塞主线程数秒甚至分钟。

  • Redis 是单线程处理命令,MIGRATE 是原子同步操作,期间无法响应其他请求
  • redis-cli --cluster migrate 工具底层也是反复调用 MIGRATE,遇到大 Key 同样卡死
  • 日志里持续出现 Node X has slots in migrating state Y,说明该 slot 的迁移逻辑没走完,状态无法提交
  • 用 CLUSTER COUNTKEYSINSLOT <slot_id></slot_id> 查到 key 数不为 0,但 SCAN 又扫不出新 key —— 很可能就是那个大 Key 占着 slot 没被移走

绕过自动迁移:用 SCAN + MIGRATE 分批推小 Key

不要依赖集群自动发现和重定向,改为主动、可控的分批迁移。核心是避开大 Key,先搬干净的小 Key,最后单独处理大 Key。

NotchLive
NotchLive

一款AI音频处理工具,主要用于Mac 实时字幕、语音转文字和实时翻译应用,适合需要提升相关任务效率的用户。

下载
  • 先用 redis-cli -c -p 7001 cluster countkeysinslot <slot_id></slot_id> 确认 slot 总 key 数
  • 用 SCAN 0 MATCH "*{key_pattern}" COUNT 100 配合 MIGRATE 搬普通 key:redis-cli -p 7001 migrate 192.168.1.101 7004 "" 0 5000 replace(注意加 TIMEOUT 5000,防无限 hang)
  • 对疑似大 Key,先用 MEMORY USAGE <key></key> 测内存占用,再决定是否跳过或拆分
  • 跳过大 Key 的 SCAN:用 SCAN 的 MATCH 排除已知前缀,或用 KEYS 的替代方案(如业务层记录 key 清单)

强制退出迁移卡死:用 CLUSTER SETSLOT <slot_id> STABLE</slot_id>

当迁移彻底中断、目标节点不可达或大 Key 无法处理时,不能硬等。必须手动清理迁移中间态,否则集群元数据一直不一致。

  • 从错误日志里提取卡住的 slot ID,例如 Node 192.168.206.129:7004 has slots in migrating state 15495 → slot ID 是 15495
  • 登录对应源节点(不是目标节点):redis-cli -c -p 7004
  • 执行:CLUSTER SETSLOT 15495 STABLE,这会清除 MIGRATING 标记,让 slot 回归正常服务状态
  • 注意:该操作不删除数据,也不回滚已迁移的 key,只重置状态;后续需人工补漏或重新规划迁移
  • 切勿在未确认节点角色时乱用 CLUSTER SETSLOT <slot_id> NODE <node_id></node_id></slot_id> —— 这极易引发 slot 不一致

大 Key 拆分必须在迁移前完成

迁移过程本身不支持“流式”或“分片式”传输大结构,所以拆分动作必须前置。线上直接 HSCAN/SSCAN 拆是可行的,但要注意避免拆到一半被迁移中断。

  • Hash 拆分示例:把 user:1001:profile 拆成 user:1001:profile:base、user:1001:profile:setting 等,按业务维度切
  • 拆分期间禁止写入原 key,可用配置中心临时关闭相关功能模块
  • 拆完后用 CLUSTER KEYSLOT 确认新 key 落在不同 slot,分散迁移压力
  • 如果业务无法停写,只能选低峰期 + CLIENT PAUSE 冻结客户端连接几秒,完成关键拆分

真正难的不是命令怎么敲,而是判断哪个 key 在拖慢整个 slot —— MEMORY USAGE 要逐个试,--bigkeys 只能给方向,最终得靠 SCAN + TYPE + STRLEN/LLEN/HLEN 组合排查。别省这一步。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

redis集群

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

相关专题

更多
大数据分析工具有哪四个
大数据分析工具有哪四个

大数据分析的四个工具分别是rapidminer、Hpcc、Hadoop和Pentaho bi。大数据分析用于从各种来源生成的原始数据中提取有价值的数据。这些数据帮助我们获得有意义的见解、隐藏的模式、未知的相关性、市场趋势等等,具体取决于行业。大数据分析的主要动机是提供有价值的见解,以便为未来做出更好的决策。php中文网为大家带来了大数据分析的相关教程、以及相关文章等内容,供大家免费下载使用。

2023.06.21

4596

5

Java 大数据处理基础(Hadoop 方向)
Java 大数据处理基础(Hadoop 方向)

本专题聚焦 Java 在大数据离线处理场景中的核心应用,系统讲解 Hadoop 生态的基本原理、HDFS 文件系统操作、MapReduce 编程模型、作业优化策略以及常见数据处理流程。通过实际示例(如日志分析、批处理任务),帮助学习者掌握使用 Java 构建高效大数据处理程序的完整方法。

2025.12.08

1229

12

大数据专业学习教程
大数据专业学习教程

本专题整合了大数据专业学习相关教程,阅读专题下面的文章了解更多详细内容。

2026.01.05

223

5

python处理大数据合集
python处理大数据合集

本专题整合了python处理大数据相关教程,阅读专题下面的文章了解更多详细内容。

2026.01.05

466

22

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

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

2023.11.02

4289

19

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

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

2023.11.14

3795

11

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

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

2024.04.02

6872

6

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

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

2024.04.07

623

6

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

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

2024.04.07

736

6

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
R 教程
R 教程

共45课时 | 15.4万人学习