Zookeeper介绍

本文介绍了ZooKeeper的基本概念,包括其作为一个分布式协调服务的主要功能,如配置管理、名字服务、分布式同步和集群管理等。此外,还详细讲解了ZooKeeper的安装配置过程及集群配置方法,展示了其分布式协调服务框架的架构,并提供了简单的客户端操作指南。

一.简介

        ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。Chubby是google分布式系统中的锁服务,锁机制说白了就是资源的一个协调和管理。比如在一个并发的环境里,为了避免多个运行单元对共享数据同时进行修改,造成数据损坏的情况出现,就必须依赖像锁这样的协调机制,让有的线程可以先操作这些资源,然后其他线程等待。对于线程内的锁来讲,我们使用的各种语言平台都已经给我们准备很多种选择,如java中synchronized、ReadWriteLock等,但在线程内的协调相对简单,对方法的调用结果,成功就是成功,失败就是失败,结果是明确的且确定的。在网络分布式的环境下,就会出现很多复杂的状况,可能服务调用失败了,实际是执行成功的,同一时间的调用,会因为网络延迟结果不一定同时返回。在分布式环境中为了提升可靠性,往往会部署多套服务,如何在多套服务中达到一致,做到良好的协调,这就是zookeeper要解决的问题。

二.功能

       “ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services”。根据描述,zookeeper是一个服务中心,提供配置管理、命名服务、分布式同步和集群管理。

1.配置管理

      在项目中很多情况用到配置文件,配置文件的方便之处在于不用嵌入和关心代码,极大方便了修改和部署,随着分布式的应用,往往多个服务器或节点会有相同的配置项,把这些相同的配置集中管理,zookeeper就可以提供这种集中配置管理的服务,并通过一致性协议提供高可靠性的服务。在实际中,HBase、Hadoop、kafaka等都使用了zookeeper。

2.名字服务

     名字服务就类似于DNS服务,由于IP地址不好记忆,通过域名的方式更符合人们的习惯,所以DNS就应运而生。这里的名字服务,就是为了更好地管理服务名与服务地址的关系,通过服务名直接可以定位到服务地址,这样当希望调用某个服务的时候,通过服务名就可以得到服务的调用地址了。

3.分布式同步

      分布式同步是通过分布式锁的方式来实现的,zookeeper可以协调多个分布式进程之间的活动,为了提高可靠性,集群中的每一台服务器都部署了同样的服务,一件事情如果集群中的每个服务器都进行的话,那相互之间就要协调,编程起来将非常复杂。而如果只让一个服务进行操作,那又存在单点。通常还有一种做法就是使用分布式锁,在某个时刻只让一个服务去干活,当这台服务出问题的时候锁释放,立即fail over到另外的服务。

4.集群管理

      在分布式集群中,有各种各样的情况,比如集群的监控、节点的移除和添加、网络问题、节点故障,集群中的机器要感知这种变化,并根据变化做出相应的调整,这也是zookeeper提供的功能。

三.安装和配置

1.安装包下载,地址官网,本次下载的版本为zookeeper-3.4.6

2.单机配置

    到zookeeper解压后目录的config文件夹,拷贝zoo_sample.cfg为zoo.cfg,主要配置项

参数
含义
示例
tickTime the number of milliseconds of each tick

2000

initLimit the number of ticks that the initial synchronization phase can take

10

syncLimit the number of ticks that can pass between sending a request and getting an acknowledgement

5

dataDir data directory

/tmp/zookeeper

clientPort the port at which the clients will connect

2181

   启动命令bin/zkServer.sh start

   客户端连接命令bin/zkCli.sh -server localhost:2181

3.集群配置

     在zoo.cfg中添加server配置信息,格式如server.X=A:B:C,单机时则不用配置,其中X是一个数字, 表示这是第几号server. A是该server所在的IP地址. B配置该server和集群中的leader交换消息所使用的端口. C配置选举leader时所使用的端口,另外在每个分机的dataDir下创建myid,名称为数字X,即本Server的编号,作为区分的标识。

     ZooKeeper采用一种称为Leader election的选举算法。ZooKeeper集群启动的时候,会首先选出某一满足的节点作为Leader,在整个集群运行过程中,只有一个Leader,其他的都是Follower,如果ZooKeeper集群在运行过程中Leader出了问题,系统会采用该算法重新选出一个Leader。因此,各个结点之间要能够保证互相连接。

更多具体的信息可参考官网说明,官网上往往是最好的资料。

四.架构说明

ZooKeeper分布式协调服务框架的总体架构

 

         ZooKeeper集群由一组Server节点组成,这一组Server节点中存在一个角色为Leader的节点,其他节点都为Follower。当客户端Client连接到ZooKeeper集群,并且执行写请求时,这些请求会被发送到Leader节点上,然后Leader节点上数据变更会同步到集群中其他的Follower节点。Leader节点在接收到数据变更请求后,首先将变更写入本地磁盘,以作恢复之用。当所有的写请求持久化到磁盘以后,才会将变更应用到内存中。ZooKeeper使用了一种自定义的原子消息协议,在消息层的这种原子特性,保证了整个协调系统中的节点数据或状态的一致性。Follower基于这种消息协议能够保证本地的ZooKeeper数据与Leader节点同步,然后基于本地的存储来独立地对外提供服务。当一个Leader节点发生故障失效时,失败故障是快速响应的,消息层负责重新选择一个Leader,继续作为协调服务集群的中心,处理客户端写请求,并将ZooKeeper协调系统的数据变更同步(广播)到其他的Follower节点。

五.客户端工具简单操作

1. 显示根目录下、文件: ls / 使用 ls 命令来查看当前 ZooKeeper 中所包含的内容

2. 显示根目录下、文件: ls2 / 查看当前节点数据并能看到更新次数等数据

3. 创建文件,并设置初始内容: create /zk "test" 创建一个新的 znode节点“ zk ”以及与它关联的字符串

4. 获取文件内容: get /zk 确认 znode 是否包含我们所创建的字符串

5. 修改文件内容: set /zk "zkbak" 对 zk 所关联的字符串进行设置

6. 删除文件: delete /zk 将刚才创建的 znode 删除

7. 退出客户端: quit

8. 帮助命令: help

参考:

http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html#sc_RunningReplicatedZooKeeper

http://shiyanjun.cn/archives/474.html

http://www.cnblogs.com/kunpengit/p/4045334.html   工具命令

http://blog.youkuaiyun.com/huwei2003/article/details/49101269   hello world


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值