Zookeeper 安装与简单使用

171 阅读4分钟

前言:到底什么是 Zookeeper,如何安装和使用?这篇文章会慢慢揭开 Zookeeper 的面纱。

一般来说,Zookeeper 在生产环境都是集群模式,为了演示方便,我们演示在 linux 上单机安装 Zookeeper 并进行使用。

注意:本文使用的是 3.7.2 版本。

单机模式安装 Zookeeper

  1. 先去官网下载安装包 zookeeper.apache.org/releases.ht… 选择相应版本下载

image.png

  1. 假设我下载的是 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
  1. 进入到文件夹中,创建 data 文件夹(供 Zookeeper 存放数据使用)。
cd apache-zookeeper-3.7.1-bin
mkdir data
  1. 修改配置文件名称
cd conf
mv zoo_sample.cfg zoo.cfg
  1. 修改 zoo.cfg 中 data 的路径指向刚刚创建的 data 文件夹。比如我的路径如下。
# example sakes.
dataDir=/root/dev/zkcluster/zookeeper01/data
  1. 接下来就可以启动、停止、查看 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 的数据模型是一颗树:

image.png

每一个节点都称为 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 基本概念及应用场景介绍