在Zookeeper入门到实战 (二) : Centos7下安装Zookeeper-3.7.0(单机模式和集群模式)中,笔者演示了如何搭建Zookeeper单机或集群,在Zookeeper入门到实战(三) :Zookeeper的节点类型和监听机制中,笔者介绍了Zookeeper的节点类型和监听机制,那么本文就一起看一下Zookeeper的基本操作

1.Zookeeper命令行操作

zookeeper提供了客户端zkCli.sh(linux平台)zkCli.cmd(windows平台)来对zookeeper的数据节点进行操作。本文在linux环境下演示,可参考本文搭建zookeeper环境

1.1 客户端连接Zookeeper

# 连接zookeeper服务器
./zkCli.sh [-server ip:port]

# 连接本地的zookeeper服务器
./zkCli.sh

当不指定参数时,默认为./zkCli.sh -server localhost:2181也就是连接本地端口为2181的zookeeper服务器,2181是zookeeper服务器的默认端口

连接成功之后,系统会输出Zookeeper的相关信息,输入help之后,会输出当前可用的zookeeper命令

zookeeper节点迁移 zookeeper之节点基本操作_分布式锁

注意:各个版本的命令有所不同,本文的版本(3.7.0)中使用stat查看状态信息,使用get查看节点中的数据;在老版本中是用get查看数据和状态信息,我这里使用的是3.7.0当前的最新版,因此我这里获取数据节点状态是stat获取节点数据是get命令,请各位以help输出的可用的命令为准

2.常用命令

2.1 查看节点列表

ls [-s] [-w] [-R] path
  • -s 查看节点列表的同时列出 path节点的状态信息
  • -w 添加一个 watch(监视器)后文会详解
  • -R 递归的列出path下所有节点

2.2 查看节点

get [-s] [-w] path
  • -s 查看节点数据的同时列出 path节点的状态信息
  • -w 添加一个 watch(监视器)后文会详解
  • path 节点路径

2.3.创建节点

create [-s] [-e] path data
  • -s 顺序节点
  • -e 临时节点,不携带此参数就是永久节点(persist)
  • path 节点路径
  • data 节点内部的数据
例1:创建有序节点
# 创建一个有序节点 节点中的数据为aaa
create -s /zk-order aaa

zookeeper节点迁移 zookeeper之节点基本操作_zookeeper_02


如上图,创建了一个/zk-order顺序节点,也就是在根节点(/)下创建了一个zk-order顺序节点。执行命令之后,返回了创建的节点;可以看到节点后面被自动加上了后缀这也就是前文提到的顺序节点的后缀

zookeeper节点迁移 zookeeper之节点基本操作_zookeeper_03

如图,再添加节点,后缀的编号就会自增。这个编号是全局有效的。

另外,Zookeeper根目录(/)下默认有一个/zookeeper节点,如下图可见,/zookeeper节点下面还有两个子节点config,quota;都是Zookeeper默认创建的

zookeeper节点迁移 zookeeper之节点基本操作_java_04

例2:创建临时节点
# 创建一个临时节点 节点中的数据为ddd
create -e /zk-temp ddd

zookeeper节点迁移 zookeeper之节点基本操作_zookeeper节点迁移_05

# 退出客户端
quit

退出之后重新连接,临时节点确实已经消失了,与前文的介绍一致

zookeeper节点迁移 zookeeper之节点基本操作_zookeeper节点迁移_06

例3:创建永久节点
# 创建一个永久节点 节点中的数据为eee
create /zk-persist eee

zookeeper节点迁移 zookeeper之节点基本操作_zookeeper节点迁移_07

退出客户端之后,再次连接,如下图,永久节点依然存在。

zookeeper节点迁移 zookeeper之节点基本操作_zookeeper_08

2.3.修改节点数据

set [-s] [-v version] path data
  • -s 输出状态信息
  • -v 指定数据版本
  • path 节点路径
  • data 要更新的数据

zookeeper节点迁移 zookeeper之节点基本操作_java_09

上图可见get -s path输出的信息中,可以看到,第一行是数据,其他几行啧有前文提到的创建节点的事务id(cZxid)和创建时间(ctime),最后一次更新该节点的事务Id(mZxid)和最后一次更新该节点的时间(mtime)等属性信息,其中,mZxid在查询(读操作)之后没有变化,下面我修改一下该节点的数据;

# 修改节点中的数据
set /zk-persist ddd
# 修改节点中的数据后输出节点状态信息
set -s /zk-persist fff

zookeeper节点迁移 zookeeper之节点基本操作_java_10

可见,修改节点中的数据之后;最后一次更新该节点的事务Id(mZxid)产生了变化,与前文的介绍一致

2.4.删除节点

# 删除节点 节点路径:path
delete path

zookeeper节点迁移 zookeeper之节点基本操作_linux_11

zk-persist已被成功删除。