Chinaunix首页 | 论坛 | 博客
  • 博客访问: 181851
  • 博文数量: 64
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 616
  • 用 户 组: 普通用户
  • 注册时间: 2015-06-09 20:25
文章分类

全部博文(64)

文章存档

2016年(25)

2015年(39)

我的朋友

分类: HADOOP

2015-08-21 13:57:26

ZooKeeper是一个分布式的,开放源码的分布式应用程序,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。

Zookeeper中的server机器之间会组成leader/follower集群,1n的关系,采用了paxos一致性算法保证了数据的一致性,就是leader/follower会采用通信方式进行投票实现paxns

其中的角色有三类,

leader,领导者负责投票的发起和决议,更新系统状态

learnerfollowerobserverfollower用于接受客户请求并向客户端返回结果,在选主过程中参与投票,observer可以接受客户端连接,将写请求转发给leader节点,但observer不参加投票,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度

clinet,请求发起方

特性:clinet不论接到哪个server,展示给它都是同一个视图。可靠性强,简单,健壮,良好的性能,如果消息被一台服务器接受,那么它将被所有的服务器接受,实时性好,保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失败的信息,但由于网络延时的原因,不能保证两个客户端同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。慢的或者失效的clinet不得干预快速的clinet的请求,从而每个clinet都能有效的等待。

一.            原子广播,保证了各个server之间的同步。Zab协议,分两种模式,回复模式和广播模式。当服务启动或者在领导者崩溃后,Zab进入回复模式,当领导者被选举出来,绝大多数server完成了和leader的状态同步以后,恢复模式就结束了,状态同步保证了leaderserver具有相同的系统状态

二.            顺序一致性,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 paxosfast paxos的流程是

1.      选举线程由当前server发起选举的县城担任,其主要功能是对投票结果进行统计,并选出推荐的server

2.      选举线程首先向所有的server发起一次询问

3.      选举线程收到回复后,验证是否是自己发起的询问,(验证zxid是否一致),然后获取对方的idmyid),并存储到当前询问对象列表中,最后获取对方提议的leader相关信息(idzxid),并将这些信息存储到当次选举的投票记录表中

4.      收到所有server回复以后,就计算处zxid最大的那个server,并将这个server相关信息设置成下一次投票的server

5.      线程将当前zxid最大的server设置为当前server要推荐的leader,如果此时获胜的server获得n/2+1server票数,设置当前推荐的leader为获胜的server,将根据获胜的server相关嘻嘻设置自己的状态,否则,继续这个过程,直到leader被选举出来

6.      Fast paxos流程是在选举过程中,某个server向所有server提出要成为leader,当其他server收到提议后,解决epochzxid的冲突,并接受对方的提议,然后向对方发送接收提议完成的消息,重复这个流程,最后一定能选举出leader

选取完leaderzk进入同步状态

1.      leader等待server连接

2.      follower连接leader,将最大的zxid发送给leader

3.      leader根据followerzxid确定同步点

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消息:根据LeaderREVALIDATE结构,关闭待revalidatesession还是允许其接受消息

SYNC消息:返回SYNC结果到客户端,这个消息最初由客户端发起,用来强制得到最新的更新。

Follower的工作流程简图如下所示,在实际实现中,follower是通过5个县城来实现功能的


阅读(992) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~