Redis 高并发架构中的哨兵(Sentinel)角色及其功能在确保分布式系统的稳定性和可用性方面扮演着至关重要的角色。在本文中,我们将进一步深入探讨哨兵的关键功能以及与故障转移相关的核心概念。
哨兵的关键功能:
- 监控集群状态: 哨兵不断监控 Redis 主从节点的状态,确保它们正常运行。一旦发现节点状态异常,哨兵将采取相应措施,如发出报警通知。
- 消息通知和报警: 当有节点故障或状态异常时,哨兵能够发出警报通知给管理员,以便及时采取修复措施,保障系统稳定性。
- 故障转移: 哨兵能够识别主节点宕机的情况,并自动将原本由主节点负责的任务切换到备用节点上,确保服务的持续可用性。
- 配置中心: 在故障发生时,哨兵将更新客户端配置,指向新的主节点,以便客户端能够无缝切换到新的节点上。
哨兵数量与故障转移:
需要注意的是哨兵本身也是分布式的,在实际的项目中,一般都是需要部署至少三个哨兵实例,因为在 master 节点宕机后需要哨兵进行选举行为来产生新的 master,而单实例的哨兵则无法满足这一需求。而且就算是部署了至少三个哨兵节点也无法保证零丢失数据,只能保证 Redis 的集群是高可用的。
Quorum & Majority:
在哨兵模式中,Quorum(法定人数)和 Majority(多数派)是关键参数。Quorum表示认定某个主节点宕机的最低哨兵数量,而Majority代表授权故障转移所需的最小哨兵数量。
在执行故障转移时,要满足两个条件:至少有一个哨兵认为节点宕机,且Quorum与Majority的大小关系决定是否能进行故障转移。具体而言,如果Quorum小于Majority,只需Majority数量的哨兵授权即可执行故障转移;反之,需要所有Quorum数量的哨兵同意才能进行转移。
对于 Majority 的数值是有固定设置的,其和哨兵节点的数量有如下关系:
代码语言:txt复制- n= 2,majority=2
- n= 3,majority=2
- n= 4,majority=2
- n= 5,majority=3解释一下为什么哨兵集群只有两个节点无法正常工作。假设两个节点,一个节点觉得另一个节点挂机了,在这个环境下 m = 2,q = 1,因为 q > 0所以应该说节点宕机是成立的,但是,又因为 q < m,那么需要有两个哨兵进行授权故障转移,但是因为其中一个挂了只有一个机器能授权,所以矛盾了,就无效。
Sdown & Odown:
在哨兵集群中,故障的判定有两种状态:Sdown和Odown。当一个哨兵节点认为主节点宕机,会标记为Sdown。当Quorum数量的哨兵都认为主节点宕机,它会被标记为Odown。
结论:
哨兵在Redis高并发集群中扮演着关键的角色,确保系统的稳定性和可用性。通过监控、通知、故障转移和配置管理,哨兵能够自动检测和处理节点故障,提供高可用性的服务。在部署哨兵时,至少需要三个哨兵实例,以满足选举和故障转移的需求。Quorum和Majority参数的设置对于故障转移流程至关重要,需要根据实际情况合理调整。对于Sdown和Odown状态,哨兵将它们作为判定故障和授权故障转移的标志。
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!


