Zookeeper的安装与基本使用

一、部署与运行

1.1 系统环境

对于大部分Java开源产品而言,在部署与运行之前,总是需要搭建一个合适的环境,通常包括操作系统和Java环境两方面。本节将介绍部署与运行ZooKeeper需要的系统环境,同样包括操作系统和Java环境两部分。

1.1.1 操作系统

首先,你需要选择-一个合适的操作系统。幸运的是,ZooKeeper 对于不同平台的支持都很好,在现在绝大多数主流的操作系统上都能够正常运行,例如GNU/Linux、SunSolaris、Win32以及MacOSX等。

1.1.2 Java环境

ZooKeeper使用Java语言编写,因此它的运行环境需要Java环境的支持,可下载1.6或
以上版本的Java

二、单机和集群模式

2.1 单机模式

2.1.1 下载和配置

访问 Zookeeper下载地址下载完压缩包之后解压。官方建议下载 stable版本。

修改conf目录下的zoo_sample.cfg => zoo.cfg。 注: 必须修改,Zookeeper默认读取的配置文件名为后者。

打开zoo.cfg,修改下dataDir 配置 为自己创建的目录。

dataDir= /Users/pengweiwei/Downloads/zookeeper-3.4.14/data

2.1.2 运行和关闭

进入到bin目录。或者配个环境变量。
运行:./zkServer.sh start

weiweideMacBook-Pro:bin pengweiwei$ ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /Users/pengweiwei/Downloads/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

关闭:./zkServer.sh stop

2.2 集群模式

2.2.1 配置

在集群的每台机器的zoo.cfg配置文件中都加入配置。因为在集群模式下,集群中的每台机器都需要感知到整个集群是由哪几台机器组成的,格式为:server.id=host:port:port

server.1=192.168.1.1:2888:3888
server.2=192.168.1.2:2888:3888
server.3=192.168.1.3:2888:3888

其中,id被称为ServerID,用来标识该机器在集群中的机器序号。同时,在每台ZooKeeper机器上,我们都需要在数据目录(即dataDir参数指定的那个目录)下创建一个myid 文件,该文件只有一行内容,并且是一个数字,而且是第一行,即对应于每台机器的ServerID数字。

在 ZooKeeper的设计中,集群中所有机器上zoo.cfg文件的内容都应该是一致的。因此最好使用SVN或是GIT把此文件管理起来,确保每个机器都能共享到一份相同的配置。

上面也提到了myid 文件中只有一个数字, 即一个Server ID。例如, server.1的myid文件内容就是“1”。注意,请确保每个服务器的myid文件中的数字不同,并且和自己所在机器的zoo.cfg中server. id=host:port:port的id值一致。另外,id 的范围是1~255。

按照相同的步骤,为其他机器都配置上zoo.cfg 和myid文件。

然后挨个都启动即可。完成。

三、Zookeeper的使用

先使用./zkCli.sh连接一下客户端,集群下连接指定客户端可以加参数 ./zkCli.sh -server ip:port

3.1 创建

使用create命令,可以创建一个ZooKeeper节点。用法如下:

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

其中,-s或-e分别指定节点特性:顺序或临时节点。默认情况下,即不添加-s或-e参数的,创建的是持久节点。
执行如下命令:

[zk: localhost:2181(CONNECTED) 11] create -e /tmp xiaoming                                   
Created /tmp

执行完上面的命令,就在ZooKeeper的根节点下创建了一个叫作/tmp的节点,并且节点的数据内容是“xiaoming”。 另外,create 命令的最后一个 参数是acl,它是用来进行权限控制的,缺省情况下,不做任何权限控制。关于Acl可以查看
ZooKeeper的系统模型(数据模型、节点特性、版本、Watcher、ACL)了解。

3.2 读取

与读取相关的命令包括ls命令和set命令。
使用ls命令,可以列出ZooKeeper指定节点下的所有子节点。当然,这个命令只能看到指定节点下第一级的所有子节点。用法如下:

ls path [watch]

其中,path表示的是指定数据节点的节点路径。
执行如下命令:

[zk: localhost : 2181(CONNECTED) 0] ls /
[zookeeper]

第一次部署的ZooKeeper集群,默认在根节点“/” 下面有一个叫作/zookeeper的保留节点。

使用get命令,可以获取ZooKeeper指定节点的数据内容和属性信息。用法如下:

get path [watch]

执行如下命令:

[zk: localhost:2181(CONNECTED) 12] get /tmp
xiaoming
cZxid = 0x6
ctime = Sun Jan 26 20:12:04 CST 2020
mZxid = 0x6
mtime = Sun Jan 26 20:12:04 CST 2020
pZxid = 0x6
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x1000826c70a0001
dataLength = 8
numChildren = 0

3.3 更新

使用set命令,可以更新指定节点的数据内容。用法如下:

set path data [version]

其中,data就是要更新的新内容。注意,set命令后面还有一个version参数,在ZooKeeper中,节点的数据是有版本概念的,这个参数用于指定本次更新操作是基于ZNode的哪一个数据版本进行的。
执行如下命令:

[zk: localhost:2181(CONNECTED) 13] set /tmp xiaoli
cZxid = 0x6
ctime = Sun Jan 26 20:12:04 CST 2020
mZxid = 0x7
mtime = Sun Jan 26 20:16:39 CST 2020
pZxid = 0x6
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x1000826c70a0001
dataLength = 6
numChildren = 0

执行完以上命令后,节点/tmp的数据内容就已经被更新成xiaoli了。在输出信息中,dataVersion 的值由原来的0变成了1,这是因为刚才的更新操作导致该节点的数据版本也发生了变更。

3.4 删除

使用delete命令,可以删除ZooKeeepr上的指定节点。用法如下:

delete path [version]

此命令中的version参数和set命令中的version参数的作用是一致的。
执行如下命令:

[zk: localhost:2181(CONNECTED) 14] delete /tmp
[zk: localhost:2181(CONNECTED) 15] ls /
[zookeeper, user]

执行完以上命令后,就可以把/zk-book这个节点成功删除了。但是这里要注意的一点是,要想删除某一个指定节点,该节点必须没有子节点存在。

发布了46 篇原创文章 · 获赞 10 · 访问量 4310

猜你喜欢

转载自blog.csdn.net/weiwei_six/article/details/104088991