前言:到底什么是 Zookeeper,如何安装和使用?这篇文章会慢慢揭开 Zookeeper 的面纱。
一般来说,Zookeeper 在生产环境都是集群模式,为了演示方便,我们演示在 linux 上单机安装 Zookeeper 并进行使用。
注意:本文使用的是 3.7.2 版本。
单机模式安装 Zookeeper
- 先去官网下载安装包 zookeeper.apache.org/releases.ht… 选择相应版本下载
- 假设我下载的是
apache-zookeeper-3.7.1-bin.tar.gz,将其上传到 linux 上,解压。
[root@localhost install]# tar -zxf apache-zookeeper-3.7.1-bin.tar.gz
[root@localhost install]# ls
apache-zookeeper-3.7.1-bin apache-zookeeper-3.7.1-bin.tar.gz
[root@localhost install]# cd apache-zookeeper-3.7.1-bin
[root@localhost apache-zookeeper-3.7.1-bin]# ls
bin conf docs lib LICENSE.txt NOTICE.txt README.md README_packaging.md
- 进入到文件夹中,创建 data 文件夹(供 Zookeeper 存放数据使用)。
cd apache-zookeeper-3.7.1-bin
mkdir data
- 修改配置文件名称
cd conf
mv zoo_sample.cfg zoo.cfg
- 修改 zoo.cfg 中 data 的路径指向刚刚创建的 data 文件夹。比如我的路径如下。
# example sakes.
dataDir=/root/dev/zkcluster/zookeeper01/data
- 接下来就可以启动、停止、查看 Zookeeper 状态了。
# 启动 zookeeper
[root@localhost zookeeper01]# ./bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /root/dev/zkcluster/zookeeper01/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
# 查看 zookeeper 状态
[root@localhost zookeeper01]# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /root/dev/zkcluster/zookeeper01/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: standalone
# 停止 Zookeeper
[root@localhost zookeeper01]# ./bin/zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /root/dev/zkcluster/zookeeper01/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
Zookeeper 简单使用
英语能力可以的同学建议直接去官网查看基本操作: zookeeper.apache.org/doc/r3.7.2/…
在命令行要操作 Zookeeper 需要进入 Zookeeper 的命令行工具:
./bin/zkCli.sh # 进入本机
./bin/zkCli.sh -server ip:port # 连接其他机器
Zookeeper 的数据模型是一颗树:
每一个节点都称为 ZNode,节点上可以存储 数据+状态。
- 节点分为四种:
- 持久节点:节点创建后一直存在服务器上,知道删除操作主动清除。
- 持久顺序节点:有顺序的持久节点,表现:会在节点名称后面加一个数字后缀,用来表现顺序。
- 临时节点:会被自动清理的节点,与客户端会话一致,会话结束则被删除。
- 临时顺序节点:有顺序的临时节点。
1,创建节点
create [-s] [-e] [-c] [-t ttl] path [data] [acl]
其中 -s 表示创建顺序节点,-e 表示创建临时节点。
# 创建一个名为 my-zk-1 的节点,默认创建持久节点。
[zk: localhost:2181(CONNECTED) 7] create /my-zk-1 123
Created /my-zk-1
# 创建一个持久顺序节点
[zk: localhost:2181(CONNECTED) 8] create -s /my-zk 123
Created /my-zk0000000005
# 创建一个临时节点,数据为 hello
[zk: localhost:2181(CONNECTED) 9] create -e /my-zk-2 hello
Created /my-zk-2
# 创建一个临时顺序节点
[zk: localhost:2181(CONNECTED) 16] create -e -s /my-zk hello
Created /my-zk0000000008
2,查看节点
查看数据:
# 查看节点数据
[zk: localhost:2181(CONNECTED) 19] get /my-zk-2
hello
# 查看 / 路径下的所有节点,其中 zookeeper 节点是系统自带的。
[zk: localhost:2181(CONNECTED) 21] ls /
[my-zk-1, my-zk-2, my-zk0000000005, my-zk0000000008, zookeeper]
此时关闭 zkClient 客户端,重新连接,再进行查看会发现所有临时节点都被删除。
[zk: localhost:2181(CONNECTED) 22] quit
./bin/zkCli.sh
...
[zk: localhost:2181(CONNECTED) 0] ls /
[my-zk-1, my-zk0000000005, zk-test, zookeeper]
查看某个节点的子节点及详细状态,可以看到,my-zk-1 节点下没有子节点,所以第一行为[],后面跟着的皆为节点 state
[zk: localhost:2181(CONNECTED) 8] ls -s /my-zk-1
[]
cZxid = 0x11
ctime = Thu Jun 29 05:50:31 CST 2023
mZxid = 0x11
mtime = Thu Jun 29 05:50:31 CST 2023
pZxid = 0x11
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
3,更新节点
set [-s] [-v version] path data
示例
[zk: localhost:2181(CONNECTED) 11] set /my-zk-1 321
[zk: localhost:2181(CONNECTED) 12] get /my-zk-1
321
[zk: localhost:2181(CONNECTED) 14] ls -s /my-zk-1
[]
cZxid = 0x11
ctime = Thu Jun 29 05:50:31 CST 2023
mZxid = 0x1d
mtime = Thu Jun 29 06:08:15 CST 2023
pZxid = 0x11
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
可以看到,其中 dataVersion 的版本已经从 0 变成 1 了。
4,删除节点
delete [-v version] path
[zk: localhost:2181(CONNECTED) 16] delete /my-zk-1
[zk: localhost:2181(CONNECTED) 17] ls /
[my-zk0000000005, zk-test, zookeeper]
总结
本文只是简单演示 Zookeeper 的安装及使用,更多的 Zookeeper 概念可以看我另一篇文章:# Zookeeper 基本概念及应用场景介绍。