动态监控主动上位
在 Redis Sentinel 的高可用架构中,动态监控主动上位(通常称为 故障转移 或 自动故障转移,failover
)是 Sentinel 执行的一个关键流程,它确保在主节点出现故障时,自动将某个从节点提升为新的主节点,从而保证 Redis 服务的持续可用性。下面我们将详细介绍 Sentinel 中的 AP(主动上位)流程,即 Sentinel 在监控到主节点不可用时,如何进行故障转移,选举新的主节点。
哨兵(Sentinel)AP流程概述:
- 动态监控:Sentinel 实例定期监控 Redis 主节点和从节点的健康状态。
- 检测主节点故障:当 Sentinel 发现主节点出现故障(如响应超时、掉线等),会开始故障转移(failover)流程。
- 发起选举:多个 Sentinel 实例协同工作,通过投票选举出一个新的主节点。
- 提升从节点:一旦选举完成,Sentinel 会将选定的从节点提升为新的主节点。
- 更新配置:所有其他 Sentinel 实例和从节点都会得到新的主节点信息,确保系统的一致性。
- 通知客户端:客户端通过 Sentinel 获取当前主节点的信息,确保它们连接到新的主节点。
Sentinel AP流程的详细步骤:
1. 动态监控
Sentinel 会定期监控所有的 Redis 实例(包括主节点和从节点)。它使用 PING 命令(或类似的心跳机制)来检测 Redis 实例是否健康。当 Sentinel 检测到主节点响应超时,或者主节点在一定时间内无法正常工作时,它会认为该主节点出现了故障。
- 心跳检查:Sentinel 每隔一段时间(如
sentinel down-after-milliseconds
参数设置的时间)检查主节点是否响应。如果超过该时间限制,Sentinel 会认为主节点不可用。
2. 主节点故障检测
当 Sentinel 发现主节点失联时,它会开始进入故障转移流程。此时,Sentinel 会进行以下操作:
- 判断故障:一个 Sentinel 实例可能会先检测到故障,但这并不足够,因为一个 Sentinel 实例的判断可能会因为网络问题或其他原因而不准确。为了避免错误判断,Sentinel 采用 多数投票机制。只有当超过半数的 Sentinel 实例都认为主节点故障时,故障才会被确认。
- 超时配置:如果主节点的响应超时超过配置的阈值(如
sentinel down-after-milliseconds
),Sentinel 会将其标记为不可用(subjectively-down
)。此时,其他 Sentinel 实例也会通过通信确认这一点。如果多数 Sentinel 实例一致认为主节点故障,主节点将被标记为 客观故障(objectively-down),然后进入故障转移阶段。
3. 发起故障转移选举
一旦主节点被标记为故障,Sentinel 将启动 选举机制来选出新的主节点。此时,Sentinel 会:
- 选举机制:多个 Sentinel 实例将基于以下条件进行选举:
- 选举过程中,参与投票的 Sentinel 实例会投票支持某个从节点成为新的主节点。
- 该从节点必须满足条件,比如它已经同步了足够的数据、它与主节点的同步延迟较小等。
- Sentinel 会根据当前从节点的复制状态(如复制延迟)来进行选择,通常选择数据同步较为完整、延迟较小的从节点。
- 选举规则:选举过程中,投票的规则是,超过半数的 Sentinel 实例同意后,才认为某个从节点成为新的主节点。只有获得多数支持的从节点才会被提升为主节点。
4. 提升从节点为主节点
一旦选举产生新的主节点后,Sentinel 会执行以下操作:
- 提升从节点:选举成功后,Sentinel 会将选定的从节点提升为主节点,并将它的角色从 slave(从节点)切换为 master(主节点)。
- 同步其他从节点:新的主节点开始接受客户端请求,同时,原来作为从节点的 Redis 实例也会开始同步新的主节点。其它的从节点会向新的主节点进行同步。
5. 更新配置与同步
故障转移成功后,Sentinel 会通知所有其他节点,包括原先的从节点和新的主节点,确保它们都知道新的主节点信息:
- 更新从节点配置:所有从节点将被重新配置,以便它们从新的主节点进行同步。
- 广播通知:Sentinel 会通过广播更新主节点信息,让所有 Sentinel 实例、从节点以及客户端都能快速知晓新的主节点地址。
6. 客户端的重新连接
客户端在访问 Redis 时通常不会直接连接 Redis 实例,而是通过 Redis Sentinel 获取当前主节点的地址。故障转移完成后,客户端会通过 Sentinel 获取到新的主节点地址,并重新连接到新的主节点,保证服务的持续性。
- 客户端自动切换:在 Redis 客户端中,通常会集成对 Sentinel 的支持。当主节点发生故障转移时,客户端可以通过 Sentinel 获取新的主节点信息,自动切换到新的主节点上进行操作。
7. 恢复监控与后续操作
当故障转移完成后,Sentinel 会继续监控新的主节点和从节点的状态,确保整个系统的稳定性。在原主节点恢复时,它将不会自动恢复为主节点,而是会作为一个从节点重新加入系统,开始向新的主节点同步数据。
Sentinel 故障转移的优点和挑战:
优点:
- 自动化:Sentinel 提供了自动故障转移的机制,极大降低了人工干预的需求,提高了系统的可靠性。
- 高可用性:通过自动监控、故障检测和选举机制,Sentinels 可以有效地保证 Redis 的高可用性,即使在发生故障时,Redis 服务也不会中断。
- 无缝切换:客户端通过 Sentinel 获取当前主节点的地址,当故障转移发生时,客户端可以自动切换到新的主节点,保证业务的连续性。
挑战:
- 选举延迟:由于 Sentinel 必须通过选举机制来确定新的主节点,这个过程可能会有一定的延迟,尤其是在网络环境较差或 Sentinel 实例较多的情况下。
- 数据丢失:虽然故障转移会尽量选择同步数据最完整的从节点,但在某些情况下(例如网络延迟或同步状态不同步),可能会有少量数据丢失。
- 配置同步问题:当主节点发生故障时,虽然 Sentinel 会更新从节点配置,但如果客户端未能及时更新主节点信息,可能会导致部分客户端连接到旧的主节点,从而导致访问失败。
总结
Redis Sentinel 的 AP(主动上位)流程 是确保 Redis 系统高可用性和无缝服务的重要机制。当 Redis 主节点出现故障时,Sentinel 会自动检测并启动故障转移,选举一个新的主节点,确保 Redis 服务继续正常运行。这个过程包括故障检测、选举、从节点提升为主节点、同步配置更新以及客户端切换等步骤,从而保证了 Redis 的高可用性。
标签:故障,Redis,哨兵,上位,实例,Sentinel,节点,客户端 From: https://blog.csdn.net/weixin_47654264/article/details/145267818