zookeeper

来源:互联网 发布:坏种 知乎 编辑:程序博客网 时间:2024/05/20 11:50

ZooKeeperHadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

简介

  ZookeeperGoogleChubby一个开源的实现,是高有效和可靠的协同工作系统,Zookeeper能够用来leader选举,配置信息维护等,在一个分布式的环境中,需要一个Master实例或存储一些配置信息,确保文件写入的一致性等.[1]

  ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,包含一个简单的原语集,是HadoopHbase的重要组件。[2]

  (概述图片来源:[3]

原理

  ZooKeeper是以Fast Paxos算法为基础的,paxos算法存在活锁的问题,即当有多个proposer交错提交时,有可能互相排斥导致没有一个proposer能提交成功,而Fast Paxos作了一些优化,通过选举产生一个leader,只有leader才能提交propose,具体算法可见Fast Paxos。因此,要想弄懂ZooKeeper首先得对Fast Paxos有所了解。[4]

  ZooKeeper的基本运转流程:

  1、选举Leader

  2、同步数据。

  3、选举Leader过程中算法有很多,但要达到的选举标准是一致的。

  4Leader要具有最高的zxid

  5、集群中大多数的机器得到响应并follow选出的Leader[4]

特点

  在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据.如果在创建znodeFlag设置EPHEMERAL,那么当这个创建这个znode的节点和Zookeeper失去连接后,这个znode将不再存在在Zookeeper.Zookeeper使用Watcher察觉事件信息,当客户端接收到事件信息,比如连接超时,节点数据改变,子节点改变,可以调用相应的行为来处理数.ZookeeperWiki页面展示了如何使用Zookeeper来处理事件通知,队列,优先队列,,共享锁,可撤销的共享锁,两阶段提交.

  那么Zookeeper能作什么事情呢,简单的例子:假设我们我们有个20搜索引擎服务器(每个负责总索引中的一部分的搜索任务)和一个总服务器(负责向这20个搜索引擎的服务器发出搜索请求并合并结果集),一个备用的总服务器(负责当总服务器宕机时替换总服务器),一个web cgi(向总服务器发出搜索请求).搜索引擎的服务器中的15个服务器现在提供搜索服务,5个服务器正在生成索引.20个搜索引擎的服务器经常要让正在提供搜索服务的服务器停止提供服务开始生成索引,或生成索引的服务器已经把索引生成完成可以搜索提供服务了.使用Zookeeper可以保证总服务器自动感知有多少提供搜索引擎的服务器并向这些服务器发出搜索请求,备用的总服务器宕机时自动启用备用的总服务器。[1]

 

原创粉丝点击