replica-priority

replica-priority

基本概念

replica-priority(旧称 slave-priority)是 Redis 中用于控制从节点晋升优先级的参数。当主节点发生故障时,哨兵或集群在多个从节点中选择谁来替换主节点,replica-priority最先考虑的因素

配置方式

# redis.conf
replica-priority 100  # 默认值 100,范围 0-100

值越小,优先级越高(越可能在选举中被选为新主节点)。

优先级规则

哨兵或集群在选择新主节点时,按照以下顺序筛选:

1. 剔除所有不可用的从节点SDOWN断连超时等
2.  replica-priority 升序排序值小的排前面
3. 同优先级时选复制偏移量最大的数据最新
4. 复制偏移量相同时 run_id 最小的字典序

不同值的含义

replica-priority = 0

设置为 0 的从节点永远不会被提升为主节点。适用于:

  • 专门用于跨机房灾备的从节点(不希望被提升为本地主节点)
  • 用于只读报表查询的从节点
  • 硬件配置较低的从节点(CPU/内存不足以支撑主节点负载)

replica-priority = 1-99

高优先级,值越小竞争新主节点的能力越强:

节点 A(replica-priority = 1)← 故障转移时优先被选为主节点
节点 B(replica-priority = 50)
节点 C(replica-priority = 100)

适用于:硬件配置更好的从节点应设为更小值。

replica-priority = 100

默认值,表示普通优先级。大多数从节点使用默认值即可。

实际应用场景

场景一:按硬件配置分配优先级

# 高性能服务器 → 优先晋升
replica-priority 10

# 中性能服务器
replica-priority 50

# 低性能服务器
replica-priority 100

场景二:跨机房主从

# 主数据中心
主节点 A(北京)
从节点 B(北京,priority=50)
从节点 C(上海,priority=0) ← 绝不晋升为主节点

场景三:只用作备份的节点

# 专门负责持久化备份的从节点
replica-priority 0

# 这种从节点只做数据备份,不参与故障转移

在哨兵架构中的角色

哨兵在故障转移时,选择新主节点的完整流程:

1. 在哨兵 leader 的视角中获取所有从节点列表
2. 剔除以下从节点
   - 标记为 SDOWN 
   - 断连时间过长的超过 down-after-milliseconds × 10
   - 最近没有回复 INFO 
3.  replica-priority 排序升序
4. 同优先级时 replication offset 排序降序数据最新的优先
5. 同偏移量时 run_id 排序字典序最小优先

在 Cluster 架构中的角色

Redis Cluster 的从节点晋升流程也使用 replica-priority

1. 集群节点检测到主节点 FAIL
2. 从节点检查自己是否有资格晋升replica-priority > 0
3. 计算晋升延迟时间 = (priority_rank × 1000ms) + random(500ms)
4. 延迟时间最短的从节点最先发起选举
5. 获得多数票的从节点晋升为新的主节点

常见配置策略

策略 配置 适用场景
默认策略 全部使用 100 节点硬件一致
差异化策略 按硬件配置设 1-100 混合配置集群
禁止晋升 特定从节点设 0 备份专用节点
抢占策略 特定从节点设 1 希望指定从节点优先晋升

与其他参数的关系

replica-priority 的选主权重低于集群故障转移的以下机制:

  • cluster-replica-validity-factor:如果从节点故障间隔时间超过限制,即使 priority 最低也不会被选择
  • min-replicas-to-writemin-replicas-max-lag:不影响选举,但影响新主节点的写入功能

面试要点

  • replica-priority越小优先级越高
  • replica-priority 0 表示该从节点永远不会成为主节点
  • 优先级仅在主节点宕机后的晋升选举中有效
  • 优先级相同则对比复制偏移量(数据最新的优先)
  • 常用于跨机房灾备节点的配置

总结

replica-priority 是 Redis 主从架构中控制故障转移策略的重要参数。通过合理设置不同从节点的优先级,运维人员可以控制故障转移时新主节点的选择偏向,让性能更好、网络延迟更低、更合适的从节点承担主节点角色。将不需要参与故障转移的节点设置为 priority=0,是推荐的最佳实践。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容