ZooKeeper的安装运行

ZooKeeper的安装模式可以大致分为3种:集群模式单机模式伪分布模式。其中ZK是由Java语言开发的,因此安装前需要保证本地已有JDK6及以上的Java环境。

下载

读者可以通过以下链接下载自己所需要的ZK版本:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/。下载解压缩后,目录结构如下所示:

bin:ZK的可执行脚本目录,其中包括:ZK服务进程、ZK客户端等。*.sh的是Linux环境下的脚本,*.cmd是Windows环境下的脚本。

conf:配置文件目录,zoo_sample.cfg是样例配置,一般修改为zoo.cfg。log4j.properties是日志配置。

lib:ZK的依赖包。

contrib:一些用于操作ZK的工具包。

recipes:ZK的一些用法Demo。

安装

在介绍具体的安装前,先说明一下后面可能会更改的配置的含义。

tickTime=2000
dataDir=/var/lib/zookeeper/
clientPort=2181
initLimit=5
syncLimit=2
server.1=192.168.1.1:2888:3888
server.2=192.168.1.2:2888:3888
server.3=192.168.1.3:2888:3888

initLimit:ZK集群模式下,Leader与Follower之间需要同步一些数据。initLimit是Leader与Follower之间建立连接后,进行同步的最长时间。

syncLimit:配置Leader与Follower之间发送消息,请求和应答的最大时间长度。

tickTime:是上述2个时间值的单位。如:initLimit=5,说明其超时时间为2000ms*5=10。

server.{id}=host:port1:port2:其中id是一个数字,表示ZK进程的id,这个id也是dataDir目录下myid文件的内容。host表示的是ZK服务端进程所在的IP地址,port1表示Leader和Follower交换信息所使用的端口,port2表示选举Leader所使用的端口。

dataDir:必要配置,用于配置存储快照文件的目录。如果没有配置dataLogDir,那么事务日志也会存储在此目录。集群模式下,dataDir还需要有一个myid文件,其内容只能为1~255之间的数字,这个数字与server.id中的id对应,表示ZK服务进程的id。

集群模式

根据上述介绍的参数,下载解压软件后,分别在每台机器上面重复以下步骤。

1、配置zoo.cfg文件。初次使用时,可以将%ZK_HOME%/conf下的zoo_sample.cfg文件重命名为zoo.cfg。其配置内容如下:

tickTime=2000
dataDir=/var/lib/zookeeper/
clientPort=2181
initLimit=5
syncLimit=2
server.1=192.168.1.1:2888:3888
server.2=192.168.1.2:2888:3888
server.3=192.168.1.3:2888:3888

2、创建myid文件。在dataDir目录下,创建一个名为myid的文件,写入内容为1~255的一个数字。数字对应着server.id中的id。

3、启动服务。在每台机器上面执行:

./zkServer.sh start

单机模式

单机模式的配置和启动比较简单,只是对上述集群模式的一个简化。其Demo配置如下:

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

由上面配置可以看出,其dataDir下面的myid文件的内容为1。

伪集群模式

伪集群模式和集群模式类似,不同就在于伪集群模式的机器只有一台。在一台机器上面开通了不同的端口号来模拟集群模式的通讯。其配置Demo如下:

tickTime=2000
dataDir=/var/lib/zookeeper/
clientPort=2181
initLimit=5
syncLimit=2
server.1=192.168.1.1:2888:3888
server.2=192.168.1.1:2889:3889
server.3=192.168.1.1:2890:3890

相关命令

服务端相关

服务端启动

./zkServer.sh start

服务端停止

./zkServer.sh stop

客户端相关

连接

客户端连接使用的是zkCli.sh命令,如直接执行./zkCli.sh,则连接的是本地的ZK。如需连接远程ZK,命令语法如下:

./zkCli.sh -server ip:port

给出Demo如下:

./zkCli.sh -server 191.168.1.1:2181

创建

创建节点语法如下:

create [-s] [-e] path data acl

给出Demo如下:

create /moguhu 111

读取

读取子节点列表语法如下:

ls path [watch]

给出Demo如下:

ls /moguhu

读取节点信息语法如下:

get path [watch]

给出Demo如下:

get /moguhu

更新

更新语法如下:

set path data [version]

给出Demo如下:

set /moguhu 666

删除

删除语法如下:

delete path [version]

给出Demo如下:

delete /moguhu

这里需要注意一点的是,ZK不支持递归删除。


参考:《从Paxos到ZooKeeper》