您的位置:首页 > 其它

zookeeper的集群选主

2019-04-23 13:40 78 查看

zookeeper的集群选主

全新集群的选主

1:小ID强制投给已经投过票的成员中的最大ID
2:当投票达到半数以上,选举胜出的为leader,剩余都为follower
因素:启动顺序和ID大小有关
例如有3个节点,ID分别为1,2,3,4,5
启动顺序为1,2,3,4,5
当1启动的时候,给自己投票,然后将投票信息发送给其他服务器,由于其他服务器没有启动,所以它收不到反馈信息投票。处于looking状态
当2启动的时候,与已经投过票的服务器通信交换信息,2投给自己一票,1也要投给2,此时2一共有两票,但未超过半数,仍处于looking状态。
当3启动的时候,与已经投过票的服务器通信交换信息,3投给自己一票,1和2也要投给3,此时3一共有3票,超过半数,成为leader。
当4启动的时候,与已经投过票的服务器通信交换信息,发现已经选出leader,虽然ID大但也只能认命做follower
当5启动的时候,同4

非全新集群的选主

发生环境:zk中已经有数据,但有节点宕掉。重新选举

1:选举要素
data version:数据新的 version 就大,数据每次更新版本就会更新
version server id:服务器ID
逻辑时钟:其实就是参与投票的次数,参加选举一次 zxid 更新一次
选举中的角色
LOOKING,竞选状态。
FOLLOWING,随从状态,同步leader状态,参与投票。
OBSERVING,观察状态,同步leader状态,不参与投票。
LEADING,领导者状态。:
2:选举流程(选举线程由当前Server发起选举的线程担任,其主要功能是对投票结果进行统计,并选出推荐的Server)
选举线程首先向所有Server发起一次询问:
选举线程收到回复后,验证是否是自己发起的询问(验证zxid是否一致),然后获取对方的id(myid),并存储到当前询问对象列表中,最后获取服务提议的leader相关信息(id,zxid),并将这些信息存储到当次选举的投票记录表中
所有Server回复完毕,统计出出zxid最大的那个Server,并将这个Server相关信息设置成下一次要投票的Server
线程将当前zxid最大的Server设置为当前Server要推荐的Leader,如果此时获胜的Server票数超过server个数一半,此Server就是leader,并修改自己的状态

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: