Redis Sentinel(哨兵模式)是一种用于 Redis 高可用性管理的工具。它的主要目的是监控、通知和自动故障转移。通过使用哨兵模式,Redis 系统可以实现高可靠性和高可用性,避免因单点故障导致的服务中断。
一、哨兵模式架构
哨兵模式由多个哨兵实例组成。

1.主节点(Master)
主节点主要负责处理写操作,并将数据同步到从节点。一个主节点拥有一个或多个从节点。
2.从节点(Slave)
从节点会复制主节点的数据,确保数据一致性。若主节点发生故障,从节点可以被提升为主节点。
3.哨兵节点(Sentinel)
哨兵负责监控主从节点的健康状态,并在主节点出现故障时进行故障转移,自动将某个从节点提升为新的主节点。
建议:至少部署3个哨兵实例,以保证足够的冗余和投票权,避免单点故障。
二、哨兵模式主要功能
1.监控
哨兵监控 Redis 主节点和从节点的健康状态。如果主节点出现故障,哨兵会发出警告。
2.故障转移
当主节点发生故障不可用时,哨兵会自动选举某个从节点提升为为新的主节点。
3.通知
哨兵在监控过程中,如果检测到主节点或从节点故障,会通过邮件、命令行或者外部接口发送故障通知。
当发生故障转移和配置变更时,哨兵会通过事件通知告知管理员或其他系统。
4.配置
哨兵还充当客户端的配置提供者。当客户端连接到哨兵时,哨兵会返回当前活动的主节点地址,客户端可以动态地获取主节点信息。
三、哨兵模式的工作流程
1.监控
哨兵会定期向 Redis 主节点和从节点发送 PING 请求,以检查它们的健康状态。通过 PONG 响应,可以确定节点是否可用。
2.故障检测
哨兵检测到主节点不可用(超时或无法连接),且在一定时间内无法恢复,它会进入一个故障检测阶段。在这个阶段,哨兵集群会对该节点进行投票,确定主节点是否确实故障。
3.故障确认
一旦超过一定数量的哨兵确认主节点宕机,将进入故障确认阶段。
4.哨兵选举
哨兵集群发起选举,选出一个哨兵来执行故障转移操作。这个选举过程使用的是多数投票机制,确保决策的正确性。
5.故障转移
选举出的哨兵会选择一个健康的从节点,并将其提升为新的主节点。
6.更新配置
所有的哨兵会更新配置,指向新的主节点。同时,所有从节点会将新的主节点作为它们的主节点进行数据同步。
7.通知客户端
哨兵会通过配置提供者接口通知客户端,告知新的主节点地址。
四、哨兵模式的使用流程
1.哨兵配置
要启用 Redis Sentinel 模式,首先需要配置多个哨兵实例。
每个哨兵实例都需要有相应的配置文件,通常为sentinel.conf。
主要配置项包括监控目标、认证信息、故障转移策略等。
(1)示例配置
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| # sentinel.conf port 26379 daemonize yes dir /var/lib/redis/sentinel sentinel monitor mymaster 127.0.0.1 6379 3 sentinel down-after-milliseconds mymaster 30000 sentinel failover-timeout mymaster 180000 sentinel parallel-syncs mymaster 2 sentinel known-replica mymaster 127.0.0.1 7000 sentinel announce-ip 127.0.0.1 sentinel announce-port 26379 # sentinel auth-pass mymaster 123456 |
(2)配置项解析
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| port 26379 #指定Sentinel监听的端口号(默认 26379) daemonize yes #以守护进程(后台)模式运行Sentinel。 dir /var/lib/redis/sentinel #设置 Sentinel 的工作目录,用于存储运行时状态和自动生成的配置文件。 sentinel monitor mymaster 127.0.0.1 6379 3 #监控名为 mymaster 的主节点(IP: 127.0.0.1,端口 6379),且至少需 3 个 Sentinel 同意才能触发故障转移。 sentinel down-after-milliseconds mymaster 30000 #mymaster主节点持续 30 秒 无响应,则标记为"主观下线"。 sentinel failover-timeout mymaster 180000 #故障转移超时时间为 180 秒,超时后放弃当前故障转移尝试。 sentinel parallel-syncs mymaster 2 #故障转移后,允许同时从新主节点同步数据的从节点数量。 sentinel known-replica mymaster 127.0.0.1 7000 #显式声明从节点 127.0.0.1:7000属于 mymaster主节点。 sentinel announce-ip 127.0.0.1 sentinel announce-port 26379 #指定当前的哨兵向其他哨兵和客户端广播的 IP 地址为:127.0.0.1。 #指定当前哨兵用于通信的端口为26379 #确保Redis客户端和其他哨兵可以通过指定的 IP 地址和端口找到并连接到当前哨兵。 sentinel auth-pass 123456 #设置连接认证密码为123456。 |
2.启动哨兵
启动 Redis 哨兵模式时,使用如下命令:
|------------------------------------------------|
| redis-server /path/to/sentinel.conf --sentinel |
五 、 哨兵模式的优化策略
1.至少部署 3 个 Sentinel 实例
为了保证高可用性,最好部署 3 个或更多的 Sentinel 实例。这样可以在任意 1 或 2 个 Sentinel 实例失败的情况下,仍然保证系统的可用性。
2.配置合理的投票机制
根据你的系统规模,合理配置 quorum 数量,以避免过于激进的故障转移。
3.监控 Sentinel 实例
虽然 Sentinel 本身可以监控 Redis 集群,但你仍然应该监控 Sentinel 实例的健康状态和故障转移的执行情况,避免单点故障。
4.备份和恢复
定期备份 Sentinel 配置文件,确保在系统崩溃时可以迅速恢复。
六、Sentinel 的高可用性和优缺点
1.优点
高可用性:当主节点故障时,哨兵会自动进行故障转移,确保高可用性。
自动故障转移:哨兵会自动选举新的主节点,减少系统停机时间。
扩展性:哨兵模式支持多节点,增加哨兵节点可以提高系统的容错能力。
2.缺点
配置复杂:需要配置多个哨兵实例,并确保其正确工作。
延迟:故障转移过程中可能会产生短暂的延迟,导致短暂不可用和数据不一致。
七、 总结
Redis 哨兵模式是为了保证 Redis 的高可用性而设计的。它通过监控、自动故障转移、通知等功能,确保主节点出现故障时可以快速恢复,避免单点故障带来的服务中断。虽然配置和管理较为复杂,但它是保证 Redis 集群高可用性的关键技术之一。在实际生产环境中,尤其是需要高可用性和稳定性的应用场景下,使用 Redis 哨兵模式可以极大地提高系统的容错能力。