什么是 Redis Sentinel?
Redis Sentinel 是 Redis 的一套高可用(High Availability)解决方案。
在一个典型的 Redis 主从架构中,如果主节点(Master)挂了,系统将无法处理写请求。Redis Sentinel 的作用就是自动监控这些节点,并在主节点故障时自动完成故障转移,将某个从节点提升为新的主节点。
核心功能
- 监控 (Monitoring):Sentinel 会不断检查你的主节点和从节点是否运行正常。
- 通知 (Notification):当某个被监控的 Redis 实例出现问题时,Sentinel 可以通过 API 向管理员或其他应用程序发送通知。
- 自动故障转移 (Automatic Failover):
- 如果主节点挂了,Sentinel 会开始故障转移过程。
- 它会从现有的从节点中选出一个新的主节点。
- 它会让其他从节点开始复制新的主节点。
- 它会通知连接 Redis 的客户端新的主节点地址。
- 配置提供者 (Configuration Provider):客户端连接 Sentinel 来获取当前主节点的地址。如果发生了故障转移,Sentinel 会向客户端报告新地址。
工作原理
1. 主观下线 vs 客观下线
- 主观下线 (SDOWN):单个 Sentinel 认为主节点挂了。
- 客观下线 (ODOWN):足够多(达到配置的
quorum数量)的 Sentinel 都认为主节点挂了。只有达到客观下线状态,才会触发故障转移。
2. 选举领头哨兵 (Leader Election)
当主节点被判断为客观下线后,所有的 Sentinel 会选举出一个“领头哨兵”(Leader),由这个 Leader 来执行具体的故障转移操作。
3. 故障转移步骤
- 筛选从节点:过滤掉断连、响应慢或配置不合适的从节点。
- 选择新主节点:根据优先级、复制偏移量(数据越新越好)和运行 ID 进行选择。
- 角色切换:让选中的从节点执行
SLAVEOF NO ONE升级为主节点。 - 更新状态:让其他从节点指向新的主节点。
哨兵集群的建议
- 为了保证 Sentinel 本身的高可用,通常建议部署 3 个或以上 的 Sentinel 实例。
- 实例数量最好是奇数,以便在选举时更容易达成一致。
- Sentinel 并不存储业务数据,它只是一个特殊的 Redis 进程。
方案对比
关于 Sentinel 与 Cluster 模式的详细对比,请参考:Redis Sentinel vs. Cluster (方案对比)