一、选举制度
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。