Apache ZooKeeper Getting Started Guide 翻译


ZooKeeper 開始向导
  • 開始用zookeeper协调分布式程序
    • 单例操做
    • 管理zookeeper存储
    • 链接zookeeper
    • 执行zookeeper
    • 以复制模式执行zookeeper
    • 其余优化
Getting Started:经过zookeeper协调分布式程序
这份文档包括了让你高速開始使用zookeeper的帮助信息。

文章主要是针对0基础想尝试使用zookeeper的开发人员,当中包括了一些简单的样例。仅用一台zookeeperserver,一些命令确认server正在执行,一个简单的程序样例。html

文章最后,为了方便,也有一些内容考虑到一些相对复杂些的样例。列如,以复制模式部署,优化事务。node

但是假设想运用到商业项目中。请參阅 ZooKeeper Administrator's Guide.shell


单例操做
以单例模式启动zookeeperserver是简单的。zookeeper服务包括一个jar文件和一些配置。
启动zookeeper你首先需要一份配置文件,在下载的文件文件夹conf/zoo.cfg:
tickTime=2000 dataDir=/var/lib/zookeeper clientPort=2181
你可以任意命名这个文件的名字,但是为了描写叙述的清楚咱们就叫它 conf/zoo.cfg. 假如已经存在dataDir文件夹请改变dataDir的值。如下是对每一个字段意义的介绍
tickTime
zookeeper用到的时间单位是毫秒。

这个时间比如是zookeeper的心跳时间,是最小会话单元的超时时间范围是这个时间的2倍。apache

dataDir
这个文件夹是存储内存中数据快照的位置,除非你特别说明,更新数据事物的log也在这个位置。
clientPort
client链接监听port。你需要建立一个配置文件。启动ZooKeeper:bin/zkServer.sh start
ZooKeeper 的日志记录是经过log4j — 不少其它关于日志的解说请看log4j官网。这里介绍的启动zookeeper是以单例模式。

假如进程执行失败,zookeeper服务就会挂掉。单例模式启动对于开发环境来讲是最好的。假设想已复制模式启动请看Running Replicated ZooKeeper.app

Managing ZooKeeper Storage
对于长时间执行在生产环境的zookeeper服务,存储必须被额外的管理(dataDir and logs),关于这些请看maintenance
Connecting to ZooKeeper
假设zookeeper已经执行,你就可以经过如下几种选择进行链接
  • Java: Use
     bin/zkCli.sh -server 127.0.0.1:2181 
    This lets you perform simple, file-like operations.
  • C: compile cli_mt (multi-threaded) or cli_st (single-threaded) by running make cli_mt or make cli_st in the src/c subdirectory in the ZooKeeper sources. See the README contained within src/c for full details.tcp

    You can run the program from src/c using:分布式

     LD_LIBRARY_PATH=. cli_mt 127.0.0.1:2181 

    oride

     LD_LIBRARY_PATH=. cli_st 127.0.0.1:2181 

    This will give you a simple shell to execute file system like operations on ZooKeeper.oop

Once you have connected, you should see something like:post

 Connecting to localhost:2181 log4j:WARN No appenders could be found for logger (org.apache.zookeeper.ZooKeeper). log4j:WARN Please initialize the log4j system properly. Welcome to ZooKeeper! JLine support is enabled [zkshell: 0] 

假设在shell中执行。你可以子啊链接后键入  help ,这将返回client可以执行的命令列表
例如如下:
 [zkshell: 0] help ZooKeeper host:port cmd args get path [watch] ls path [watch] set path data [version] delquota [-n|-b] path quit printwatches on|off create path data acl stat path [watch] listquota path history setAcl path acl getAcl path sync path redo cmdno addauth scheme auth delete path [version] deleteall path setquota -n|-b val path 

你可以尝试一些简单的命令来了解这个简单的命令行 . First, start by issuing the list command, as in  ls , yielding:
[zkshell: 8] ls /[zookeeper]
接下来。建立一个咋弄的经过执行 create /zk_test my_data .这个会建立一个新的anode和与这个anode关联的字符串数据”my_data” ,你可以看到如下的执行结果:
 [zkshell: 9] create /zk_test my_data Created /zk_test 

