分布式集群架构的“脑裂”问题

目录

什么是假死?什么是脑裂

造成脑裂问题的原因

如何解决脑裂问题


 

什么是假死?什么是脑裂

 

在分布式集群中,我们都会采取某种机制检测主节点是否有故障,有故障的话会选举出新的主节点。

假死:由于心跳超时(网络原因导致)任务leader已死,但其实leader还活着

脑裂:由于假死发起了新一轮的选举,此时会出现2个leader共存。会出现有的客户端请求老leader,有的客户端请求新leader

 

 

造成脑裂问题的原因

 

1.网络的不可靠性。

2.集群状态监测不能做到100%同步,有时间差 

 

 

如何解决脑裂问题

 

1. 半数法人机制(Quorums):这种方法也是zk默认使用的方式,即只有集群中超过半数节点投票才能选出Leader。

如果半数机制选举出了一个新leader,此时老leader由于网络故障恢复了仍然认为自己是leader,虽然有2个leader但是老leader向所有followers发送请求会被拒绝。因为每当新leader产生会生成一个epoch标号(代表皇帝通知的朝代名称)。这个epoch是递增的,follower如果确认了新的epoch标号,就会拒绝其他小于epoch标号。

那会不会出现follower不知道最新的epoch标号是多少的情况呢?有可能,但绝对不是大多数。因为如果大多数follower都不知道最新的“朝代”,新的leader也不会被选出。此时最坏的现象是只有oldLeader自己认为它还是个leader不会提供服务,其他节点可以正常工作。

 

2.添加冗余的心跳线

例如双心跳线检查

 

3.启动智能磁盘锁

 

4.设置仲裁机制

搞一个参考ip,当心跳线全部断开时会出现一新leader、一老leader。让他们都ping一个参考ip,谁ping不通就让谁重启,释放资源。重启后只能变成follower。

你可能感兴趣的:([笔记本],[分布式事务,锁,缓存],[Zookeeper])