首页/数据/Redis 进阶速查/redis-cli --cluster rebalance 均衡槽

redis-cli --cluster rebalance 均衡槽

rebalance 按各节点槽数与权重自动计算并迁移,使槽分布接近均衡;--cluster-use-empty-masters 让空主节点也参与分配。

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

rebalance 在做什么

redis-cli --cluster rebalance 是官方集群管理工具的子命令,它读取每个主节点的槽数量与权重,算出目标分布,再把超载节点上的槽迁移到欠载节点,使槽分布接近均衡。它内部通过 CLUSTER SETSLOT 与 MIGRATE 完成迁移,过程中集群仍可访问,只是被迁移的键在瞬间会返回 ASK 或 MOVED 重定向。默认是交互式确认,写进自动化脚本必须加 --cluster-yes。

基本信息

命令格式redis-cli --cluster rebalance <任一节点地址:端口>
容量权重--cluster-weight <node-id=权重>,可重复多次
模拟模式--cluster-simulate 只计算迁移方案不执行
空主节点默认跳过,加 --cluster-use-empty-masters 才参与分配
前提条件cluster_state 为 ok,各节点与集群总线端口互通

典型使用场景

  • 扩容加入新主节点后,把槽迁给新节点让它分担流量
  • 各主节点机器配置不同,用权重把更多槽分给规格更高的机器
  • 前任运维手工调过槽导致分布倾斜,用均衡命令收敛回接近平均
  • 变更前先跑模拟模式评估要迁移多少槽、预计耗时多久
  • 缩容前先把待下线节点的槽匀给其余节点,再执行删节点

操作示例

操作示例
redis-cli --cluster check 10.0.0.11:7000                    # 先看当前槽分布与节点数
redis-cli --cluster rebalance 10.0.0.11:7000 --cluster-simulate        # 只算方案不落地
redis-cli --cluster rebalance 10.0.0.11:7000 --cluster-use-empty-masters  # 空主节点共同分担
redis-cli --cluster rebalance 10.0.0.11:7000 --cluster-weight <id_a>=2 --cluster-weight <id_b>=1
redis-cli --cluster check 10.0.0.11:7000                    # 迁移后复核

均衡前后看什么

检查项命令正常表现
槽总数CLUSTER INFO16384 个槽全部有归属,无无主槽
各节点槽数--cluster check接近 16384 除以主节点数,偏差在可接受范围
迁移规模--cluster-simulate输出待迁移槽数与方向,先估窗口再执行
迁移时长迁移日志与键数量和带宽相关,大键会显著拉长单次迁移
权重是相对值而非百分比:两台机器给 2 和 1,最终槽数大致成二比一,实际结果还受迁移取整影响。
均衡期间客户端必须能处理 ASK 与 MOVED 重定向,否则被迁移的键会短暂报错;官方客户端默认支持,手写协议实现要注意。

易错点

  • 各节点机器容量差异大却直接均衡,会把槽与数据量压到小规格机器上,反而制造新的瓶颈
  • 在业务高峰执行迁移,MIGRATE 占用带宽与 CPU 让延迟明显抬高,应安排在低峰窗口
  • 把槽数均衡等同于负载均衡:大键或热点键集中的分片数据量可能远高于其他分片
  • 迁移中途中断后没有重新 check 确认槽归属,留下部分槽状态不一致

数据来源与参考

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