简单粗暴了解Zookeeper的选举制入个门

本文为作者自己理解的程度,希望看完后会对Zookeeper的选举制有一丢丢的了解。

害~首先你要知道两个东西,serverId(服务器ID,myid)和zxid(最新的事物ID,服务器中存放的最大数据ID, LastLoggedZxid)

myid越大越有可能成为Leader喔

zxid越大说明数据越新越有可能成为Leader喔

然后呢,能Leader选举需同时满足两个条件

1)集群中剩下active(活着的)的机器要大于集群中服务器总数的一半

2)服务器得到的票数要大于半数。

重点来了,然后在比较票的时候,优先看zxid大小,zxid大,则此服务器为Leader。若zxid一样,就看myid比大小,myid大,则此服务器为Leader。

以下两种情况会触发选举

1.服务器初始化时触发Leader选举

2.服务器运行时期触发Leader选举(当前的Leader挂啦)

废话不多说,直接上例子:

第一种情况:

                     1)在初始化时,当一个Server1启动时,其无法单独进行和完成Leader选举,当第二台服务器Server2启动后,就可以开始选举了。所以这可以说明至少有两台机器才可以做选举。

                     2)由于是初始化阶段,两台服务器都会给自己投票。所以Server1的投票为(1, 0),Server2的投票为(2, 0)。然后各自再把投票发给集群中其他的机器,这里没有其他别的机器,就是Server1和Server2

                    3)现在看Server1,它自己的投票是(1,0),接收到Server2的投票(2,0)。所以先比一下zxid,一看都是0,所以我们需要看myid大小,1<2,所以Server1需要变更自己的投票为(2,0)

                    4)再来看Server2,它自己的投票是(2,0),接收到Server1的投票(1,0)。所以先比一下zxid,一看都是0,下面再来看myid大小,2>1,所以Server2不需要变更自己的投票,依然是(2,0)

                    5)综上,Server2得到两张票,(票数过半,活着的机器为2,两者都过半了),所以Server2为Leader。

                    6)所以Server2的状态为Leader,Server1的状态为follower。

第二种情况:

                      如果当前集群中的Leader挂了,那么集群中剩下的活着的机器状态变成Looking,开始进入Leader选举。

                      假设集群中有5台机器Server1,Server2,Server3,Server4,Server5,当前的Leader为Server2(然鹅它挂了)。serverId分別为1、2、3、4和5, zxid分别为9、9、9、8和8。

                     1)第一次投票,每台机器都是将自己作为被推举的对象来进行投票。所以Server1的票(1,9),Server3的票(3,9),Server4的票(4,8),Server5的票(5,8)。

                     2)同时各台服务器也会接收到来自集群中其他机器的投票。

                        对于Server1来说,自己的投票为(1,9),它接收到的票分别为(3,9),(4,8),(5,8),对比后发现,Server1的zxid比Server4和Server5都大,但是相对于Server3,Server1的serverId比Server3小。所以Server1的票要更新成(3,9)。

                       对于Server3来说,自己的投票为(3,9),它接收到的票分别为(1,9),(4,8),(5,8),对比后发现,Server1的zxid比Server4和Server5都大,但是由于自己的serverId要大于Server1,所以Server3的票不变更为(3,9)。

                       对于Server4来说,自己的投票为(4,8),它接收到的票分别为(1,9),(3,9),(5,8),对比后发现,Server5的zxid和自己都小,然后Server3的serverId比Server1大,所以Server4的票要更新成(3,9)。

                       对于Server5来说,自己的投票为(5,8),它接收到的票分别为(1,9),(3,9),(4,8),对比后发现,Server4的zxid和自己都小,然后Server3的serverId比Server1大,所以Server4的票要更新成(3,9)。

                    3)综上,Server3得到4张票,票过半,活着的机器也过半,所以此时Server3为Leader,其余机器是小弟follower。

好啦,浅显的谈了谈Zookeeper的选举制,大概懂了点了吧~

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值