Skip to content
Redis 可用性与热点治理细节 · 第 1 篇 / 共 4 篇
领域数据与中间件
专题Redis 专题
当前序列Redis 可用性与热点治理细节
阅读位置第 1 篇 / 共 4 篇当前专题第 5 个序列 / 共 7 个序列

Redis Sentinel 和主从故障切换怎么理解 ​

很多团队第一次做 Redis 高可用时,往往会把 Sentinel 理解成一句话:

“主挂了,自动切从。”

这句话不算错,但太粗了。真正线上容易出问题的是下面这些细节:

  • 谁来判断主节点真的挂了
  • 多个 Sentinel 怎么达成一致
  • 切主之后客户端怎么感知新主
  • 为什么切换成功了,业务还在报错

先说结论 ​

  • Sentinel 解决的是 Redis 主从架构里的故障发现、选主和配置通知问题
  • 它不是数据强一致方案,也不是分片方案
  • 故障切换成功,不等于业务无感;客户端路由、复制延迟、旧主回归都要处理
  • 如果数据量大、写流量高、节点很多,仅靠 Sentinel 不一定够,可能要评估 Redis Cluster

Sentinel 到底干什么 ​

Sentinel 主要做三件事:

  1. 监控: 周期性检查主从实例是否健康
  2. 通知: 发现异常时发出告警和事件
  3. 自动故障转移: 主节点判定不可用时,选举新主并通知客户端

所以它是“高可用控制面”,不是“数据面”。

主从故障切换的基本角色 ​

一套典型架构里会有:

  • 1 个 master
  • 多个 replica
  • 3 个或以上 Sentinel

为什么 Sentinel 通常要奇数个?

因为涉及主观下线、客观下线、leader 选举和 failover 仲裁,多数派能减少脑裂误判。

主观下线和客观下线怎么理解 ​

主观下线 ​

单个 Sentinel 在一定时间内没有收到目标实例响应,就会认为它“疑似下线”。

这个判断是单点视角,因此叫主观下线。

客观下线 ​

当足够多的 Sentinel 都认为主节点失联,达到配置的 quorum,才会进入客观下线。

只有到这个阶段,才可能触发真正的故障转移。

这一步的意义是防止单台 Sentinel 网络抖动导致误切主。

故障转移大致怎么发生 ​

当 master 被判定为客观下线后,大致流程是:

  1. Sentinel 集群选出一个 leader Sentinel
  2. leader 从可用副本中挑选新的 master
  3. 向被选中的 replica 发送 SLAVEOF NO ONE
  4. 其他 replica 重新复制新 master
  5. 通过发布订阅和配置更新通知客户端

选新主时,一般会参考:

  • replica 优先级
  • 复制偏移量
  • 与 master 的断连时长

这也是为什么平时要关注 replica 的复制延迟和健康度。

客户端为什么仍然可能报错 ​

很多人以为 Sentinel 切换完,业务自然无感。
现实里,下面几个点经常出问题。

1. 客户端没有正确接入 Sentinel ​

如果客户端还写死老 master 地址,那 Sentinel 再聪明也没用。
客户端必须能通过 Sentinel 发现当前主节点。

2. 连接池里还保留旧连接 ​

切主后,连接池里的旧连接、旧 DNS、旧路由可能还在继续发请求。

3. 复制延迟导致新主数据不全 ​

原主宕机前最后一段写入可能尚未同步到某个 replica。
被提升为新主后,业务可能看到“最近几秒数据丢失”。

所以 Sentinel 提供的是高可用,不是强一致。

Sentinel 和 Cluster 不要混用概念 ​

Sentinel 适合什么 ​

  • 单主多从
  • 关注高可用
  • 数据规模和热点还能承载在单主上

Cluster 适合什么 ​

  • 既要高可用,又要分片扩展容量
  • 多主分片
  • 数据量和吞吐单主扛不住

如果你的核心问题已经是:

  • 单机内存打满
  • 热点集中在单主
  • 写流量远超单主能力

