赞
踩
Zookeeper的核心是源自广播,实现这个机制的协议是Zab协议。Zab协议有两种模式,分别是恢复模式和广播模式。当服务器启动或者领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后,恢复模式就结束了。
zookeeper次用了递增的食物id号(zxid)来标识事务。所有提议在被踢出来的时候都加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的统治时期。低32位用于递增计数。
server在工作过程中有三种状态:
(1)观察者:LOOKING,当前server不知道leader是谁,正在寻找
(2)领导者:LEADING,选举出的leader服务器
(3)跟随着:FOLLOWING,leader已经选出来,当前server与之同步
当前leader崩溃或者失去大多数的follower,这时候zk进入恢复模式,恢复模式需要重新选举出一个新的leader,让所有的Server都恢复到一个正确的状态。选举算法两种:basic paxos、fast paxos,默认是后者。
每个server重启或者启动都会先,找leader,如下:
(1)basic paxos:当前server向集群内所有server发起询问,得到回复,统计其他server推荐的leader,选择zxid最大的作为推荐leader,如果同时该server拥有超过半数的支持,则把它作为leader,修改自己的信息;如果没有获得半数以上支持则再次发起询问,直至得到leader信息。
(2)fast paxos:某Server首先向所有Server提议自己要成为leader,一周期后,如果没有被选择为leader,则根据收到的回复信息,更新自己的投票,重新发起提议(这次推荐其他server,zxid最大的 ),不断重复,直至选出leader。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。