高可用底座:Redis 哨兵机制(Sentinel)底层内核拆解

Redis 哨兵(Sentinel)底层实现原理的课程笔记进行了重新梳理、排版与精简,形成了一篇结构清晰、重点突出的技术文章。


彻底搞透 Redis 哨兵底层实现原理

本篇笔记将从核心问题、功能作用、底层监控、故障转移与恢复四个维度,带你彻底搞懂 Redis 哨兵模式的底层实现机制。


一、 Redis 哨兵模式概述

1. 解决什么问题?

Redis 哨兵是一个独立运行的进程,用于监控多个主从(Master-Slave)集群。其核心目的是实现自动化监控与故障切换,当 Master 节点宕机时,能够自动将 Slave 节点提升为新的 Master 节点。

2. 核心功能

  • 监控(Monitoring):负责持续监控 Redis Master 和 Slave 进程是否正常工作。
  • 通知(Notification):当 Redis 实例发生故障时,发送报警通知给管理员。
  • 自动故障转移(Automatic Failover):如果 Master 节点挂掉,自动将其转移到 Slave 节点上。
  • 配置提供者(Configuration Provider):当故障转移发生时,通知客户端更新新的 Master 地址。

通俗理解(武当派比喻)

Redis 主从架构好比武当派,掌门人就是 Master 。掌门如果挂了,需要从武当七侠(Slave)中选举新掌门。这就需要一个"哨兵部门"来监控生死、通过投票选举能者,最后召开新闻发布会向世界宣布新掌门信息。


二、 Redis 哨兵监控的底层实现

1. 监控实现机制

哨兵通过 PING 命令定时检测 Master 和 Slave 的生命状态。

  • 10 秒 向主节点和从节点发送 INFO 命令,用于获取最新的主从拓扑关系。

2. 询问消息与发布订阅

  • 实现原理 :利用 Sentinel 内置的 Pub/Sub(发布订阅) 机制来实现。
  • 解决问题:发现新的 Sentinel 节点,并与其他哨兵节点交换 Master 的状态信息。
  • Publish:发布自身掌握的节点状态信息。
  • Subscribe:接受其他哨兵节点广播的信息。

三、 Redis 故障转移与下线机制

1. 主观下线(Subjective Down, SDown)

  • 检测方式 :哨兵利用 PING 命令检测 Master/Slave 状态。若收到无效回复,则标记为主观下线(flags=SRI_S_DOWN)。
  • 配置文件参考
text 复制代码
sentinel down-after-milliseconds mymaster 30000
  • 为什么需要集群?
    单个哨兵容易受到自身网络拥塞或主库高负载的影响而产生误判。因此,引入多个哨兵实例组成集群,通过多方决策来降低误判率。

2. 客观下线(Objective Down, ODown)

  • 实现原理 :当某个哨兵判定主观下线后,会向其他哨兵节点发送询问请求:sentinel is-master-down-by-addr
  • 过半机制(Quorum):当达到指定数量的哨兵都认为 Master 已经下线时,才会最终判定 Master 为「客观下线」,进而触发故障转移流程。
  • 法定数量配置示例
text 复制代码
sentinel monitor mymaster 127.0.0.1 6379 2
  • sentinel monitor:代表监控指令。
  • mymaster:主节点自定义名称。
  • 127.0.0.1 6379:主节点的 IP 与端口。
  • 2:法定数量(Quorum)。代表至少需要 2 个 哨兵实例认为主节点不可用,才会触发 failover 操作。
  • 标准公式 :当有 NNN 个哨兵实例时,必须有 N2+1\frac{N}{2} + 12N+1 个实例判断为主观下线,才能最终判定为客观下线。

四、 故障恢复流程与实现

1. 选举领头哨兵

当 Master 被判定为客观下线后,哨兵集群需要选出一个"领头哨兵"来全权负责故障转移工作,这个过程采用 Raft 算法实现领导者选举。

2. 故障转移核心步骤

领头哨兵被选出后,将按以下步骤完成主从切换:

  1. 选举出新的 Slave 节点

    • 过滤掉掉线、响应慢的节点。
    • 选择从节点优先级最高slave-priority)的节点。
    • 若优先级相同,选择复制偏移量最大(数据最完整)的节点。
    • 若仍相同,选择 Run ID 最小的节点。
  2. 升级 Slave :通过 SLAVEOF NO ONE 命令将选中的 Slave 升级为主节点。

  3. 构建新集群结构:让其余的 Slave 节点去复制新的 Master 节点,并通知客户端更新连接地址。

相关推荐
肠畔码农1 小时前
深度解密 Redis 分布式锁:从单机原子语义到集群架构博弈
redis·分布式·架构
ruleslol2 小时前
Sentinel限流
sentinel
宠友信息3 小时前
IM系统开发技术路线分析,即时通讯源码助力快速搭建聊天应用
java·spring boot·redis·websocket·mysql·uni-app·vue
肠畔码农3 小时前
Redis 主从复制内核深潜:从物理模型到全量增量同步的本质
网络·redis·php
小的~~6 小时前
面试被问分布式锁,我差点语塞…直到搞懂了Redis、ZooKeeper和etcd的“三国杀”
redis·分布式·面试
2602_959960927 小时前
Java大厂面试实录:Spring Boot、Redis、Kafka、Elasticsearch、分布式事务与云原生高并发系统
java·jvm·spring boot·redis·面试题
晚安code7 小时前
Redis 内存淘汰策略实战:什么时候淘汰、怎么选、怎么防缓存击穿
java·redis·缓存
Dovis(誓平步青云)9 小时前
从Redis指标采集到异常告警:redis_exporter + Prometheus 完整实战
服务器·数据库·人工智能·redis·架构·prometheus·vibe coding
阿里巴巴P8资深技术专家18 小时前
Redis连接工具 —— Redis Manager
redis