Zookeeper内部维护了一套数据结构,这个结构是一个树形的结构,有一个根节点 /,根节点下面是一个个的子节点,每个子节点称为ZNode,每个ZNode都可以通过其路径唯一标识。比如ZNode节点changes的唯一标识就用它的路径标识:/config/changes。




zookeeper创建目录 zookeeper数据目录_子节点


ZNode节点的分类

ZNode节点可以分为四类,分别是持久化目录节点持久化顺序编号目录节点临时目录节点临时顺序编号目录节点

  • 持久化目录节点

客户端与Zookeeper断开连接后,该节点依旧存在,不会被删除,除非执行强制性删除。

  • 持久化顺序编号目录节点

Zookeeper会根据父节点ZNode的zxid状态,给该子节点按顺序编号。客户端与Zookeeper断开连接后,该节点依旧存在。

  • 临时目录节点

客户端与Zookeeper断开连接后,该节点就会被删除。

  • 临时顺序编号目录节点

Zookeeper会根据父节点ZNode的zxid状态,给该子节点按顺序编号。客户端与Zookeeper断开连接后,该节点就会被删除。

进入Zookeeper客户端命令行

接下来我们要通过操作如何进入客户端命令行,去深入学习了解Zookeeper的目录结构。

首先,我们进入操作Zookeeper的脚本目录,它在zookeeper安装目录的bin目录下。如图,是所有的执行脚本文件。


zookeeper创建目录 zookeeper数据目录_客户端_02


然后查看当前Zookeeper的状态,执行如下命令:

zkServer.sh start


zookeeper创建目录 zookeeper数据目录_zookeeper创建目录_03


状态是未启动,就启动当前Zookeeper服务,执行如下命令:

zkServer.sh start


zookeeper创建目录 zookeeper数据目录_zookeeper命令_04


最后就可以进入Zookeeper客户端命令行,执行如下命令:

zkCli.sh


zookeeper创建目录 zookeeper数据目录_子节点_05


ZNode节点的状态信息

进入客户端命令行之后,执行如下命令,就可以查看当前ZNode节点的状态信息:

[zk: localhost:2181(CONNECTED) 1] ls2 /


zookeeper创建目录 zookeeper数据目录_客户端_06


每一个状态信息,分析如下:

cZxid = 0x0,表示该节点被创建时的Zxid,即create Zxid。

ctime = Thu Jan 01 08:00:00 CST 1970,表示该节点被创建的时间。

mZxid = 0x0,表示该节点最后一次被修改时的Zxid,即modified Zxid。

mtime = Thu Jan 01 08:00:00 CST 1970,表示该节点最后被修改的时间。

pZxid = 0x5100000173,表示该节点下的任何一个子节点最后一次被修改时的Zxid。

cversion = 54,表示该节点下的子节点被修改的次数。

dataVersion = 0,表示该节点的内容版本号。

ephemeralOwner = 0x0,表示临时节点的所属会话id。不是临时节点,该值为0.

dataLength = 0,表示该节点的数据长度。

numChildren = 12,表示该节点有多少个子节点数量。


作者:杨工,北京互联网公司在职Java开发,专注分享写作干货。