经过执行  ls / 命令会看到展示当前的文件夹状况 :
 [zkshell: 11] ls / [zookeeper, zk_test] 

注意。这个zk_test文件夹已经被建立。

你可以确认下和这个节点关联的数据经过执行get命令。例如如下:

 [zkshell: 12] get /zk_test my_data cZxid = 5 ctime = Fri Jun 05 13:57:06 PDT 2009 mZxid = 5 mtime = Fri Jun 05 13:57:06 PDT 2009 pZxid = 5 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0 dataLength = 7 numChildren = 0 

咱们也可以改变和zk_test关联的数据经过 set 命令,例如如下:
 [zkshell: 14] set /zk_test junk cZxid = 5 ctime = Fri Jun 05 13:57:06 PDT 2009 mZxid = 6 mtime = Fri Jun 05 14:01:52 PDT 2009 pZxid = 5 cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0 dataLength = 4 numChildren = 0 [zkshell: 15] get /zk_test junk cZxid = 5 ctime = Fri Jun 05 13:57:06 PDT 2009 mZxid = 6 mtime = Fri Jun 05 14:01:52 PDT 2009 pZxid = 5 cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0 dataLength = 4 numChildren = 0 

(注意咱们在设置zk_test的数据后又执行了 get   命令,数据的确改变了)。

最后经过 delete  删除zk_test这个节点:

 [zkshell: 16] delete /zk_test [zkshell: 17] ls / [zookeeper] [zkshell: 18] 

获取不少其余其余内容。请看Programmer's Guide

Programming to ZooKeeper

ZooKeeper has a Java bindings and C bindings. They are functionally equivalent. The C bindings exist in two variants: single threaded and multi-threaded. These differ only in how the messaging loop is done. For more information, see the Programming Examples in the ZooKeeper Programmer's Guide for sample code using of the different APIs.

复制模式执行zookeeper
执行zookeeper以单例模式对于评估測试开发是很是方便。但是在正式环境你应该以复制模式执行。每个zookeeperserver都有一份相同的配置文件。

这个文件和上面介绍单例模式使用的配置文件和相似。仅仅是有一点小小的不一样,例如如下:

 tickTime=2000 dataDir=/var/lib/zookeeper clientPort=2181 initLimit=5 syncLimit=2 server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888 

这个新的属性, initLimit是用来定义zookeeper链接到leader的超时时间,属性 syncLimit  限制一个leader过期时间。对于这两种超时时间,你也可以指定用 tickTime的时间单位计量。好比。initLimit是5 ticks,每个tick是2000毫秒,也就是10秒。
属性 server.X  列出了zookeeper服务的组成。

当server启动的时候,经过寻找在数据文件夹的myid文件知道是哪台server。这个文件含有以ASCII编码的server编号。

最后,注意在每个server名后的两个port号: " 2888" and "3888.经过这些port可以彼此链接。好比,一个彼此链接是必的当按顺序更新数据时。

尤为在zookeeperserver依次链接到leader时候。当一个新的leader诞生时,小弟们会经过这个port号利用tcp协议链接到leader。因为默认leader也用tcp协议。咱们必须要求另一个port用于选举leader。就是属性server的第二个port号。


注意
假如你想在一台机器上进行多个zookeeper服务測试。需要指出惟一的集群名localhost和那些leader选举port ( 好比2888:3888, 2889:3889, 2890:3890 )。隔离各个dataDir文件夹和不一样的port号也是必须的。

(在这个复制模式执行的样例里,每个执行在单一的机器都有一个配置文件)


其余优化
有其余的配置參数可以提升性能:There are a couple of other configuration parameters that can greatly increase performance:
为了下降等待和高速更新,它是重要的有个事物log文件夹。默认事物log文件是和数据快照和myid文件放在一块儿。属性 dataLogDir可以指名别的地方

 
Last Published: 08/07/2014 04:18:26
Copyright © 2008-2013  The Apache Software Foundation.
相关文章
相关标签/搜索