zookeeper集群的脑裂问题

说明:zookeeper3.4.6以上不存在脑裂的问题,该版本后的选举算法是FastLeaderElection,即投票超过半数的服务器才能当选为Leader,leader的唯一性。
 

脑裂

一般脑裂都是出现在集群环境中的。指的是一个集群环境中出现了多个master节点(类似zookeeper的master、elasticsearch的master节点),导致严重数据问题,数据不一致等等。

出现的原因:可能就是网络环境有问题如断开,假死等等,导致一部分slave节点会重新进入崩坏恢复模式,重新选举新的master节点,然后对外提供事务服务。


例如机房A和机房B通信,一个6个节点,选举机房A的一个节点为master节点。

当机房A和机房B出现通信网络故障,如下图会导致机房B重新选举master。在网络恢复后就会出现两个master。


解决办法


1.采用冗余心跳通信


2.采用过半原则


冗余心跳说白了就是节点之间采用多路心跳来保证单心跳链路的不稳定性。这里着重介绍一下过半原则:在领导者选举的过程中,如果某台zkServer获得了超过半数的选票,则此zkServer就可以成为Leader了。
这里贴一下底层源码:return (set.size() > n/2),其中n为集群中有效节点的个数,set.size 表示某台zkServer获得的票数。

拿上面的图来说,n = 6,那么set.size要为4(4>3)就是在机房A和机房B中有4个节点才能选举新的master节点。如图二,机房A和B断了,机房B只有3个节点,是无法选举新的master节点的,所以就保证了即使机房A和B之间的网络断了,机房B也不会选举新的master节点。这就是过半机制。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值