首页/数据/Redis 进阶速查/redis-cli --cluster reshard 迁移槽

redis-cli --cluster reshard 迁移槽

reshard 是槽迁移的自动化入口:交互式输入目标槽数与目标节点(或 --from/--to 指定),工具会完成逐键迁移与状态广播。

Redis 进阶速查数据更新于 2026-10-13

cluster reshard 是什么

cluster reshard 是官方的槽迁移工具,用来把一部分槽连同槽里的数据从一个节点搬到另一个节点,从而完成扩容或负载再平衡。它支持交互式输入目标槽数与来源、目标节点,也支持用命令行参数一次性指定,适合写进自动化脚本。迁移过程中工具会逐个迁移键并自动把槽状态广播出去,客户端只会在迁移窗口内看到短暂的重定向。

基本信息

交互模式redis-cli --cluster reshard <任一节点>:<port>
批处理模式--cluster-from <id> --cluster-to <id> --cluster-slots <n> --cluster-yes
前提来源节点持有目标槽,目标节点已在集群中且为空闲状态
收尾动作工具自动执行槽归属广播,无需手工干预
伴随现象迁移中的槽对客户端返回 ASK 临时重定向

典型使用场景

  • 在线扩容:新节点加入后从各老节点各迁一部分槽,使数据与负载重新分布
  • 负载再平衡:某些节点内存或 CPU 明显偏高,把其部分槽移到空闲节点
  • 缩容前腾挪:准备下线某节点时先把它的槽全部迁走,确认无槽后再移除节点
  • 故障后修复:节点数据不可恢复时,把其槽重新分配给其他节点并补数据
  • 演练与验收:在小集群上练习迁移流程,确认客户端对 ASK 的处理正确

迁移槽

迁移槽
redis-cli --cluster check 10.0.0.11:7000        # 迁移前记录基线槽分布
redis-cli --cluster reshard 10.0.0.11:7000 \
  --cluster-from <源节点id> --cluster-to <目标节点id> \
  --cluster-slots 1000 --cluster-yes
redis-cli --cluster check 10.0.0.11:7000        # 迁移后核对槽分布
redis-cli -c -p 7000 CLUSTER COUNTKEYSINSLOT 1234   # 该槽剩余键数量
redis-cli -p 7000 CLUSTER INFO | grep cluster_state # 期望保持 ok

迁移期间的观察点

观察项正常表现异常信号
cluster_state始终保持 ok变为 fail 说明槽出现空洞
ASK 返回迁移窗口内偶发长时间持续说明迁移未收敛
键数量按槽逐个减少到零长期不为零说明卡在某个大 key
客户端重定向自动跟随,业务无感客户端不支持重定向则大量报错
内存与带宽迁移期间短时上升多个迁移任务并发导致明显抖动
迁移是按槽推进的:工具依次迁移指定数量的槽,每个槽内的键逐个搬走后把槽标记为归属于目标节点。因此大 key 会显著拉长单个槽的迁移时间,容量规划时应先治理超大键,或在迁移前把它们拆分。
在线迁移会占用带宽与 CPU:源节点需要序列化并发送数据,目标节点需要写入,两端同时承压。多个迁移任务并发执行会把影响放大,应逐个执行并在低峰期进行,同时监控两端的资源与复制延迟。

易错点

  • 迁移前不记录基线,迁移后无法判断槽分布是否与计划一致,也难发现中途中断留下的槽空洞
  • 多个迁移任务并发执行,带宽与 CPU 同时被挤占,业务请求出现明显抖动
  • 客户端不支持 ASK 重定向,迁移期间大量请求失败,看起来像服务端故障
  • 迁移途中中断且无人收尾,部分槽处于中间状态,长时间出现 ASK 且分布与预期不符

数据来源与参考

  • Redis 官方文档:cluster reshard 工具说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