作者信息:https://home.cnblogs.com/u/huangjiabobk

在运维的工作中,redis哨兵模式原理是什么?

Redis Sentinel(哨兵模式)是 Redis 提供的一种高可用性解决方案,主要用于监控 Redis 主从节点的状态,并在检测到故障时自动进行故障转移。以下是 Redis Sentinel 的工作原理和架构的详细说明:

1. 哨兵模式的架构

Redis Sentinel 系统由以下几部分组成:

  • 主节点(Master):负责处理写操作,并将数据同步到从节点。
  • 从节点(Slave):复制主节点的数据,确保数据一致性。在主节点故障时,从节点可以被提升为主节点。
  • 哨兵节点(Sentinel):负责监控主从节点的健康状态,并在主节点出现故障时进行故障转移,自动将某个从节点提升为新的主节点。
2. 哨兵模式的主要功能
  • 监控(Monitoring):哨兵会定期向 Redis 主节点和从节点发送 PING 请求,以检查它们的健康状态。通过 PONG 响应,可以确定节点是否可用。
  • 故障转移(Failover):当主节点发生故障不可用时,哨兵会自动选举某个从节点提升为新的主节点。
  • 通知(Notification):哨兵在监控过程中,如果检测到主节点或从节点故障,会通过邮件、命令行或者外部接口发送故障通知。当发生故障转移和配置变更时,哨兵会通过事件通知告知管理员或其他系统。
  • 配置提供者(Configuration Provider):哨兵还充当客户端的配置提供者。当客户端连接到哨兵时,哨兵会返回当前活动的主节点地址,客户端可以动态地获取主节点信息。
3. 哨兵模式的工作流程
3.1 监控(Monitoring)

哨兵会定期向 Redis 主节点和从节点发送 PING 请求,以检查它们的健康状态。通过 PONG 响应,可以确定节点是否可用。如果某个节点在指定时间内没有响应,哨兵会将其标记为“主观下线”(Subjectively Down,SDOWN)。

3.2 故障检测(Failure Detection)

当哨兵检测到主节点不可用(超时或无法连接),且在一定时间内无法恢复,它会进入一个故障检测阶段。在这个阶段,哨兵集群会对该节点进行投票,确定主节点是否确实故障。

3.3 故障确认(Objective Down)

一旦超过一定数量的哨兵确认主节点宕机,将进入故障确认阶段。此时,主节点被标记为“客观下线”(Objectively Down,ODOWN)。

3.4 哨兵选举(Leader Election)

哨兵集群发起选举,选出一个哨兵来执行故障转移操作。这个选举过程使用的是多数投票机制,确保决策的正确性。

3.5 故障转移(Failover)

选举出的哨兵会选择一个健康的从节点,并将其提升为新的主节点。选择从节点的规则如下:

  1. 优先选择复制偏移量最大的从节点(即数据最完整)。
  2. 如果多个从节点的复制偏移量相同,优先选择优先级最高的从节点(通过 slave-priority 配置)。
  3. 如果优先级也相同,优先选择运行时间最长的从节点。
3.6 更新配置(Configuration Update)

所有的哨兵会更新配置,指向新的主节点。同时,所有从节点会将新的主节点作为它们的主节点进行数据同步。

3.7 通知客户端(Notification)

哨兵会通过配置提供者接口通知客户端,告知新的主节点地址。客户端可以根据这些信息动态地调整连接。

4. 哨兵模式的配置

以下是一个典型的哨兵配置文件示例:

# 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
  • port:指定 Sentinel 监听的端口号(默认 26379)。
  • daemonize:以守护进程(后台)模式运行 Sentinel。
  • dir:设置 Sentinel 的工作目录,用于存储运行时状态和自动生成的配置文件。
  • sentinel monitor:监控名为 mymaster 的主节点(IP: 127.0.0.1,端口 6379),且至少需 3 个 Sentinel 同意才能触发故障转移。
  • sentinel down-after-millisecondsmymaster 主节点持续 30 秒无响应,则标记为“主观下线”。
  • sentinel failover-timeout:故障转移超时时间为 180 秒,超时后放弃当前故障转移尝试。
  • sentinel parallel-syncs:故障转移后,允许同时从新主节点同步数据的从节点数量。
  • sentinel known-replica:显式声明从节点 127.0.0.1:7000 属于 mymaster 主节点。
  • sentinel announce-ipsentinel announce-port:指定当前的哨兵向其他哨兵和客户端广播的 IP 地址为:127.0.0.1,端口为 26379。
  • sentinel auth-pass:设置连接认证密码为 123456(如果需要)。
5. 哨兵模式的优化策略
  • 至少部署 3 个 Sentinel 实例:为了保证高可用性,最好部署 3 个或更多的 Sentinel 实例。这样可以在任意 1 或 2 个 Sentinel 实例失败的情况下,仍然保证系统的可用性。
  • 配置合理的投票机制:根据你的系统规模,合理配置 quorum 数量,以避免过于激进的故障转移。
  • 监控 Sentinel 实例:虽然 Sentinel 本身可以监控 Redis 集群,但你仍然应该监控 Sentinel 实例的健康状态和故障转移的执行情况,避免单点故障。
  • 备份和恢复:定期备份 Sentinel 配置文件,确保在系统崩溃时可以迅速恢复。
6. 哨兵模式的优缺点
6.1 优点
  • 高可用性:当主节点故障时,哨兵会自动进行故障转移,确保高可用性。
  • 自动故障转移:哨兵会自动选举新的主节点,减少系统停机时间。
  • 扩展性:哨兵模式支持多节点,增加哨兵节点可以提高系统的容错能力。
6.2 缺点
  • 配置复杂:需要配置多个哨兵实例,并确保其正确工作。
  • 延迟:故障转移过程中可能会产生短暂的延迟,导致短暂不可用和数据不一致。
7. 我的总结

综上所述,Redis Sentinel 是一种高效的高可用性解决方案,通过监控、自动故障转移、通知等功能,确保主节点出现故障时可以快速恢复,避免单点故障带来的服务中断。虽然配置和管理较为复杂,但它是保证 Redis 集群高可用性的关键技术之一。在实际生产环境中,尤其是需要高可用性和稳定性的应用场景下,使用 Redis Sentinel 可以极大地提高系统的容错能力。

posted @ 2025-04-03 23:55  黄嘉波  阅读(108)  评论(0)    收藏  举报
版权声明:原创作品,谢绝转载!否则将追究法律责任。--作者 黄嘉波