脑裂前提

脑裂(split-brain)就是“大脑分裂”,也就是本来一个“大脑”被拆分了两个或多个“大脑”。脑裂通常会出现在集群环境中,比如 ElasticSearch、Zookeeper 集群,而这些集群环境有一个统一的特点,就是它们有一个大脑,比如 ElasticSearch 集群中有 Master 节点,Zookeeper 集群中有 Leader 节点。

脑裂介绍

对于一个集群,想要提高这个集群的可用性,通常会采用多机房部署。正常情况下,此集群只会有一个 Leader,那么如果机房之间的网络断了之后,两个机房内的机器还是可以相互通信的,如果不考虑过半机制,那么就会出现每个机房内部都将选出一个 Leader。这就相当于原本一个集群,被分成了两个集群,出现了两个“大脑”,这就是脑裂。

过半机制

在领导者选举的过程中,如果某台服务获得了超过半数的选票,则此服务就可以成为 Leader 了。比如现在集群中有5台 zkServer,那么 half=5/2=2,那么也就是说,领导者选举的过程中至少要有三台 zkServer 投了同一个 zkServer,才会符合过半机制,才能选出来一个 Leader。

总结

总结得出,有了过半机制,对于一个集群,要么没有 Leader,要没只有 1 个 Leader,这样就避免了脑裂问题。