什么是 Redis Sentinel?

Redis Sentinel 是 Redis 的一套高可用(High Availability)解决方案

在一个典型的 Redis 主从架构中,如果主节点(Master)挂了,系统将无法处理写请求。Redis Sentinel 的作用就是自动监控这些节点,并在主节点故障时自动完成故障转移,将某个从节点提升为新的主节点。


核心功能

  1. 监控 (Monitoring):Sentinel 会不断检查你的主节点和从节点是否运行正常。
  2. 通知 (Notification):当某个被监控的 Redis 实例出现问题时,Sentinel 可以通过 API 向管理员或其他应用程序发送通知。
  3. 自动故障转移 (Automatic Failover)
    • 如果主节点挂了,Sentinel 会开始故障转移过程。
    • 它会从现有的从节点中选出一个新的主节点。
    • 它会让其他从节点开始复制新的主节点。
    • 它会通知连接 Redis 的客户端新的主节点地址。
  4. 配置提供者 (Configuration Provider):客户端连接 Sentinel 来获取当前主节点的地址。如果发生了故障转移,Sentinel 会向客户端报告新地址。

工作原理

1. 主观下线 vs 客观下线

  • 主观下线 (SDOWN):单个 Sentinel 认为主节点挂了。
  • 客观下线 (ODOWN):足够多(达到配置的 quorum 数量)的 Sentinel 都认为主节点挂了。只有达到客观下线状态,才会触发故障转移。

2. 选举领头哨兵 (Leader Election)

当主节点被判断为客观下线后,所有的 Sentinel 会选举出一个“领头哨兵”(Leader),由这个 Leader 来执行具体的故障转移操作。

3. 故障转移步骤

  1. 筛选从节点:过滤掉断连、响应慢或配置不合适的从节点。
  2. 选择新主节点:根据优先级、复制偏移量(数据越新越好)和运行 ID 进行选择。
  3. 角色切换:让选中的从节点执行 SLAVEOF NO ONE 升级为主节点。
  4. 更新状态:让其他从节点指向新的主节点。

哨兵集群的建议

  • 为了保证 Sentinel 本身的高可用,通常建议部署 3 个或以上 的 Sentinel 实例。
  • 实例数量最好是奇数,以便在选举时更容易达成一致。
  • Sentinel 并不存储业务数据,它只是一个特殊的 Redis 进程。

方案对比

关于 Sentinel 与 Cluster 模式的详细对比,请参考:Redis Sentinel vs. Cluster (方案对比)