环境
- Ubuntu 22.04
- Zookeeper 3.7.1
- JDK 17.0.3.1
部署
首先访问 https://zookeeper.apache.org ,下载Zookeeper压缩包,我下载的是 apache-zookeeper-3.7.1-bin.tar.gz ,将其放到 /home/ding/Downloads 目录,并解压:
tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz
解压后生成 apache-zookeeper-3.7.1-bin 目录,为了方便,将其改名为 zookeeper_1 。之所以加上 _1 后缀,是为了将来部署多个Zookeeper实例时好区分。
将 conf/zoo_sample.cfg 文件重命名或者复制为 zoo.cfg ,编辑该文件,修改 dataDir 配置:
#dataDir=/tmp/zookeeper
dataDir=/home/ding/Downloads/zookeeper_1/data
这是Zookeeper保存数据的位置, data 目录是我新创建的。
直接运行 zkServer.sh 看一下帮助信息:
➜ bin ./zkServer.sh
ZooKeeper JMX enabled by default
Using config: /home/ding/Downloads/zookeeper_1/bin/../conf/zoo.cfg
Usage: ./zkServer.sh [--config <conf-dir>] {start|start-foreground|stop|version|restart|status|print-cmd}
信息简单明了。常见的选项就是start、stop、status、restart等。
没启动Zookeeper时查看状态:
➜ bin ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/ding/Downloads/zookeeper_1/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Error contacting service. It is probably not running.
启动Zookeeper:
➜ bin ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/ding/Downloads/zookeeper_1/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
启动后查看状态:
➜ bin ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/ding/Downloads/zookeeper_1/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: standalone
注意 standalone 表示单机模式。
客户端常用命令
Zookeeper自带客户端的CLI工具:
./zkCli.sh -server localhost:2181
其中2181是默认的端口,可以在 zoo.cfg 文件里配置。
如果不指定 -server 选项,则会连接本机的2181端口。
./zkCli.sh
进入Zookeeper命令行,提示符如下:
[zk: localhost:2181(CONNECTED) 0]
随便输入一个错误命令可查看CLI命令行帮助信息,会列出所有命令,比较有用。
输入 quit 命令可退出CLI命令行。
Zookeeper的数据模型类似于Linux的文件系统(不过不太区分目录和文件,每个节点上既可以有数据,也可以有子节点),操作命令也和Linux类似。
增删改查操作
ls:查看节点create:创建节点delete:删除不带子节点节点deletaall:删除带有子节点的节点get:获取节点数据set:设置节点数据
下面是一些例子。
- 查看根节点
/:
ls /
[zookeeper]
- 创建节点
/test1:
create /test1
Created /test1
- 设置
/test1节点数据:
set /test1 good
- 获取
/test1节点数据:
get /test1
good
- 创建节点
/test2,同时设值:
create /test2 hello
Created /test2
- 获取
/test2节点数据:
get /test2
hello
- 再次查看根节点
/:
ls /
[test1, test2, zookeeper]
- 删除
/test2:
delete /test2
注意:如果节点还有子节点,则要用 deleteall 命令删除。
临时节点和顺序节点
按临时性和顺序性,节点可分为以下4类:
- 非临时,非顺序
- 非临时,顺序
- 临时,非顺序
- 临时,顺序
临时节点
create -e 创建临时节点。所谓临时节点,在当前会话结束后,会自动删除。
创建临时节点 /test2 :
create -e /test2
查看根目录 / :
ls /
[test1, test2, zookeeper]
运行 quit 退出命令行,然后运行 ./zkCli.sh 重新进入命令行,此时查看根目录 / :
ls /
[test1, zookeeper]
可见 /test2 已经自动删除了。
顺序节点
create -s 创建顺序节点。Zookeeper会在指定的节点名字后面加上一个sequence后缀,以确保其全局唯一。
创建顺序节点 /test2 :
create -s /test2
WATCHER::
Created /test20000000003
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/
注:收到了根目录 / 的 NodeChildrenChanged 消息通知。
查看根目录 / :
ls /
[test1, test20000000003, zookeeper]
可见,自动加上了sequence后缀 0000000003 。
再次创建顺序节点 /test2 :
create -s /test2
Created /test20000000004
因为sequence是全局唯一的,所以确保不会重复创建节点。
注意:sequence后缀是全局累加的,比如,创建顺序节点 /test3 :
create -s /test3
Created /test30000000005
sequence后缀是 0000000005 ,可见,sequence是全局的。
Watch机制
ls -w 关注某个节点。比如:
ls -w /test1
[]
此时,如果在另一个命令行,运行 create /test1/aaa 创建节点,第一个命令行就会收到通知:
WATCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/test1
如果在第二个命令行,运行 create /test1/bbb 继续创建节点,此时第一个命令行就不再收到通知了,关注只生效一次。
本文介绍如何在Ubuntu 22.04上安装和配置Zookeeper 3.7.1,并演示基本的客户端操作命令。通过示例展示了Zookeeper的数据模型、临时节点、顺序节点及Watch机制。

1115

被折叠的 条评论
为什么被折叠?



