zookeeper选举制度

普及几个基本概念

zxid:peerepoch+ 每一次事物提交的Id

peerepoch(lastpeerepoch):头票的轮数,每一次发起投票都会改变 每一次发起投票的条件,及状态改变的条件 :失去leader 或者新的节点启动 所有的following或者和leader全部切换成looking

投票:各个节点进行投票,一般首次投票都选自己

leader:要选举的leader id 及server id

广播状态:

恢复状态:

zookeeper中分布式节点的状态:

following:节点的状态之一,表示跟随,在选举或者进行写操作的时候,进行投票

leader:表示主节点,有投票选出,有写操作过来的时候,都要经过leader,然后各个following分别投票,leader汇总,是否进行修改,修改成功,就同步各个following

oberving:节点只观察 不投票

looking:竞选状态

Leader选举投票过程

优先比较Peerepoch 然后比较zxid 最后比较serverid   a把这个信息发给b的服务器 b收到后,比较,如果b胜出,就不变b的投票信息,如果b输了,就更新b的投票信息为a的(清除hashmap集合,存放投票信息),然后在发送给各个服务器(重新吧投票信息放到hashmap中)  。recvset.put(n.sid, new Vote(n.leader, n.zxid, n.electionEpoch, n.peerEpoch));

write写请求投票过程

 写操作经过leader节点,收到后发给各个following节点。然后following节点投票 发给leader  leader判断 投票数大于一半。则写入执行。

以上就是zookeeper实现同步各个节点的过程。

zookeeper通过选举机制,实现数据一致性,当服务器宕机或者增加服务器的时候,快速恢复数据,

posted @ 2018-12-27 17:57  saveworld_niub  阅读(344)  评论(0)    收藏  举报