Chinaunix首页 | 论坛 | 博客
  • 博客访问: 402292
  • 博文数量: 87
  • 博客积分: 2571
  • 博客等级: 少校
  • 技术积分: 920
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-29 13:10
文章分类

全部博文(87)

文章存档

2012年(49)

2011年(7)

2010年(26)

2009年(5)

分类: Java

2011-08-29 16:24:27

基于zookeeper-3.3.3


先来点简介:

  1. 功能:

  2. ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
  3. Zookeeper是Google的Chubby一个开源的实现.是高有效和可靠的协同工作系统.Zookeeper能够用来leader选举,配置信息维护等.
  4. 选举和同步:

  5. ZooKeeper以复合模式运行在一组叫做ensemble的集群上, ZooKeeper通过复制来获得高可用性, 同时, 只要ensemble中的大部分机器都运行正常就可以提供服务. 比如说, 在一个5节点ensemble中, 可以在任何两台机器故障的情况下服务仍在运作, 如果6节点的话, 也只能承受两台出现故障, 因此一个ensemble通常选择奇数台机器.
  6. ZooKeeper的思想非常简单: 它所需要做的就是保证对znode树的每一次修改都复制到ensemble中的大部分机器上去.
  7. ZooKeeper采用了Zab协议, 它分为两个阶段, 并且可能被无限制的重复.
  8. 阶段1:领导者选举
  9. 在ensemble中的机器要参与一个选择特殊成员的进程, 这个成员叫做领导者, 其他机器则叫做跟随者, 在大部分的跟随者与它们的领导者同步了状态以后, 这个阶段才算完成.
  10. 阶段2:原子广播
  11. 所有的写操作请求被传送给领导者, 并通过广播将更新信息告诉给跟随者, 当大部分跟随者执行了修改后, 领导者就会提交更新操作, 客户端将得到更新成功的回应.
  12. 如果领导者出现故障, 剩下的机器将会再次进行领导者选举, 并在新领导者被选出来之前继续执行任务. 如果在不久之后, 老的领导者恢复了. 那么它将以跟随者的身份继续运行, 领导者的选举非常快(200ms左右), 因此不会带来明显的延迟.
  13. 所有在ensemble中的机器在更新它们的内存中的znode树之前会先将更新信息写入磁盘. 读操作请求可能由任何机器服务, 同时由于它们只涉及到内存查找, 因此非常快.


zookeeper的一些处理原则

1.可靠 delivery

如果消息m被一台服务器delivered,它会被所有服务器delivered

2.完全有序

如果消息a在一台服务器上先于消息b被delivered,在所有服务器上都保持这个顺序

3.因果顺序(causual order)

消息的发送顺序决定了消息的顺序


-- zookeepker使用TCP,下列几个特性依赖TCP的特性

(与同类系统容忍丢包和乱序不同,zookeepker假定所有servers建立在 p2p的FIFO通道上)3


4.有序delivery(Ordered delivery)

5.FIFO channel一旦关闭,就不能发送任何信息

6.发送消息包括两个阶段

  * Leader activation :本阶段会推选一个leader,并建立系统状态和次序,准备好发送proposal

  * Active messaging :本阶段leader会接收message,并协调系统中message的传送

7.Leader activation

  包括Leader election,其有两个算法,LeaderElection和FastLeaderElection(AuthFastLeaderElection是其变种,是一种简单的授权以防止IP欺骗的election方式)

  但ZooKeeper messaging不关注election算法,而

  * leader获取到所有followers中的最大zxid (必要条件)

  * 一定量的servers已经follow这个leader 

  在election过程中或完成后,有较多服务器断开,则会重新进行election

   所有follower会连接到leader

8.Active Messaging 

   * leader以FIFO方式给所有Followers发送message,Followers按顺序存储和执行

   * 当Followers收到message后,要返回一个ack给leader

   * 当leader收到quorum Followers的 ack后,会发送一个COMMIT



zxid      ZooKeeper Transaction id,所有proposal都有唯一标识其和其顺序的zxid

  目前为64位表示一个zxid(epoch, count).,高32位为epoch,低32位为counter

  epoch与一个leader关联,新leader有新epoch号

packet  由FIFO channel发送的字节数据

proposal   一种约定(在所有zookeepker服务器之间),一般带有message(NEW_LEADER类型的不带message)

message   原子广播包,需放入 proposal或agreed才能发送

quorum   法定人数,zookeeper 中指有些操作必须有一定数量的followers,才能执行
 
阅读(8614) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~