之前看过一篇文档,描述了zk选举leader的实现过程,小弟我对zk理解不是很深,所以存在个问题,希望大佬们多留言,解除我心中的疑惑,
引用地址:https://blog.youkuaiyun.com/gaoshan12345678910/article/details/67638657
zk在初次启动时会进行leader选举,其选举规则也相对简单,大致过程如下:
前提:现在有5台zookeeper服务器,sid分别是1,2,3,4,5
1、每个server都会发出一次投票,投票中主要信息有sid(server的sid)(服务器唯一标识)和zxid(事务id,因为是初始化启动,所以此时zxid=0),现在进行第一轮投票,因为是第一轮投票,所以默认sid等于各自的标识
2、每个server会接受其它server的投票信息,然后依次跟自己的投票比较,比如sid=2的服务器,它当时投的票是[sid=2,zxid=0],接受到的投票有[sid=1,zxid=0]、[sid=3,zxid=0]、[sid=4,zxid=0]、[sid=5,zxid=0],这样进行依次比较后,得到[sid=5,axid=0],其它server也进行同样的操作,所以任何一个sever得到的结果都是[sid=5,zxid=0]
3、此时进行第二轮投票,基于上一轮的判断,这轮投票结果是这样的:sid=1服务器投票[sid=5,zxid=0]、sid=2服务器投票[sid=5,zxid=0]、sid=3服务器投票[sid=5,zxid=0]、sid=4服务器投票[sid=5,zxid=0]、sid=5服务器投票[sid=5,zxid=0]
即所有服务器投一样的票,都选sid=5的服务器当leader.根据规则,当某个服务器的选票超过一半以上即选它当leader,所以,最后的结果就是:sid=5这台服务器当leader了,恭喜这个服务器.
以上是选取leader的过程,
那么问题来了,按照这种规则选取,不就是选取