文章目录
  1. 1. 什么是ZooKeeper
  2. 2. 为什么要使用Zookeeper?
  3. 3. Zookeeper的原理:
  4. 4. Zookeeper的安装和配置(单机模式):
  5. 5. ZooKeeper数据模型
  6. 6. Zookeeper的节点
  7. 7. 观察(watcher)
  8. 8. ZooKeeper的应用场景
    1. 8.1. 统一命名服务
    2. 8.2. 配置管理
    3. 8.3. 集群管理
  9. 9. 总结

什么是ZooKeeper

Zookeeper是Google的Chubby的一个开源实现,是Hadoop的分布式协调服务。Zookeeper包含了一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命令服务等。Zookeeper可以提供一组工具,使你在构建分布式应用时能够对部分失败进行正确处理。

为什么要使用Zookeeper?

大部分分布式应用需要一个主控、协调器或控制器来管理物理分布的子进程(如资源、任务分配等)

目前,大部分应用需要开发私有的协调程序,缺乏一个通用的机制。

协调程序的反复编写浪费资源,而且难以形成通用、伸缩性好的协调器。

Zookeeper提供通用的分布式锁服务,用以协调分布式服务。

Hadoop2.0使用Zookeeper的时间处理用来确保整个NameService中只有一个活跃的NameNode(利用选举机制),存储配置信息等。

Hbase使用Zookeeper的事件处理确保整个集群中只有一个Hmaster,察觉HRegionServer联机或down机,存储访问控制列表等。

Zookeeper的原理:

ddd

有两个NameNode,一个处于活跃状态,一个处于等待状态,FailoverController实时监控NameNode的状态,当NameNode状态down掉之后,FailoverController将信息通知给ZooKeeper,然后Zookeeper将会通知另一个FailoverController,将处于standby状态的NameNode变为激活状态。由于中间介质,处于Standby状态的NameNode和处于Active的NameNode的信息实时同步。之后,DataNode会想新的处于Active状态的NameNode的请求数据,这样就实现了协调分布式服务。

Zookeeper的安装和配置(单机模式):

  1. 下载ZooKeeper:http://labs.renren.com/apache-mirror/zookeeper/zookeeper-3.4.3/zookeeper-3.4.3.tar.gz
  2. 解压:tar xzf zookeeper-3.4.3.tar.gz
  3. 在conf目录下创建一个配置文件zoo.cfg,tickTime=2000
    dataDir=/Users/zdandljb/zookeeper/data
    dataLogDir=/Users/zdandljb/zookeeper/dataLog clientPort=2181
  4. 启动ZooKeeper的Server:sh bin/zkServer.sh start, 如果想要关闭,输入:zkServer.sh stop

只运行在一台服务器上,适合测试环境;Zookeeper 的启动脚本在 bin 目录下;在启动脚本之前,还有几个基本的配置项需要配置一下, tickTime :这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳;dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里;clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。当这些配置项配置好后,就可以启动 Zookeeper 了,启动后使用命令echo ruok | nc localhost 2181检查 Zookeeper 是否已经在服务。

ZooKeeper数据模型

  1. 层次化的目录结构,命名符合常规文件系统规范
  2. 每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识
  3. 节点Znode可以包含数据和子节点,但是EPHEMERAL类型的节点不能有子节点
  4. Znode中的数据可以有多个版本,比如某一个路径下存有多个数据版本,那么查询这个路径下的数据就需要带上版本
  5. 客户端应用可以在节点上设置监视器
  6. 节点不支持部分读写,而是一次性完整读写

znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的集中管理,集群管理,分布式锁等等。

Zookeeper的节点

  1. Znode有两种类型,短暂的(ephemeral)和持久的(persistent)
  2. Znode的类型在创建时确定并且之后不能再修改
  3. 短暂znode的客户端会话结束时,zookeeper会将该短暂znode删除,短暂znode不可以有子节点
  4. 持久znode不依赖于客户端会话,只有当客户端明确要删除该持久znode时才会被删除

    观察(watcher)

    Watcher 在 ZooKeeper 是一个核心功能,Watcher 可以监控目录节点的数据变化以及子目录的变化,一旦这些状态发生变化,服务器就会通知所有设置在这个目录节点上的 Watcher,从而每个客户端都很快知道它所关注的目录节点的状态发生变化,而做出相应的反应。

    ZooKeeper的应用场景

    统一命名服务

    分布式应用中,通常需要有一套完整的命名规则,既能够产生唯一的名称又便于人识别和记住,通常情况下用树形的名称结构是一个理想的选择,树形的名称结构是一个有层次的目录结构,既对人友好又不会重复。

    配置管理

    配置的管理在分布式应用环境中很常见,例如同一个应用系统需要多台 PC Server 运行,但是它们运行的应用系统的某些配置项是相同的,如果要修改这些相同的配置项,那么就必须同时修改每台运行这个应用系统的 PC Server,这样非常麻烦而且容易出错。

将配置信息保存在 Zookeeper 的某个目录节点中,然后将所有需要修改的应用机器监控配置信息的状态,一旦配置信息发生变化,每台应用机器就会收到 Zookeeper 的通知,然后从 Zookeeper 获取新的配置信息应用到系统中。

集群管理

Zookeeper 能够很容易的实现集群管理的功能,如有多台 Server 组成一个服务集群,那么必须要一个“总管”知道当前集群中每台机器的服务状态,一旦有机器不能提供服务,集群中其它集群必须知道,从而做出调整重新分配服务策略。同样当增加集群的服务能力时,就会增加一台或多台 Server,同样也必须让“总管”知道。

Zookeeper 不仅能够维护当前的集群中机器的服务状态,而且能够选出一个“总管”,让这个总管来管理集群。

总结

Zookeeper 作为 Hadoop 项目中的一个子项目,是 Hadoop 集群管理的一个必不可少的模块,它主要用来控制集群中的数据,如它管理 Hadoop 集群中的 NameNode,还有 Hbase 中 Master Election、Server 之间状态同步等。

Zoopkeeper 提供了一套很好的分布式集群管理的机制,就是它这种基于层次型的目录树的数据结构,并对树中的节点进行有效管理,从而可以设计出多种多样的分布式的数据管理模型。

文章目录
  1. 1. 什么是ZooKeeper
  2. 2. 为什么要使用Zookeeper?
  3. 3. Zookeeper的原理:
  4. 4. Zookeeper的安装和配置(单机模式):
  5. 5. ZooKeeper数据模型
  6. 6. Zookeeper的节点
  7. 7. 观察(watcher)
  8. 8. ZooKeeper的应用场景
    1. 8.1. 统一命名服务
    2. 8.2. 配置管理
    3. 8.3. 集群管理
  9. 9. 总结