分类: HADOOP
2015-08-21 13:57:26
ZooKeeper是一个分布式的,开放源码的分布式应用程序,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。
Zookeeper中的server机器之间会组成leader/follower集群,1:n的关系,采用了paxos一致性算法保证了数据的一致性,就是leader/follower会采用通信方式进行投票实现paxns。
其中的角色有三类,
leader,领导者负责投票的发起和决议,更新系统状态
learner(follower,observer)follower用于接受客户请求并向客户端返回结果,在选主过程中参与投票,observer可以接受客户端连接,将写请求转发给leader节点,但observer不参加投票,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度
clinet,请求发起方
特性:clinet不论接到哪个server,展示给它都是同一个视图。可靠性强,简单,健壮,良好的性能,如果消息被一台服务器接受,那么它将被所有的服务器接受,实时性好,保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失败的信息,但由于网络延时的原因,不能保证两个客户端同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。慢的或者失效的clinet不得干预快速的clinet的请求,从而每个clinet都能有效的等待。
一. 原子广播,保证了各个server之间的同步。Zab协议,分两种模式,回复模式和广播模式。当服务启动或者在领导者崩溃后,Zab进入回复模式,当领导者被选举出来,绝大多数server完成了和leader的状态同步以后,恢复模式就结束了,状态同步保证了leader和server具有相同的系统状态
二. 顺序一致性,zookeeper采用了递增的事物id号(zxid)来标示事物,所有的提议(proposal)都在被提出的时候加上zxid。实现zxid是一个64位的数字,它高32位是epoch用来标示leader关系是否被改变,都会有一个epoch,标示当前属于哪个leader的通知时期,低32位用于递增技术。每个server在工作过程中有三种状态。LOOKING,LEADIN,FOLLOWING
三. 选主流程,当leader崩溃或者leader市区大多数follower,这时候zk进入恢复模式,恢复模式需要重新选举出一个新的leader,让所有的server都恢复到一个正确的状态,一个是基于basic paxos实现,一个是基于fast paxos算法实现的,系统默认是fast paxos,fast paxos的流程是
1. 选举线程由当前server发起选举的县城担任,其主要功能是对投票结果进行统计,并选出推荐的server
2. 选举线程首先向所有的server发起一次询问
3. 选举线程收到回复后,验证是否是自己发起的询问,(验证zxid是否一致),然后获取对方的id(myid),并存储到当前询问对象列表中,最后获取对方提议的leader相关信息(id,zxid),并将这些信息存储到当次选举的投票记录表中
4. 收到所有server回复以后,就计算处zxid最大的那个server,并将这个server相关信息设置成下一次投票的server
5. 线程将当前zxid最大的server设置为当前server要推荐的leader,如果此时获胜的server获得n/2+1的server票数,设置当前推荐的leader为获胜的server,将根据获胜的server相关嘻嘻设置自己的状态,否则,继续这个过程,直到leader被选举出来
6. Fast paxos流程是在选举过程中,某个server向所有server提出要成为leader,当其他server收到提议后,解决epoch和zxid的冲突,并接受对方的提议,然后向对方发送接收提议完成的消息,重复这个流程,最后一定能选举出leader。
选取完leader后zk进入同步状态
1. leader等待server连接
2. follower连接leader,将最大的zxid发送给leader
3. leader根据follower的zxid确定同步点
4. 完成同步后通知follower已经成为uptodate状态
5. Follower收到uptodare消息后,又可以重新接受client的请求进行服务了
工作流程
Leader工作流程
Leader主要有三个功能
1, 恢复数据
2, 维持与learner的连接,接受lerner请求并判断learner的请求消息类型
3, Learner的消息类型主要有ping消息,REQUEST消息,ACK消息,REVALIDATE消息,根据不同的消息类型,进行不同的处理。
4, PING消息是指learner的心跳信息,REQUEST消息是Follower发送的提议信息,包括写请求及同步请求,ACK消息是follower的对提议的付汇,超过半数的follower通过,则commit该提议,REVALIDATE消息是用来延长session有效时间。
Follower工作流程
1. 向leader发送请求(PING,REQUEST,ACK,REVALIDATE)
2. 接收leader消息并进行处理
3. 接收client的请求,如果为写请求,发送给leader进行投票
4. 返回client结果
Follower的消息循环处理如下几种来自leader的消息
Ping消息:心跳消息
PROPOSAL消息:leader发起的提案,要求follower投票
COMMIT消息:服务器端最新一次提案的消息
UPTODATE消息:表明同步完成
REVALIDATE消息:根据Leader的REVALIDATE结构,关闭待revalidate的session还是允许其接受消息
SYNC消息:返回SYNC结果到客户端,这个消息最初由客户端发起,用来强制得到最新的更新。
Follower的工作流程简图如下所示,在实际实现中,follower是通过5个县城来实现功能的