先抛出一个问题:Zookeeper3.4.6版本是否存在脑裂问题?
一,什么是脑裂
什么是脑裂呢?
下图是一个正常的Zookeeper集群,由7个节点组成。其中有1个Leader A和6个Follower。
当网络发送故障时,Follower D、Follower E、Follower F从集群中断开了,然后这3个节点认为Leader挂了,然后重新选了1个Leader,Follower E变成了Leader B,如下图,这就是脑裂。
上图有可能存在一个问题,因为Zookeeper集群的一个特性是:过半节点存活可用。如何理解。网上有一个说法:有100个节点组成的集群,如果被网络分割成50和50两个分区,那么整个集群是不可用的,因为不满足过半节点存活可用的原则。
二,Zookeeper3.4.6版本是否存在脑裂问题
首先,Zookeeper3.4.6不存在脑裂的问题。
为什么呢?
Zookeeper3.4.6的选举算法是FastLeaderElection,该算法的规则是投票超过半数的服务器才能当选为Leader。这个算法能够保证leader的唯一性。