原文链接:http://www.dubby.cn/detail.html?id=9024
本篇简介
这篇文章主要面向ZooKeeper的初学者,介绍了简单的安装,配置,和命令,来尝试运行ZooKeeper。也提到了一些稍微负责的安装——互相复制的部署,日志的优化。当然,这也只是入门文档,如果还希望对ZooKeeper有更多的了解,可以继续关注dubby.cn。
注:ZooKeeper常被缩写成zk,下面也会用这种缩写。
系统要求
操作系统要求
zk有多种组件:
- 客户端是一个使用Java编写的应用,用来连接zk服务端。
- 服务端是一个使用Java编写的应用,运行在各个节点。
- 原生客户端是一个使用C实现的应用,类似于客户端,也是用来连接zk服务端。
- 插件提供了一些可插拔的插件。
操作系统 | 客户端 | 服务端 | 原生客户端 | 插件 |
---|---|---|---|---|
GNU/Linux | 开发&生产 | 开发&生产 | 开发&生产 | 开发&生产 |
Solaris | 开发&生产 | 开发&生产 | 不支持 | 不支持 |
FreeBSD | 开发&生产 | 开发&生产 | 不支持 | 不支持 |
Windows | 开发&生产 | 开发&生产 | 不支持 | 不支持 |
Mac OS X | 开发 | 开发 | 不支持 | 不支持 |
软件要求
zk运行在Java上,需要JDK版本不低于7(FreeBSD 要求openjdk7)。
下载
下载页面:http://zookeeper.apache.org/releases.html
单机模式
把zk以单机模式来安装运行时最直接也是最简单的方式来尝试zk。
把下载文件解压,进入解压文件的根目录,可以看到在conf/
目录下有一个zoo.cfg
的样板,比如叫zoo_sample.cfg
,复制此文件,重新命名为zoo.cfg
,然后编辑zoo.cfg
:
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
这里只关注这几个配置项,下面简单解释一下:
- tickTime:zk中基本的时间单元,单位是毫秒,其他的时间参数都要乘以这个时间单元,才是真正的时间。
- dataDir:zk内存中数据的快照落盘路径,如果不做其他设置,日志也默认在这个路径下,还有之后用到
myid
文件也是在这里面配置。 - clientPort:监听客户端连接的端口。
保存配置文件,然后就可以启动了:
bin/zkServer.sh start
zk用的是log4j,可以看到终端有很多日志打印出来。
这一步完成的只是单机模式,这意味着没有复制,没有主备,这个进程一旦挂了,整个服务就不可用了,这在测试环境一般是可以满足我们需要的,但是在生产环境,请使用复制模式。
连接ZooKeeper
$ bin/zkCli.sh -server 127.0.0.1:2181
差不多可以看到这样的输入:
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]
输入help
可以看到所有支持的命令:
[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
我们先使用ls
命令来查看所有节点(znode):
[zkshell: 8] ls /
[zookeeper]
然后创建一个新的节点,输入:
[zkshell: 9] create /zk_test my_data
Created /zk_test
再来列出所有节点:
[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
我们可以使用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
你可以再执行一次
get /zk_test
命令来看看值有没有改变
再删除这个节点:
[zkshell: 16] delete /zk_test
[zkshell: 17] ls /
[zookeeper]
[zkshell: 18]
到目前为止,我们已经掌握了最基本的命令。