ZooKeeper选举机制图解

1.为什么要选举?

Zookeeper的运行需要有一个Leader,多个Follower。无论是在服务器集群上线还是之前的Leader宕机,都需要重新选举出Leader。

2.集群刚部署时Leader选取原则:,分布式集群中的每台机器都参与投票,每台自己都会优先投给自己一票,通过交换选票查看对方有多少票,彼此票数相同时,比较myid大小,赢家通吃,得到每台机器的最终得票。一旦出现票数超过机器总数的一半以上数量,当前机器就是Leader。

 

举例说明:

          以5台服务器为例,顺序启动,当前集群 中没有任何数据。

第一轮:服务器1先启动,立马给自己投一票,然后检查自己的票数发现没过半,清空选票,选举状态变成Locking锁定状态。

第二轮:服务器2启动,给自己投一票,服务器1也会给它自己投1票,服务器1和服务器2这时会交换选票,然后发现各自有一票,此时会比较Myid(管理员自己配置的),发现服务器2的myid比较大,于是服务器1会把自己的票交给服务器2。服务器2检查自己的票数发现没有过半,于是清空投票,选举状态保持Locking。

第三轮:服务器3启动,给自己投一票,服务器1和2也都会自己给自己投一票,然后三个服务器交换选票发现都是各有一票,而比较了myid后发现,服务器3的myid=3是最大的,所以服务器1和2都将自己的票交给服务器3,服务器3检查出自己票数超过集群的半数,成了Leader。

最后阶段:服务器4和5各自顺序启动,发现集群中已经有了Leader,自动称为Follower。

 3.集群正在使用,无论有没有数据,仍然以五台机器为例,当Leader突然宕机时,会重新选举一个Leader,此时首先会比较每一台机器的事务ID czxid,直接让czxid最大的当选Leader,极端情况下,如果czxid都相等,再比较myid,myid大者当选。

 

 

Note:有一个小地方要解释一下,上面举出的例子,包括ZK官方都推荐使用奇数台机器的原因。

 

在ZK集群中,2F+1 和 2F+2的机器容错率都是一样的,所以会考虑到节省资源的问题。比如3台服务器和4台服务器,如果有1台服务器宕机,剩下2台服务器仍然可以工作,即仍然能投票使其中一台为2票,超过集群数3的一半,宕机容忍度是1。如果是4台服务器呢,宕机一台还可以工作,因为有一台机器有机会得3票,但是如果宕机了两台,集群就不能工作了,所以宕机容忍度也是1,Zookeeper的服务器并不是为了存储数据服务的,而是为了实现高可用(实现数据备份),在能实现高可用的前提下,两者的容错率又都相等,那肯定是使用较少的服务器更节省资源。

 

如果读者不明白高可用的具体含义,可以去查看我的CAP原则图解一文:

CAP原则图解_CaseZoecxl的博客-CSDN博客

  • 16
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 29
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值