Zookeeper选举机制

1.Zookeeper选举机制

何时须要进行选举?服务器

当Zookeeper集群中的一台服务器出现如下两种状况之一时,须要进行Leader选举:大数据

1)服务器初始化启动spa

2)服务器运行期间没法和Leader保持链接server

怎样进行选举?class

1.服务器初始化启动的Leader选举集群

前提:至少须要两台服务器,当只有一台服务器时,其单独没法进行Leader选举,当有两台服务器时,而且他们之间能够相互通讯,此时才能进入选举状态统计

选举过程:通信

1)每台服务器发出本身的投票。初始投票每台服务器都会投本身,投票内容为(myidZXIDEpoch数据

2)接收来自各个服务器的投票。每台服务器接收到其余服务器的投票后,首先判断该投票的有效性(根据Epoch判断是否为本轮投票,是否来自LOOKING状态的服务器)tab

3)处理投票。针对接收到的每个投票,都须要将该投票与本身的投票进行PK,规则以下:

1)首先检查ZXID,ZXID大的服务器优先做为Leader

2)ZXID相同,myid大的服务器做为Leader

4)将投票的处理结果发送给其余服务器,进行从新投票。

5)统计投票结果。若超过半数的服务器接受到相同的投票信息,则即可以认为选出了Leader。

6)改变服务器状态。一旦肯定了Leader,每台服务器根据选举结果,更新本身的状态为Leader或是Follower。

//启动的顺序不一样,选举的结果有可能不一样

2.服务器运行期间的Leader选举

前提:Leader服务器挂了。在服务器运行期间,Follower服务器挂掉不会影响Leader,只有当Leader服务器挂掉,才会进入选举状态。此时,整个集群暂停对外的服务,进入选举状态。

选举过程:

1)变动状态。Leader挂掉,其余的Observer服务器都会将本身的服务器状态变动为Looking,并进入选举过程。

。。。与初始化启动选举过程一致

名词:

1)Looking:寻找Leader状态。拥有此状态及服务器会进入Leader选举状态

2)Follower:跟随者状态。代表当前服务器的角色为Follower

3)Leading:领导者状态。代表当前服务器的角色为Leader

4)Observing:观察者状态。表名当前服务器的角色为Observer

myid:服务器ID,编号越大在选举中所占权重越大

ZXID:服务器中存放的最大数据ID,值越大代表数据越新,在选举中所占权重越大。

Epoch:逻辑时钟,每一轮投票过程当中逻辑时钟必须是相同的,每投完一轮这个数值就会增长。

相关文章
相关标签/搜索