Redis 哨兵(Sentinel)原理

在 Redis 高可用架构中,哨兵(Sentinel) 扮演着至关重要的角色。它不仅能自动监控主从节点状态,还能在主节点故障时完成自动切换,保障服务持续可用。本文将系统梳理 Sentinel 的核心机制。

一、哨兵的作用

Redis Sentinel 主要提供以下三大能力:

  • 状态监控:持续检查 master/slave 健康状态
  • 自动故障转移:master 宕机时,自动选举新 master 并重配置集群
  • 服务发现:客户端可通过哨兵查询当前 master 地址

💡 注意:Sentinel 不负责数据存储,仅用于管理与协调。


二、状态监控与故障判定

Sentinel 是怎么知道 Redis 节点宕机的?

Sentinel 通过一套严谨的心跳 + 投票机制判断节点是否真正失效:

  1. 心跳检测

    默认每 1 秒向所有 Redis 节点发送 PING 命令。若在 down-after-milliseconds(默认 30 秒)内未收到有效响应,则该哨兵将节点标记为 主观下线(SDOWN)。

  2. 主观下线(SDOWN)

    单个哨兵认为节点不可用,但不足以触发故障转移。

  3. 客观下线(ODOWN)

    当 ≥ quorum 个哨兵 都报告 SDOWN 时,Sentinel 集群将该 master 标记为 客观下线(ODOWN),正式进入故障恢复流程。

✅ 关键提示 :
quorum 仅用于判定 ODOWN,Leader 选举仍需获得多数派支持(> N/2) 。例如 3 个哨兵,quorum=2 可触发 ODOWN,但选 Leader 仍需至少 2 票。


三、故障恢复:选举新主

一旦 master 被标记为 ODOWN,Sentinel 就会在 slave 中选举新的主节点。

选主前过滤

并非所有 slave 都有资格参选,首先排除以下两类:

  • replica-priority = 0 的 slave(明确禁止晋升)
  • 与原 master 断连时间过长的 slave(数据太旧,可能丢失大量写入)

选主标准(按优先级排序)

满足基本条件后,按以下顺序择优:

  1. replica-priority 越小越优(默认 100,0 表示不参选)
  2. 复制偏移量(offset)越大越优(代表数据最新)
  3. run_id 字典序越小越优(作为随机兜底,避免平票)

四、哨兵 Leader 选举

故障转移操作只能由一个哨兵执行,因此需要先选出 Leader。

成为 Leader 的条件

  • 获得 超过半数 哨兵的投票
  • 得票数 不少于 quorum

投票原则

  • 优先投票给当前得票最多的候选者
  • 若无人领先,则投给自己

⚠️ 常见误解:

"谁先发现 master 下线,谁就当 Leader" ------ 这是错误的!

实际采用类似 Raft 的共识机制,需经过一轮正式投票,不是"先到先得"。


五、状态通知与重配置

Leader 选出后,开始执行故障转移的重配置流程:

  1. 向新 master 发送命令:

    Redis 4.0 及以下 SLAVEOF no one

    Redis 5.0 及以上 REPLICAOF no one

  2. 向其他 slave 发送命令:

    Redis 4.0 及以下 SLAVEOF<new_master_ip> <port>

    Redis 5.0 及以上 REPLICAOF <new_master_ip> <port>

  3. 原 master 重启后 :

    Sentinel 会主动连接它,并发送 REPLICAOF <new_master>,将其降级为 slave。

    🔒 重要 :不会修改其 redis.conf 配置文件,角色切换完全通过运行时指令完成。

  4. 通知客户端:

    • 通过 Pub/Sub 发布 +switch-master 事件

    • 客户端可调用 API 查询:

      bash 复制代码
      SENTINEL get-master-addr-by-name mymaster

六、最佳实践建议

为确保 Sentinel 稳定可靠,推荐遵循以下原则:

  • 部署 ≥ 3 个哨兵(奇数),避免脑裂
  • 合理设置 down-after-milliseconds(如 10s~30s)和 quorum
  • 客户端必须通过 Sentinel 获取 master 地址,禁止直连 Redis 节点
  • 监控哨兵日志,关注 +switch-master、+sdown 等关键事件

✅ 总结 :

Redis Sentinel 通过"监控 → 判定 → 选举 → 通知"四步闭环,实现了 Redis 主从架构的自动高可用。理解其原理,是构建稳定缓存系统的基石。


作者:不会写程序的未来程序员

首发于 CSDN 欢迎点赞、收藏、评论交流!

版权声明:本文为原创文章,转载请注明出处。

相关推荐
这个DBA有点耶3 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G3 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备3 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远3 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
IT大白鼠3 天前
Redis 系列 · 第 01 篇——认知入门:Redis 是什么
redis·nosql
彧azz3 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
2601_962218613 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
张洛闻Eren3 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
于平安3 天前
MySQL-触发器
数据库·mysql
白远山3 天前
上海24小时自助健身房解决方案实战指南与经验分享
java·数据库·架构·需求分析