案例 Redis 8.4 Atomic Slot Migration:把 Slot 迁移从「逐 Key 搬迁」改成整槽复制 + 原子交接

2026-09-29 21:03:00

Redis 8.4 Atomic Slot Migration:把 Slot 迁移从「逐 Key 搬迁」改成整槽复制 + 原子交接

Redis Cluster 用 16384 个 hash slot 分配数据,每个节点负责其中若干 slot。扩缩容、热点再均衡,最后都落到迁 slot 上。Redis 8.4 引入的 ASM(Atomic Slot Migration)改的是这一步的执行语义,配套新增 CLUSTER MIGRATION 命令族,把迁槽变成可发起、可查询、可取消的标准运维动作。

旧路径:IMPORTING / MIGRATING + GETKEYSINSLOT + MIGRATE

传统做法是「逐 Key 搬迁、边迁边切」:

  1. 目标节点把某个 slot 标记为 IMPORTING
  2. 源节点把该 slot 标记为 MIGRATING
  3. CLUSTER GETKEYSINSLOT 分批取出该 slot 下的 Key
  4. 用 MIGRATE 一批批迁到目标节点
  5. 重复直到搬空
  6. 最后切换 slot 所有权

问题在于迁移期间同一个 slot 长期处于「部分 Key 已迁、部分 Key 未迁」的中间态,并且这个中间态直接暴露给客户端:

  • 客户端要处理迁移重定向(ASK / TRYAGAIN),请求链路变长、往返增加、延迟不稳定
  • 多 Key 操作在迁移期间可能临时不可用
  • 迁移失败(目标内存不足、MIGRATE 超时、网络抖动)会留下半完成状态,需要人工排查
  • 逐 Key 迁移有大量 per-key overhead
  • 大 Key 迁移容易制造尾延迟尖峰

ASM 改了什么

ASM 把执行语义换成「先把整个 Slot 的数据复制到目标节点,再在一个极短的窗口内完成所有权切换」,不再长期暴露中间态。新增的 CLUSTER MIGRATION 命令族,把 slot 迁移抽象成标准化的集群运维动作:可发起、可查询状态、可取消。

七步流程

  1. 目标节点发起迁移请求
  2. 目标节点建立迁移任务与专用复制连接
  3. 源节点开始发送 Slot 快照(对大对象自动切换到类似 AOF chunk 的分段传输)
  4. 目标节点一边应用快照,一边追平增量写入(先尽量追平,而不是边迁边切)
  5. 进入极短暂停写窗口,完成 Atomic Handoff 原子交接(停写相关 slot、同步最后增量、通知接管)
  6. 目标节点正式接管 Slot 所有权
  7. 源节点后台清理旧数据

CLUSTER MIGRATION 命令族

CLUSTER MIGRATION ...          # 发起
(查询迁移状态)                 # 任务化、可观测
CLUSTER MIGRATION CANCEL   # 取消

大 Key 与旧数据清理

大 Key 不整块搬运:第 3 步里源节点对这类对象自动切换到类似 AOF chunk 的分段传输,避免单个大对象造成延迟尖峰。

第 7 步的旧数据清理尽量走异步;但有两种情况会回退到主线程 cron loop 做增量清理:

  • 模块不支持 per-slot 数据结构
  • 开启了 CLIENT TRACKING

效果

  • 迁移速度相比传统方式最高可提升约 30 倍
  • 客户端重定向几乎可以忽略
  • 更平滑:改善的是尾延迟,不只是平均值

Valkey 9.0 的同类能力

Valkey 9.0(2025-10 GA)也引入了 Atomic Slot Migration:不再是 key-by-key,而是整 slot 一次迁移,用 AOF 格式原子移动;可以发送集合里的单个元素而不是整个 key,从而避免大集合在迁移时造成延迟尖峰。move-then-delete 针对整个 slot,原节点在整 slot 迁移完成前保留所有数据,避免旧版的重定向或重试问题。

Valkey Module 必须显式 opt-in 支持 ASM,否则加载了不支持 ASM 的模块的集群会禁用该特性。

项目信息

  • Redis 8.4 Atomic Slot Migration:https://www.itbigtec.com/redis-8-4-atomic-slot-migration-part1/
  • Valkey 9.0 发布说明:https://valkey.io/blog/introducing-valkey-9/
复制全文 生成海报 Redis 运维 RedisCluster 槽迁移 数据库 Valkey

推荐文章

程序员茄子在线接单