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 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 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。
相关文章推荐
- union关键字和取类成员函数地址的方法
- MyEclipse代码格式化后自定义模版不换行设置方法
- python模块安装:numpy、pylab(转)
- 如何实现Flash中背景变色
- OCP-1Z0-052-V8.02-117题
- Initialization of data members
- 《转》如何成为一个牛逼的C/C++程序员?
- B-tree & B+tree & B*Tree 结构浅析——转
- android ListView中有按钮,无法获取焦点?android:descendantFocusability用法简析
- Eclipse中,常用的快捷键大全
- 时间测试函数
- Linux core dump的详细介绍及使用
- android ListView中有按钮,无法获取焦点?android:descendantFocusability用法简析
- 详解JMeter函数和变量
- zuccoj1450
- 读者写者问题——读者优先,写者优先,公平竞争 解决方法
- Linux内核源码分析方法
- python操作处理Excel文件(转)
- [Unity]让unity程序后台运行
- Renderer.materials