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:源节点需要序列化并发送数据,目标节点需要写入,两端同时承压。多个迁移任务并发执行会把影响放大,应逐个执行并在低峰期进行,同时监控两端的资源与复制延迟。