首页/数据/数据库速查/Sentinel 哨兵架构与职责
Redis 运维与场景124 条

Sentinel 哨兵架构与职责

哨兵是独立进程集群:监控主从、判定故障(sdown/odown)、自动选举新主并通知客户端;至少 3 个节点才能容忍单点故障。

数据库速查数据更新于 2026-10-13

Sentinel 是什么

哨兵(Sentinel)是由若干独立进程组成的监控集群,默认端口 26379,自身不存数据也不代理流量。它的四件事:周期 PING 主从与其它哨兵做监控;把失联实例标记为主观下线 sdown,票数达到 quorum 后升级为客观下线 odown;由哨兵之间选出的 leader 执行故障转移,把从库提升为新主并让其它从库指向它;最后通过 Pub/Sub 与 +switch-master 事件通知客户端。

基本信息

默认端口26379
最小部署3 个哨兵(分属 3 台机器)+ 1 主 2 从
关键配置sentinel monitor / down-after-milliseconds / failover-timeout / parallel-syncs
判定机制quorum 决定能否判下线,过半哨兵同意才选出 leader
客户端要求必须支持哨兵协议:先问主地址,再连数据实例

典型使用场景

  • 主从架构的高可用:主库宕机后自动提升从库,减少人工介入时间
  • 读写分离场景:客户端从哨兵获取当前主库地址,避免写错实例
  • 机房单点容忍:三个哨兵分散部署,避免与数据节点同机失效
  • 故障演练:用 debug sleep 或停进程模拟主库失联,验证切换耗时
  • 切换可观测:订阅 +switch-master 事件送进告警,掌握每次主库变更
  • 客户端配置中心:业务不再硬编码主库地址,改由哨兵提供

最小部署形态

最小部署形态
# 3 个哨兵(分属 3 台机器)+ 1 主 2 从
# 每台哨兵启动:
redis-sentinel /etc/redis/sentinel.conf --sentinel
ss -tlnp | grep 26379                     # 确认哨兵端口在监听
redis-cli -p 26379 SENTINEL masters      # 查看被监控的主库与状态
redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster  # 客户端取主地址的方式
# sentinel.conf 关键项:
# sentinel monitor mymaster 10.0.0.11 6379 2
# sentinel down-after-milliseconds mymaster 30000
# sentinel failover-timeout mymaster 180000
# sentinel parallel-syncs mymaster 1

状态与事件读法

状态/事件含义关注点
sdown单个哨兵认为实例不可达可能是网络抖动,尚未触发切换
odown达到 quorum 后确认客观下线此时才进入故障转移流程
+switch-master完成切换的主库地址变更事件客户端订阅后应能及时刷新连接
+failover-state-*切换过程各阶段事件停留在某阶段过久说明切换受阻
哨兵自身不做数据读写也不代理流量:客户端必须支持哨兵协议(先问主地址再连),或使用支持 sentinel 的连接池。
quorum 只决定够不够票判下线,真正执行切换的 leader 还需要多数哨兵同意,所以部署 2 个哨兵没有意义:一台故障就凑不齐多数,切换无法完成。

易错点

  • 只部署 1 到 2 个哨兵:无法形成多数票,主库真故障时不会切换
  • 哨兵与主库部署在同一台机器,主机宕机时监控与切换一起消失
  • 客户端不支持哨兵协议、仍硬编码主地址,切换后写入失败直到人工改配置
  • 把 down-after-milliseconds 设得过小,网络抖动就触发无谓切换,造成数据反复同步
  • 集群里存在未受监控的从库或残留旧实例,切换后被提升的节点其实是过期数据

数据来源与参考

  • Redis 官方文档: High availability with Redis Sentinel

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