那光靠 Sentinel 已经不够了。

工程上最该关注的点 ​

1. Sentinel 节点部署位置 ​

不要都和 Redis 实例放在同一台机器或同一可用区,否则一起挂掉就失去仲裁价值。

2. quorum 和超时配置 ​

配置太激进容易误切,太保守又会恢复慢。
要结合你实际网络波动和容忍故障时间来定。

3. 客户端重连与发现机制 ​

真正决定业务恢复速度的,往往不是 Sentinel 自己,而是客户端多久能切到新主。

4. 旧主回归策略 ​

旧主恢复后通常应该作为 replica 加回去,而不是直接重新抢主。
否则极易出现角色混乱。

常见误区 ​

1. 把 Sentinel 当成数据不丢失方案 ​

错。
只要复制是异步的,切主就可能丢失最后一小段还没复制完成的数据。

2. 只配 Sentinel,不做演练 ​

没有真正做过 failover 演练的高可用,往往只是“配置上的高可用”。

3. 忽视客户端行为 ​

很多线上恢复慢,不是 Sentinel 没切成功,而是应用连接池、SDK 或代理层没有及时刷新路由。

一套简单的落地建议 ​

  • 至少 3 个 Sentinel,跨机器或跨可用区部署
  • 明确客户端接入方式,确认支持 Sentinel 感知
  • 定期做主节点宕机演练
  • 关注复制延迟和角色切换时长
  • 大容量或高吞吐场景及时评估 Cluster

总结 ​

Sentinel 的价值不是“自动化”三个字,而是把主从高可用里最脆弱的几件事标准化了:

  • 发现故障
  • 达成多数派判断
  • 选出新主
  • 通知客户端

但它只负责把系统“拉起来”,不负责替你兜住所有一致性和客户端细节。

延伸阅读相关文章优先当前专题,再补跨专题关联。
同一序列 · 顺着当前主线继续读缓存穿透治理怎么做更稳适合把 Sentinel、穿透防护、延迟队列和地理位置搜索放在一起看。Redis 专题 · Redis 可用性与热点治理细节同一序列 · 顺着当前主线继续读Redis 延迟队列怎么做更合适适合把 Sentinel、穿透防护、延迟队列和地理位置搜索放在一起看。Redis 专题 · Redis 可用性与热点治理细节同专题其他序列 · 共享标签:线上排障、案例排障缓存穿透、击穿、雪崩与缓存一致性适合把缓存更新、击穿雪崩、回源策略和事务边界放到同一条缓存治理主线上看。Redis 专题 · Redis 缓存一致性与更新策略同专题其他序列 · 共享标签:线上排障、案例排障主从复制积压和断连恢复怎么理解适合把复制、故障切换、槽迁移、内存碎片和冷启动预热放在一条 Redis 稳定性主线上看。Redis 专题 · Redis 高可用、过期与性能治理跨专题关联 · 共享标签:线上排障、案例排障磁盘打满后为什么删除文件不一定立刻生效适合把 Redis 抖动、MySQL 连接打满、MQ 积压、ES 发黄、ClickHouse 合并堆积和磁盘打满放在同一条基础设施排障主线上看。数据与基础设施排障专题 · 数据与基础设施故障的分层排查跨专题关联 · 共享标签:线上排障、案例排障大 Header、buffer、timeout 问题怎么排查适合把 location 匹配、缓冲区和负载均衡放在一起看。容器与站点部署专题 · Nginx 进阶路由与代理治理
继续阅读Redis 可用性与热点治理细节当前序列第 1 篇 / 共 4 篇当前专题第 5 个序列 / 共 7 个序列
往前看
上一序列Redis 进阶数据模型与业务场景从第 1 篇开始:Redis String、List、Set、ZSet 怎么做业务建模
往后看
下一篇缓存穿透治理怎么做更稳继续当前序列下一章下一序列Redis 数据结构与命令使用边界从第 1 篇开始:Redis String 之外的结构什么时候更合适

把零散经验整理成可查、可复用、可持续更新的企业级知识门户