您的位置:首页 > 其它

Zookeeper入门指南

2013-11-26 10:24 344 查看

1.     简介

Zookeeper分布式服务框架是ApacheHadoop的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。本文将从使用者角度介绍Zookeeper的安装和配置文件中各个配置项的意义。

2.     Zookeeper特性

Zookeeper是一种高性能、可扩展的服务。Zookeeper的读写速度非常快,并且读的速度要比写的速度更快。另外,在进行读操作的时候,Zookeeper依然能够为旧的数据提供服务。这些都是Zookeeper所提供的一致性保证,它具有如下特点:

u 结构简单

类似于文件系统的树状结构

u 最终一致性

无论客户端连接到哪一个服务器,他将看到相同的Zookeeper视图

u 可靠性

具有简单、健壮、良好的性能,如果消息m被一台服务器接受,那么它将被所有的服务器接受

u 实时性

Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。但由于网络延时等原因,Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sysnc()接口。

u 有序性

包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息a在消息b前发布,则在所有Server上消息a将在消息b前被发布;偏序是指如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面

u 原子性

更新操作要么成功,要么失败,没有第三种结果

3.     Zookeeper工作原理

Zookeeper的核心是原子广播,这个机制保证了各个server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,他们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数server完成了和leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和server具有相同的系统状态。

为了保证事务的顺序一致性,Zookeeper采用了递增的事务id号(zxid)来标示事务。所有的提议都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它都会有一个新的纪元,标示当前属于哪个leader的统治时期。低于32位用于递增计数。

每个Server在工作过程中有三种状态:

u Looking:当前server不知道leader是谁,正在搜寻

u Leading:当前Server即为选举出来的leader

u Following:leader已经选举出来,当前server与之同步

4.     安装和配置详解

本文介绍的Zookeeper是以zookeeper-3.4.5这个稳定版本为基础,最新的版本可以通过http://hadoop.apache.org/zookeeper/来获取,Zookeeper的安装非常简单,下面将从单机模式和集群模式这两方面介绍Zookeeper的安装和配置。

5.     单机模式

单机安装非常简单,只要把Zookeeper的压缩包解压到某个磁盘目录下即可。Zookeeper的启动脚本在bin目录下,Linux下的启动脚本是zkServer.sh,windows下的启动脚本是zkServer.cmd。

在执行启动脚本之前,还有几个基本配置项需要配置以下,Zookeeper的配置文件在conf目录下,这个目录下有zoo_sample.cfg和log4j.properties,你需要做的就是将zoo_sample.cfg重命名为zoo.cfg,因为Zookeeper在服务启动时会默认加载这个文件。下面详细介绍一下,这个配置文件中各个配置项的意义。

tickTime=2000
 dataDir=D:/temp/zookeeper
 clientPort=2181
u tickTime:这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳。

u dataDir:顾名思义就是Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存到这个目录里。

u clientPort:这个端口就是客户端连接Zookeeper服务器的端口,Zookeeper会监听这个端口,接受客户端的请求访问。

当这些配置项配置好后,就可以启动Zookeeper了,启动后要检查Zookeeper是否已经存在服务,可以通过netstat – ano命令查看时候有你配置的clientPort端口号在监听服务。

6.     集群模式

Zookeeper不仅可以单机提供服务,同时也支持多机组成集群来提供服务。实际上Zookeeper还支持另外一种伪集群的方式,也就是可以在一台物理机运行多个Zookeeper示例,下面将介绍集群模式的安装和配置。

Zookeeper的集群模式的安装和配置也不是很复杂,所要做的就是增加几个配置项。集群模式除了上面的三个配置项还有增加下面几个配置项:

initLimit=5
 syncLimit=2
 server.1=192.168.211.1:2888:3888
 server.2=192.168.211.2:2888:3888
u initLimit:这个配置项是用来配置Zookeeper接受客户端(这里所说的客户端不是用户连接Zookeeper服务器的客户端,而是Zookeeper服务器集群连接到Leader和Follower服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过10个心跳的时间(也就是tickTime)长度后Zookeeper服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长就是5*2000=10秒

u sysncLimit:这个配置项标示Leader与Follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime是的时间长度,总的时间长度就是2*2000=4秒

u server.A=B:C:D:其中A是一个数字,表示这个是第几号服务器;B是这个服务器的ip地址;C表示的是这个服务器与集群中的Leader服务器交互信息的端口;D表示的是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于B都是一样,所以不同的Zookeeper实例通信端口号不能一样,所以要给他们分配不同的端口号。

除了修改zoo.cfg配置文件,集群模式下还要配置一个文件myid,这个文件在dataDir目录下,这个文件里面就有一个数据就是A的值,Zookeeper启动时读取这个文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: