一般脑裂都是出现在集群环境中的。指的是一个集群环境中出现了多个master节点(类似zookeeper的master、elasticsearch的master节点),导致严重数据问题,数据不一致等等。
出现的原因:可能就是网络环境有问题如断开,假死等等,导致一部分slave节点会重新进入崩坏恢复模式,重新选举新的master节点,然后对外提供事务服务。
下图是一个正常的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,该算法的规则是投票超过半数 (>3)的服务器才能当选为Leader。这个算法能够保证leader的唯一性。