Zookeeper之 两种选举制度|为什么需要过半投票机制?

一、选举制度

  1.第一次选举:超 > 半数选举,判断leader的标准:myid

详细见:https://blog.csdn.net/weixin_43291055/article/details/95451357

  2.宕机选举:每个zk:(myid,zxid)

  • 只要超过半数的节点正常,集群就能正常提供服务。判断leader的标准如下:
    •  优先判断:zxid最大的是老大(最近发生事务更新的是老大)
    •  如果zxid相同,那么就比较myid。myid较大的服务器作为Leader服务器。

zxid是什么?

ZooKeeper状态的每次变化都接收一个ZXID(ZooKeeper事务id)形式的标记。ZXID是一个64位的数字,由Leader统一分配,全局唯一,不断递增。
ZXID展示了所有的ZooKeeper的变更顺序。每次变更会有一个唯一的zxid,如果zxid1小于zxid2说明zxid1在zxid2之前发生。

二、脑裂

什么是脑裂?

场景

对于一个集群,想要提高这个集群的可用性,通常会采用多机房部署,比如现在有一个由6台zkServer所组成的一个集群,部署在了两个机房:

正常情况下,此集群只会有一个Leader,那么如果机房之间的网络断了之后,两个机房内的zkServer还是可以相互通信的,如果不考虑过半机制,那么就会出现每个机房内部都将选出一个Leader。

解决脑裂

原文地址:https://www.cnblogs.com/sabertobih/p/14096350.html