使⽤Zookeeper实现选举策略
场景
铸造工艺流程
有⼀个向外提供的服务,服务必须7*24⼩时提供服务,不能有单点故障。所以采⽤集的⽅式,采⽤master、slave的结构。⼀台主机多台备机。主机向外提供服务,备机负责监听主机的状态,⼀旦主机宕机,备机要迅速接代主机继续向外提供服务。从备机选择⼀台作为主机,就是master选举。原理分析
右边三台主机会尝试创建master节点,谁创建成功了,就是master,向外提供。其他两台就是slave。 所有slave必须关注master的删除事件(临时节点,如果服务器宕机了,Zookeeper会⾃动把master节点删除)。如果master宕机了,会进⾏新⼀轮的master选举。本次我们主要关注master选举,服务注册、发现先不讨论。
使⽤Zookeeper原理
» 领导者(leader),负责进⾏投票的发起和决议,更新系统状态
» 学习者(learner),包括跟随者(follower)和观察者(observer),follower⽤于接受客户端请求并想客户端返回结果,在选主过程中参与投票
» Observer可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的⽬的是为了扩展系统,提⾼读取速度
» 客户端(client),请求发起⽅
职业价值观测评系统· Zookeeper的核⼼是原⼦⼴播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协
番茄加速
打塞机议。Zab协议有两种模式,它们分别是恢复模式(选主)和⼴播模式(同步)。当服务启动或者在领导者
崩溃后,Zab就进⼊了恢复模式,当领导者被选举出来,且⼤多数Server完成了和leader的状态同步以后
yig滤波器
,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。
tod分动器
· 为了保证事务的顺序⼀致性,zookeeper采⽤了递增的事务id号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是⼀个64位的数字,它⾼32位是epoch⽤来标识 leader关系是否改变,每次⼀个leader被选出来,它都会有⼀个新的epoch,标识当前属于那个leader的 统治时期。低32位⽤于递增计数。 · 每个Server在⼯作过程中有三种状态:
LOOKING:当前Server不知道leader是谁,正在搜寻
LEADING:当前Server即为选举出来的leader
FOLLOWING:leader已经选举出来,当前Server与之同步