Ubuntu搭建Zookeeper环境及客户端常用命令

环境

  • 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 继续创建节点,此时第一个命令行就不再收到通知了,关注只生效一次。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值