zookeeper工作原理
1、zookeeper的角色
1)领导者(leader),负责进行投票的发起和决议,更新系统状态;
2)学习者(learner),包括跟随者(follower)和观察者(observer);follower用于接受客户端请求并向客户端返回结果,在选主过程中参与投票;
observer可以接受客户端连接,将写请求转发给leader,但observer不参与投票过程,只同步leader的状态,observer的目的是为了扩展系统,提供读写速度
3)客户端(client),请求的发起方。
zookeeper的核心是原子广播,这个机制保证了各个server之间的同步;实现这个机制的协议叫做zab协议
zab协议有两种模式,分别是恢复模式(选主)和广播模式(同步);当服务启动或者在领导者崩溃后,zab就进入了恢复模式,当领导者被选举出来,且大多数server完成了和leader的状态同步以后,恢复模式就结束了;
状态同步保证了leader和server具有相同的系统状态;
为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务;所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,他都会有一个新的epoch,标识当前属于那个leader的统治时期,低32位用于递增计数。
每个server在工作过程中有三种状态:
looking: 当前server不知道leader是谁,正在搜寻
leading: 当前server即为选举出来的leader
following: leader已经选举出来,当前server与之同步