您的位置:首页 > 其它

zookeeper学习之一(简介和安装)

2015-06-21 16:08 295 查看

一、zookeeper介绍
直接翻译官网的What is zookeeper。
Zookeeper是一个关于 配置信息,命名,提供分布式同步和集群service的一站式服务。所有的这些服务或者(他们)别的表现形式经常在应用于分布式系统中。每一次去实现他们,都不可避免的花费大量的工作去修复bugs和(调整)竞争条件。因为实现这类服务很难,所以在一开始就要谨慎的对待他们。否则他们将变得很脆弱和难以管理! 即使正确的完成了,这些服务的不同实现,仍然可能导致部署后维护的复杂性。
我的水平只能翻译成这样了,原文比较古怪。


原文地址:http://zookeeper.apache.org/

二、配置和安装
点击这里下载安装包,我采用的是最新的3.4.6,是一个stable版本。
安装方式采取伪分布式部署。即在同一台机器上部署多个节点。安装过程比较简单。多台机器也同理。

1.把下载下来的安装包放在/opt/shencl/zookeeper/目录下,tar -zxvf 解压,改名 zookeeper-3.4.6_0。

2. 复制一份zoo_sample.cfg,命名为zoo.cfg。编辑zoo.cfg,我们准备部署3个节点,所以加入如下配置,
tickTime=2000
initLimit=5
syncLimit=2
dataDir=/opt/shencl/zookeeper/data/data0
dataLogDir=/opt/shencl/zookeeper/log/log0
clientPort=2180
server.0=127.0.0.1:2888:3888
server.1=127.0.0.1:2889:3889
server.2=127.0.0.1:2890:3890

参数解释:
tickTime: 客户端和服务端或者服务端多个节点之间维持心跳的时间间隔,单位毫秒。
initLimit:服务端节点初始化时,相互通信的等待时间。一个单位就是tickTime的值。
syncLimit:服务端节点之间同步数据的间隔时间。一个单位就是tickTime的值。
dataDir: 数据文件存放目录。
dataLogDir:用来重做数据的事务日志文件存放目录。
clientPort:给客户端连接的端口。
server.0,server.1,server.2表示节点编号,后边用冒号隔开的三个数字,分别表示节点的ip,交换数据的端口号,某个节点挂掉之后专门用来选举的端口号。
注:initLimit,syncLimit在单节点部署模式下,不需要配置。

3. 在dataDir目录下创建myid文件,写入该节点的编号 0 。这样一个节点就配置完成了。

4.复制 zookeeper-3.4.6_0 到 zookeeper-3.4.6_1和 zookeeper-3.4.6_2,要修改的地方是 zoo.cfg里的 dataDir,dataLogDir,clientPort。还有需要在自己的data目录下新建myid文件,写入自己的编号。

最终的目录结构如下:



三、启动和测试
分别进入三个节点的bin目录,启动zookeeper,运行./zkServer.sh start。

注:前边节点启动的时候,会抛出一些错误,可忽略。这是因为另外的节点没启动,导致的通信异常。

可以用自带的基于telnet的客户端测试一下,看看是否启动成功。随便进入一个节点的bin目录,比如节点0

./zkCli.sh -server 127.0.0.1:2180,随便输入一个字符,他会跳出help界面。说明服务端启动成功。



比较重要的有ls, get,set,create,delete等等,path参数必须以/开头。留意create命令的 acl参数(Access Control权限控制)和set命令的 version参数
我们用create命令创建一个znode /testnode , 然后ls,发现已经创建成功了!



可以连上另外两个节点server.1 和 server.2 (在这里仅需要换一下端口) 观察, 发现数据已经被同步过来了,也已经有/testnode了。如下图



再看看set和get命令,把他的值改成 iwantchangemynode



可以看到不但数据改过来了,dataVersion也已经是1了(计数器从0开始)
aclVersion仍然还是0,因为我并没有修改acl的类型。

此外zookeeper记录下来的数据还有node的 各种zxid(ZooKeeper Transaction Id),以及ctime,mtime等等。

四、总结

可以看到,zookeeper仅仅是维护了一个分布式的树形目录。如下图。它通过fast paxos算法保证多个节点上znode的数据一致性。一套zookeeper可以同时给多个应用程序使用,只需要隔离好各自的path~。在生产环境中,多个程序,比如hadoop,hbase,strom共用一套zookeeper也是常事。结构如下图。



zookeeper仅仅维护了一份目录树,那他又是如何支持Leader election、Shared lock、Queue这些牛x哄哄的功能呢?

请看下篇 zookeeper学习之二(高级特性)

本文参考:

http://zookeeper.apache.org/

/article/4831218.html

http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/

http://www.blogjava.net/BucketLi/archive/2010/12/21/341268.html

/content/2623596.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: