在Zookeeper安装与目录结构中,最后我们为了能够生成相关的日志文件及快照文件,我们进行了一些创建/修改节点的操作,这里我们就来详细介绍一些,首先我们需要启动ZK的服务端,这个之前已经介绍过了,然后我们就需要使用客户端去连接,如下:
执行后,我们就成功连接上了,这里我们就可以进行创建/修改/删除节点的操作 了,这里我们首先来介绍一下Zookeeper的节点模型及类型。
首先ZooKeeper的视图结构和标准的Unix文件系统类似,其中每个节点称为“数据节点”或ZNode,每个znode可以存储数据,还可以挂载子节点,因此可以称之为“树”,这个树形的结构,我们通过之前介绍的Zookeeper的图形化客户端工具 ZooInspector 是可以清楚明确的看出的。第二点需要注意的是,每一个znode都必须有值,如果没有值,节点是不能创建成功的。
在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据,另外可以通过客户端可对znode进行增删改查的操作,还可以注册watcher监控znode的变化。
Znode有四种形式的目录节点(默认是persistent ),对于持久节点和临时节点,同一个znode下,节点的名称是唯一的。
- 持久节点(persistent):
create /node1 value1
,客户端断开连接zk不会删除persistent类型节点 - 临时节点(ephemeral):
create -e /node2 value2
,客户端断开连接zk会删除ephemeral类型节点
另外上述的持久节点和临时节点,又可以和顺序节点搭配,分为持久顺序节点和临时顺序节点,那么什么是顺序节点呢,如下: - 顺序节点(sequential):
create -s /node3 value3
创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护
接下来我们就来依次创建上述所介绍的不同类型的节点,首先我们先来创建一个持久节点,如下:
创建完成后,我们可以通过该 get /node1
来查看刚刚创建的节点信息,如下:
其中还可以看见创建时,在节点中设置的值,另外还有很多其他的信息,其含义如下:
属性 | 数据结构 | 描述 |
---|---|---|
cZxid | long | 节点被创建的Zxid值 |
ctime | long | 节点被创建的时间 |
mZxid | long | 节点被修改的zXid值 |
mtime | long | 节点最后一次被修改的时间 |
pZxid | long | 子节点最有一次被修改时的事务ID |
cversion | long | 节点的所拥有子节点被修改的版本号 |
dataVersion | long | 节点被修改的版本号 |
aclVersion | long | 节点的ACL被修改的版本号 |
ephemeralOwner | long | 如果此节点为临时节点,那么它的值为这个节点拥有者的会话ID;否则,它的值为0 |
dataLength | int | 节点数据域的长度 |
numChildren | int | 节点拥有的子节点个数 |
我们可结果上表进行查看刚刚我们创建的持久节点的信息,然后我们可以通过 set /node1 /value11
来修改 node1 节点中的值,然后查看其节点信息,发起其中节点修改时间、节点被修改的版本号等会发生变化
如果我们我们想要在一个节点下创建一个子节点,也是非常的简单的,如下:
另外我们可以通过 ls
来查询所有的节点信息,如下:
还可以通过 ls2
来查看其详细信息,和 get 展示的信息类似
另外我们通过Zookeeper的图形化客户端工具 ZooInspector 可以很清晰的查看每个节点下的值
那么我们希望删除一个节点呢?可以通过 delete /node1
但是我们运行后发提示我们该节点不为空,所以如果一个节点下有子节点的话,delete 命令无法将其删除,我们可以先将子节点删除,然后再将该节点删除,或者通过 rmr /node1
直接删除。
当我们完成了操作后,可以通过 quit
命令退出客户端,如果问题可以通过 help
获取相关提示
上述我们是以持久节点为例,介绍了常用的操作命令,那么如果我们想要创建一个临时节点呢?也是非常的简单,只需要添加 -e
即可,另外我们可以看到临时节点的ephemeralOwner是不为0的
这个节点当我们使用 quit
命令退出后,再次重新连接,就会发现临时节点已被删除了
另外我们之前说过,无论是持久节点,还是临时节点,其节点名称是唯一的,如果我们创建一个相同名称的节点,肯定是无法创建的
但是我们创建顺序节点是可以的,因为创建顺序节点,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护
另外在Zookeeper中还有一些常见的四字命令,支持某些特定的四字命令字母与其的交互,用来获取 ZooKeeper 服务的当前状态及相关信息。可通过 telnet 或 nc 向 ZooKeeper 提交相应的命令,在使用时需要前提是安装好了nc。
-
echo stat|nc 127.0.0.1 2181
来查看哪个节点被选择作为follower或者leader -
echo ruok|nc 127.0.0.1 2181
测试是否启动了该Server,若回复imok表示已经启动 -
echo dump| nc 127.0.0.1 2181
列出未经处理的会话和临时节点 -
echo kill | nc 127.0.0.1 2181
关掉server -
echo conf | nc 127.0.0.1 2181
输出相关服务配置的详细信息 -
echo cons | nc 127.0.0.1 2181
列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息 -
echo envi |nc 127.0.0.1 2181
输出关于服务环境的详细信息(区别于 conf 命令) -
echo reqs | nc 127.0.0.1 2181
列出未经处理的请求 -
echo wchs | nc 127.0.0.1 2181
列出服务器 watch 的详细信息 -
echo wchc | nc 127.0.0.1 2181
通过 session 列出服务器 watch 的详细信息,它的输出是一个与 watch 相关的会话的列表 -
echo wchp | nc 127.0.0.1 2181
通过路径列出服务器 watch 的详细信息。它输出一个与 session 相关的路径