主从复制解决了数据冗余,但没有解决一个关键问题:主库挂了以后,谁来判断、谁来选新主、客户端怎么知道新地址?Sentinel 就是为这个问题而生。

Sentinel 不是一个单点裁判,而是一组特殊 Redis 进程。它们先各自判断主观下线,再通过 quorum 形成客观下线,随后选出 Leader 执行故障转移。

先把机制边界说清楚

这一篇讨论非 Cluster 模式下的自动故障转移。Sentinel 不做数据分片,也不能消除异步复制带来的丢写窗口。

整体路径

Sentinel 故障转移四步

上面这张图先把主线铺开:监控、达成客观下线、选 Leader、切新主。读 Redis 这类系统,最重要的是别只停在命令接口,要继续追问它在内存里是什么形状、在主线程上走多远、失败时会留下什么状态。

底层机制

  • 单个 Sentinel ping 不通主库,会先标记主观下线。
  • 达到 quorum 后,多个 Sentinel 对主库故障形成客观下线判断。
  • Sentinel 之间选出 Leader,由 Leader 负责一次故障转移。
  • 新主选择会考虑优先级、复制进度和运行状态。

这些机制放在一起看,就能把「这个命令能不能用」改成「这个命令在当前数据规模下还便不便宜」。Redis 的很多坑,不是命令本身错了,而是数据规模和访问方式已经越过了它的舒适区。

取舍与边界

Sentinel 提供的是自动恢复能力,不是强一致保证。故障判断太敏感会误切,太保守又会拉长不可用时间。

典型问题:用机制化例子排查

  • 至少部署 3 个 Sentinel,并跨故障域放置。
  • 客户端必须使用 Sentinel 感知新主,不能写死 master 地址。
  • 合理配置 down-after-milliseconds、quorum 和 failover-timeout。
  • 故障演练要覆盖主库宕机、网络隔离和从库延迟三种场景。

收束:一句判断

Sentinel 的价值,是把人工切主变成一套可观测、可演练的流程。


关于十三Tech

我是十三,All in AI Agent 方向的架构师,专注 AI 工程实践。

我相信 AI 是程序员的最佳搭档,也希望帮助每一位开发者更好地驾驭 AI。

如果你想继续跟完这套「图解 Redis」,欢迎关注公众号 「十三Tech」。后续会继续按数据结构、底层机制、持久化、高可用和实战排查这条线更新。

十三Tech公众号二维码