普及几个基本概念
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通过选举机制,实现数据一致性,当服务器宕机或者增加服务器的时候,快速恢复数据,