副本自动迁移的门槛
集群里若某个主节点没有任何健康副本,它的容错能力就是零;而有些主节点手上握着好几个副本。cluster-migration-barrier 规定一个主节点至少要保留几个健康副本,才允许把多余的副本让给那些「裸主」。默认值是 1,意思是让出副本之后源主至少还得剩一个健康副本。调大更保守,源主的容错水位更稳;调小则迁移更容易发生,源主在极端情况下可能被抽干副本。
基本信息
| 配置项 | cluster-migration-barrier |
|---|---|
| 默认值 | 1 |
| 语义 | 源主保留 N 个健康副本才可捐出副本 |
| 相关开关 | cluster-allow-replica-migration |
| 生效范围 | 各节点本地配置,全集群应保持一致 |
| 查看方式 | redis-cli -c CONFIG GET |
| 修改方式 | 改配置文件并重启,或 CONFIG SET 临时生效 |
典型使用场景
- 集群副本分布不均,想让副本自动流向无副本的主节点
- 评估把自动迁移关掉改由人工编排副本时的参数取舍
- 故障恢复后副本归属混乱,需要理解自动迁移的行为边界
- 容量巡检时解释「某主节点副本数为什么自己变了」
- 变更窗口内临时调小门槛加快副本再平衡,之后调回
- 排查副本迁移与手工 CLUSTER SETSLOT 操作互相干扰的问题
查看与调整
查看与调整
redis-cli -c CONFIG GET cluster-migration-barrier # 当前门槛
redis-cli -c CONFIG GET cluster-allow-replica-migration # 是否允许自动迁移
redis-cli -c CONFIG SET cluster-migration-barrier 2 # 临时生效,重启即失
redis-cli -c CLUSTER NODES | awk '{print $2,$3,$3}' # 看各节点角色分布
redis-cli -c CLUSTER INFO | grep -E 'cluster_slots_ok' # 槽位健康度
grep -n 'migration-barrier' /etc/redis/cluster.conf # 确认配置文件中的值取值影响对照
| 取值 | 迁移倾向 | 风险 |
|---|---|---|
| 0 附近 | 最积极 | 源主容错水位被过度消耗 |
| 1(默认) | 常规自动再平衡 | 大多数部署的平衡点 |
| 大于 1 | 保守,很少迁移 | 裸主可能长期得不到副本 |
副本迁移是集群自动行为,与人工 CLUSTER SETSLOT 的槽位迁移不是一回事:前者挪的是副本归属,后者挪的是槽与数据。
各节点配置不一致时,行为取决于迁移发起方所在节点的取值,容易出现「改了一台没效果」或「只改一台反而生效」的现象。
CONFIG SET 在本版本上只改运行期参数,配置文件仍是重启后的依据,生产变更应改配置文件。