redis哨兵模式的功能-以及主从选举算法

对于哨兵模式而言,主要负责的内容有

1、监控
2、选主(选择主库)
3、通知

哨兵工作流程:

1、监控:节点发现和配置
2、心跳检测: 哨兵会定期向监控的节点发送PING命令来检测节点是否存活
3、节点状态变更: 当哨兵连续多次无法连接到一个节点时,它会将该节点标记为主观下线
4、故障判断和选举: 当主节点被标记为客观下线时,哨兵会执行故障判断。它会从剩余的健康主节点中选举一个作为新的主节点,并将该信息广播给其他哨兵和客户端。故障判断的逻辑考虑了多个因素,包括优先级、最近一次复制偏移量等。

5、自动故障切换: 如果主节点被标记为客观下线,哨兵会通知从节点晋升为新的主节点。同时,哨兵会更新其他从节点的配置,使其复制新的主节点。这确保了即使主节点发生故障,集群仍然可以继续提供服务。

6、监控从节点: 哨兵还会监控从节点的状态,包括从节点是否与主节点保持同步,以及从节点的复制延迟情况。如果从节点无法同步或者复制延迟过高,哨兵会将其标记为不健康。

7、节点恢复: 如果一个节点从客观下线状态恢复,哨兵会将其标记为健康,并将其重新纳入集群中。从节点恢复后,它会重新同步主节点的数据。

8、配置更新: 如果集群的拓扑发生变化,例如添加或移除节点,哨兵会自动更新配置,以便客户端能够正确连接到集群。

9、事件通知: 哨兵通过发布订阅机制向订阅者(通常是客户端)发送有关集群状态变化的消息。这使得应用程序能够根据实时的集群状态做出相应的决策。

10、持续监控: 哨兵会持续地监控集群中的节点,定期执行心跳检测、状态更新和故障判断,以确保集群的稳定运行。

选举流程-如何选定新主库

1、主观下线和客观下线判断: 当哨兵节点主观下线(单个哨兵认为不可用)一个主节点时,如果多数哨兵都主观下线了同一个主节点,那么这个主节点会被标记为客观下线(多数派共识)。

2、选举新主节点: 当一个主节点被标记为客观下线后,哨兵节点会开始选举一个新的主节点。选举过程如下:

哨兵会在所有没有下线的从节点(Slaves)中选择一个作为新主节点。哨兵会选择一个【延迟最小、复制偏移量最大】的从节点作为新主节点。这确保了新主节点是最接近原主节点的从节点。
如果没有合适的从节点,哨兵会选择一个【具备最高优先级的】从节点,将其升级为主节点。
如果优先级相同,那么哨兵会选择一个【复制偏移量最大】的从节点。

3、故障转移和切换:一旦新主节点被选定,哨兵会发起故障转移操作。旧主节点会变成新主节点的一个从节点。其他从节点会重新配置,指向新的主节点。这个过程会保证尽量不丢失数据,并且保证整个集群的高可用性。

Redis Sentinel的选举Leader过程受到【Paxos算法】和【Raft算法】等分布式一致性算法的影响,以保证在主节点失效时能够选择合适的节点作为新的主节点,从而保持数据的一致性和高可用性。

1、选举算法:选主的算法基于节点的【权重】、【网络拓扑结构】、【节点状态】等因素进行选举。
节点的权重越高,被选为主节点的可能性就越大。

2Raft算法:Raft算法是一种分布式【一致性算法】,被广泛应用于Redis集群中。

3Paxos算法:Paxos[pe克索斯]算法也是一种分布式一致性算法,用于在多个节点之间实现数据的一
致性。与Raft算法不同的是,Paxos算法的实现更为复杂,但具有更好的性能和扩展性。

4、其他算法:除了上述算法之外,还有一些其他的选主算法,如ZooKeeperZab算法、
CassandraRaft算法等。这些算法都有各自的特点和优势,可以根据实际需求进行选择。

redis哨兵模式详细介绍:跳转

脑裂的问题解决和数据丢失的问题

redis哨兵模式的功能-以及主从选举算法_第1张图片
解决方案:
redis哨兵模式的功能-以及主从选举算法_第2张图片
1、首先是脑裂的问题,在配置文件中,设置如果主节点发现可以用从节点少于,原来配置的从节点,脑裂会生成新的Master,所以从节点就变少了,那么就告警,或者不在为客户端提供服务,这个就可以解决脑裂的问题。

2、第二个因为主节点真的挂机了,丢了很多数据,那么久判断如果每个从节点的偏移量差太大,比如某个节点的offset只有百分之80那么说明还有很多没有备份给从节点,如果主节点在新增数据,那么偏移量的差就会越来越大,所以此时主节点不能再对外提供服务。

缺点:就是本来高可用,结果变成不高可用了。

怎么发现Master挂了

哨兵的节点,最少是三台,或者三台以上,并且是单数,为什么是单数,主要是为了防止投票的时候,平票的情况。
redis哨兵模式的功能-以及主从选举算法_第3张图片

如何选主

redis哨兵模式的功能-以及主从选举算法_第4张图片
1、响应时间
2、从节点的数据完整性
3、稳定性,运行时间越长越稳定
4、如果三个情况都一样,那就更新runId来选。

在这里插入图片描述

你可能感兴趣的:(redis,bootstrap,数据库)