结论:
Zookeeper采用过半选举机制,防止了脑裂。
原因:
如果有5台节点,leader联系不上了,其他4个节点由于超过半数,所以又选出了一个leader,当失联的leader恢复网络时,发现集群中已经有了leader,会把自己降为flower,防止出现两个leader。
和NameNode不同的是,zookeeper是自己维护选举的,所以可以在程序中加判断避免,而NN是依赖zookeeper选举的,所以NN并不知道出现了脑裂。
NN不能自己维护选举的原因是:NN为了保证可用性,而zookeeper为了选举,会牺牲可用性。