入门Zookeeper-Zookeeper如何选举Leader?

在Zookeeper集群服务中存在三种服务器角色,分别是Leader、Follower和Observer。下面我们就来看看在面试中经常被问到的关于Zookeeper如何选出Leader的问题。

启动时的Leader选择

默认情况下,在介绍Leader选举的时候约定Zookeeper集群至少有3台机器,这里我们就以最简单的三台机器为例来介绍。

在Zookeeper初始化阶段,当有一台机器server1启动的时候,由于只有它自己,所以无法完成Leader的选举,当第二台机器server2启动的时候,同样,按照规则这两台机器是可以进行相互之间的通信的,并且每台机器都需要找到一个Leader,所以已经就可以进行Leader的选择了。

第一步、每个server都会投出一个选票

在初始状态下,对于Server1和Server2两台机器来说,都会先给自己投一票,然后将自己作为Leader。这里所谓的票,其实包含的就是服务器的myid和ZXID。在初始化阶段,两台服务器都会先给自己投票,那么Server1得到的投票就是myid=1,ZXID=0,而Server2的投票就是myid=2,ZXID=0。然后两台机器会将这个投票发到集群中的其他机器。

第二步、接受来自其他服务器的投票

按照约定,集群中的每个服务器都会接收到来自其他服务器的投票信息。在接收到投票信息之后,需要判断选票是否有效,而选票是否有效的前提是需要确定是否是本轮投票,其次要确定是否是来自LOOKING状态的服务器。在确定了这两个条件之后,就可以认为是有效的选票。

第三步、处理投票

在接收到来自其他服务器的选票之后,会与自己的选票进行对比,对比条件如下

按照Server1和Server2的选票来进行分析,对于Server1来说它自己的投票是1和0,它收到的其他服务器Server2的选票是2和0,这个时候对比ZXID发现是相同的都是0。

那么接下来就是对比myid了,发现Server1收到的Server2的myid要比自己的myid要大,那么Server1就会将自己的选票更新成2和0,这个时候,Server1就需要将这个选票重新发送出去,而对于Server2来讲,由于它的信息没有发生变化,所以,继续向集群中发送对应的投票信息即可。

第四步、投票统计

在每次投票之后,服务器就会统计投票信息,判断是否有超过一半的机器已经接收到了相同的投票信息。拿上面的Server1和Server2来说,统计之后会发现都得到了myid=2,ZXID=0的投票信息,这个时候说明在集群中已经有两台机器接受了这个投票信息,那么这个时候我们就需要对超过一半这个概念来进行一下理解了。

什么是超过一半,就是指接收到相同信息的机器数量大于或者等于总数量除以2再加一,也就是说当集群机器数量为3的时候,那么超过一半就是大于等于2,而集群数量为2的时候,那么还是大于等2。

通过上面的操作,对于Server1和Server2的集群来讲,其实已经确定了Server2就是集群的Leader节点。这个时候,如果启动了Server3节点,那么该节点自然而然的就成了Follower。

需要注意一旦集群确定了Leader节点,那么集群中的服务器就会更新自己的节点状态,如果是Follower则状态变更为FOLLOWING,如果是Leader那么状态就变成LEADERING。

运行过程中的Leader选择

假设有一个集群,存在三个节点Server1、Server2、Server3。并且这个时候Server2已经是Leader节点了。在正常情况下,这个集群的节点状态是不会发生变化了。也就是一旦成为Leader那么就会一直作为集群的Leader,只有Leader节点不发生变化,其他的任何节点发生变化都不会影响到Leader节点的状态。

但是不怕一万就怕万一,万一有一天Leader节点挂了,那么这个时候整个的集群都将无法向外提供服务了。这个时候就会进入到新一轮的Leader选举过程中。这个过程与启动时的选举过程是一致的。

第一步、状态变化

当Leader挂了之后,所有的非Observer节点都会将自己的状态调整为LOOKING,并且就开始进入到选择Leader的流程中。

第二步、每个Server都会发送一个选票

按照上面的分析,如果有三个节点,Server2挂了之后,就只有Server1和Server3两个节点了。并且Server1的节点投票为myid=1,ZXID=0。而Server3的节点投票为myid=3,ZXID=0。按照规则,Server3会被选举为Leader。

第三步、更新服务器状态

当选择出了Leader之后,与启动时的操作一样,服务器会更新对应的状态值。

总结

上面,我们介绍了关于Leader的选举的基本操作,Leader选举操作是Zookeeper的核心技术之一,也是保证Zookeeper能够支持分布式数据一致性的关键技术之一。在后续的分享中,笔者还会为大家介绍关于Zookeeper选主操作详细操作,敬请期待!

展开阅读全文

页面更新:2024-02-18

标签:都会   选票   节点   集群   入门   机器   状态   发生   操作   服务器   信息

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top