Redis 哨兵模式:它到底是怎么保证高可用的

主从复制有个绕不开的短板:

它撑不起 Redis 的高可用。

主节点一旦宕机,整个集群就失去了写入能力。

哨兵模式就是为解决这个问题而生的,它能让主从集群自动完成故障恢复。

哨兵到底是什么

哨兵节点本质也是 Redis 实例,一般由多台组成集群,生产上至少部署 3 个。

它干三件事。

第一是监控,持续探活主从节点,确认它们都在正常工作。

第二是自动故障恢复,主节点挂了,哨兵会挑一个从节点顶上去继续服务;从节点挂了,它会自动剔除。

第三是通知,客户端通过 Sentinel 获取当前主节点地址,主节点切换后能够自动发现新的 Master。

这三件事合起来,就是 Redis 主从高可用的底气。

哨兵是怎么盯哨的

哨兵靠心跳机制判断服务生死,默认每 1 秒向集群每个实例发一次 PING。

收到 PONG 就说明实例活着。

如果某个实例在限定时间内没回 PONG,这台哨兵就单方面判定它"主观下线"。

注意,主观下线只是这一台哨兵自己的判断。

要确认节点真挂了,还得其他哨兵一起投票。

当认为它下线的哨兵数量达到 quorum 阈值,才会被标记为"客观下线"。

这个 quorum 值在 redis.conf 里配,quorum 通常配置为能够形成多数判断的数量,例如 3 个 Sentinel 时通常设置为 2。

主节点挂了,哨兵怎么选新主

首先会过滤掉长时间断开的从节点,然后按照优先级、复制偏移量、run id 依次选择。

第一条看断连时长。从节点跟主节点断开太久,直接失去候选资格,因为断得越久丢的数据越多。这个时长在配置文件里设。

第二条比优先级,配置项值越小优先级越高,优先被选。优先级同样可配。

第三条比 offset。优先级相同就看复制偏移量,offset 越大说明数据越接近原主节点,越先被选中。

第四条基本轮不到,前面都相同时才按 run id 随便挑一个。

四条里最关键的其实是第三条:offset 越大,数据越全,越优先上位。

不过哨兵模式也不是万能,它有个经典坑叫"脑裂",也是面试的高频题。

脑裂:一个大脑裂成两个

看一个正常的主从加哨兵架构。

假如主节点和哨兵被网络切到了不同分区,哨兵连不上主节点,只能看到从节点。

按选主规则,哨兵会从从节点里提拔一个新主。

但老主节点其实没挂,只是网络断了,客户端还连着它。

于是集群里同时出现了两个 master,像大脑分裂了一样,这就是脑裂。

问题来了:

客户端还在往老主写数据,新主因为网络不通根本同步不到。

等网络恢复,哨兵把老主强制降级成从节点,老主要从新主全量同步,本地数据被清空。

脑裂期间客户端写进老主的数据,就这么丢了。

脑裂怎么治

两个配置就能大幅止血。

第一,设 min-replicas-to-write 至少为 1。

意思是主节点要接收写请求,必须至少有 1 个从节点在线。

连不上从节点,主节点直接拒绝写入。

第二,设置 min-replicas-max-lag,限制从节点 ACK 延迟时间。

两个条件任一不满足,主节点就拒绝客户端写请求。

这样即使发生脑裂,也能拦住大量数据写进孤岛,避免恢复后清空丢失。

面试实战:三连问

问:怎么保证 Redis 的高可用?

答案就是哨兵模式,它让主从集群能自动故障恢复,包含三个作用。

监控,盯住每个实例是否健康。

自动故障恢复,主节点挂了按选主规则提拔从节点顶上。

通知,哨兵主动告诉客户端该连哪个 Redis。

问:你们 Redis 是单点还是集群?用的哪种集群?

参考答法:

主从通常一主一从加哨兵就够。

单节点内存控制在 10G 以内。

Redis 是缓存,不该把海量数据硬塞进去,只放热点数据,一般项目 10G 足够。

一主一从能扛住多数项目的高并发和高可用:

主节点负责写,从节点负责读,Redis 单节点通常可以支撑数万到十万级 QPS,具体性能取决于硬件和业务模型,多数业务根本触不到这个上限。

数据量特别大时,就按业务拆多套主从,比如订单服务一套、秒杀服务一套,多套集群并行解决容量问题。

问:Redis 集群脑裂怎么解决?

先讲清脑裂:

主从和哨兵处在不同网络分区,哨兵收不到主节点心跳,就把一个从节点提成了主节点,出现两个 master。

客户端还在老主写数据,新主同步不到。

网络恢复后老主降级成从节点,从新主同步数据,导致老主在脑裂期间写入的数据大量丢失。

解决靠改两个配置:

设最小从节点数,缩短主从同步延迟上限。

不达标就直接拒绝客户端写请求,从而避免大量数据丢失。

相关推荐
敲个大西瓜2 小时前
Springboot核心面试题
java·spring boot·后端
运维行者_3 小时前
网络监控与ITSM集成:从告警到工单,实现运维自动化闭环
开发语言·网络·分布式·后端·架构·flask·php
子兮曰3 小时前
解剖 Claude Code:从入口架构逆向工程看 AI 编程工具的信任边界设计
前端·后端·claude
颜进强3 小时前
前端看后端 15:什么是 DNS?
前端·后端·ai编程
文艺理科生3 小时前
LangChain.js-v1-记忆管理最佳实践
前端·javascript·后端
子兮曰3 小时前
Elysia vs Hono 完整性能对比:Bun 专属优化还是跨平台通用,2026 实测数据给出的答案
前端·后端·typescript
小满zs4 小时前
Go语言第七章(Map)
后端·go
Undoom4 小时前
我用豆包Seed-Evolving搞了个高中物理可视化工具,结果被自己的高中物理水平整破防了
后端
木叶丸4 小时前
从 Loop 到 Graph:AI 智能体协作系统工程指南
前端·后端·架构