Redis Sentinel 选举机制详解(Master选举+Leader选举)

ps:如果这篇帖子对于还在找工作和找实习的你有所帮助,可以关注我,给本贴点赞、评论、收藏并订阅专栏;同时不要吝啬您的花花

Sentinel 是 Redis 高可用架构的核心组件,内置两套独立且联动的选举机制:Leader 选举(Sentinel 集群内部决策节点选举)Master 选举(故障后主节点选举)。两者分工明确:Leader 选举解决“谁来执行故障转移”,避免集群并发操作混乱;Master 选举解决“选哪个 Slave 当新主”,保证数据完整性和集群可用性。

一、Sentinel Leader 选举机制(集群决策者选举)

1. 核心定位与触发时机

Leader 选举是 Sentinel 集群内部的分布式共识选举,基于类 Raft 算法实现,仅当 Master 被判定为客观下线(ODown)时触发。目标是选出唯一的 Sentinel Leader,由其全权执行后续故障转移、新主推送、从节点重配置等操作,杜绝多 Sentinel 同时操作导致的脑裂问题。

2. 完整选举流程

  1. 发起竞选:首个判定 Master 客观下线的 Sentinel,自动成为候选者,生成当前故障转移的epoch(任期/纪元),向集群内其他 Sentinel 发送投票请求,申请成为 Leader。
  2. 投票规则:每个 Sentinel 在同一 epoch 内只能投一票,遵循“先到先得”原则;未投票的 Sentinel 收到请求后,若认可候选者的客观下线判定,直接投赞成票。
  3. Leader 胜出条件:候选者获得超过半数 Sentinel 节点的选票(公式:floor(N/2)+1,N 为在线 Sentinel 总数),立即成为 Leader,独占故障转移权限。
  4. 选举超时与重试:若首轮选举无节点达标,会触发新一轮 epoch 重新竞选,直至选出 Leader;选举过程快速高效,通常毫秒级完成。

3. 关键特性

  • 一纪元一票:同一故障转移任务(同一 epoch)内,投票不可逆,杜绝重复投票。
  • 多数票原则:必须获得集群半数以上认可,保证决策权威性,避免分区决策。
  • 先到优先:最早发现客观下线、最早发起投票的 Sentinel,胜出概率极高。

Leader 是临时角色,仅负责当前故障转移任务;下次 Master 故障时,会重新选举新 Leader,无固定 Leader 节点。

二、Sentinel Master 选举机制(新主节点选举)

1. 核心定位与前置条件

Master 选举由 Sentinel Leader 执行,仅在 Leader 当选后启动,核心是从存活 Slave 中筛选最优节点升级为新 Master,筛选逻辑严格遵循“优先级+数据完整性+唯一性”原则,最大限度减少数据丢失。

前置筛选:先剔除不合格 Slave 节点主观下线、与 Master 断开过久(超过 down-after-milliseconds 10 倍)的节点复制异常、无有效同步数据的节点手动标记为不可参与选举的节点

2. 多层级选举排序规则(优先级从高到低)

第一层:Slave 优先级(slave-priority)

这是人工可干预的核心指标,配置值越小优先级越高(默认 100)。运维可通过调整该参数,指定硬件更好、位置更优的节点优先成为 Master。若存在优先级更低的节点,直接跳过更高优先级节点,进入下一层筛选。

第二层:复制偏移量(replication_offset)

优先级相同时,对比 Slave 与原 Master 的复制偏移量,偏移量越大表示数据越新,优先当选。偏移量是 Redis 复制的核心标识,代表 Slave 已同步的字节数,最大限度保证故障转移后数据丢失最少。

第三层:节点运行 ID(runid)

若优先级和偏移量完全一致,对比 Slave 的唯一运行 ID,runid 字典序更小的节点胜出。这是兜底规则,保证选举结果唯一,无平局情况。

3. 新主确认与集群重构

  1. Leader 选中最优 Slave 后,发送 SLAVEOF NO ONE 命令,将其升级为独立 Master。
  2. 向其余 Slave 推送新主地址,执行 SLAVEOF 命令同步新 Master 数据。
  3. 更新集群配置,标记旧 Master 为下线状态;若旧 Master 恢复,自动降级为 Slave 同步新主。

三、两大选举机制核心对比

选举主体

Sentinel 集群内部节点

Redis Slave 节点

核心目标

选出唯一故障转移执行者

选出数据最新、最优的新主

触发时机

Master 客观下线后

Leader 选举完成后

底层算法

类 Raft 分布式共识算法

多层级加权排序算法

胜出规则

集群半数以上投票

优先级→偏移量→runid

角色生命周期

临时角色,单次故障转移有效

长期角色,直至下次故障

Sentinel 集群建议部署奇数个节点(3/5/7),既满足 Leader 选举的多数票原则,又能避免脑裂,提升高可用稳定性。

ps:如果这篇帖子对于还在找工作和找实习的你有所帮助,可以关注我,给本贴点赞、评论、收藏并订阅专栏;同时不要吝啬您的花花

Redis集群 文章被收录于专栏

本专栏聚焦 Redis Cluster 官方分布式方案,拆解去中心化架构、16384 哈希槽分片、Gossip 协议通信、主从复制与自动故障转移核心原理。从集群搭建、扩缩容实战,到生产环境性能调优、故障排查、高可用设计,覆盖原理剖析、实操步骤、面试高频考点与最佳实践,助力开发者突破单机瓶颈,构建支撑海量数据与高并发的分布式缓存体系,适配电商、社交等业务场景。

全部评论

相关推荐

03-21 13:42
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
8962次浏览 81人参与
# 你的实习产出是真实的还是包装的? #
1659次浏览 40人参与
# 巨人网络春招 #
11296次浏览 223人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7369次浏览 40人参与
# 重来一次,我还会选择这个专业吗 #
433288次浏览 3926人参与
# 简历第一个项目做什么 #
31490次浏览 327人参与
# 米连集团26产品管培生项目 #
5585次浏览 214人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
186866次浏览 1118人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152264次浏览 887人参与
# 研究所笔面经互助 #
118842次浏览 577人参与
# 简历中的项目经历要怎么写? #
309933次浏览 4188人参与
# 面试紧张时你会有什么表现? #
30470次浏览 188人参与
# 你今年的平均薪资是多少? #
212976次浏览 1039人参与
# AI时代,哪些岗位最容易被淘汰 #
63285次浏览 797人参与
# 我的求职精神状态 #
447957次浏览 3128人参与
# 你最满意的offer薪资是哪家公司? #
76409次浏览 374人参与
# 高学历就一定能找到好工作吗? #
64291次浏览 620人参与
# 牛客AI文生图 #
21398次浏览 238人参与
# 你怎么看待AI面试 #
179777次浏览 1229人参与
# 正在春招的你,也参与了去年秋招吗? #
363169次浏览 2635人参与
# 腾讯音乐求职进展汇总 #
160552次浏览 1109人参与
# 职能管理面试记录 #
10795次浏览 59人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务