ZooKeeper-分布式利器(2)——CLI与节点

Zookeeper具有命令行界面(CLI),用于和ZooKeeper服务器集群的简单交互,有助于调试和解决问题。要想使用ZooKeeper CLI,首先需要有运行着的ZooKeeper服务器(可通过bin/zkServer运行),然后运行ZooKeeper客户端。一旦客户端成功连接服务端,就可以使用以下命令对ZooKeeper进行操作。

《ZooKeeper-分布式利器(2)——CLI与节点》 CLI基本命令

常用命令

1.创建节点

使用create命令,可以创建一个ZooKeeper节点,

create [-s] [-e] path data acl

其中,-s 和 -e用来指定节点属性,顺序或临时节点,若不指定-e,则表示持久节点;acl为权限控制。

1.1创建顺序节点

使用 create -s /zk-sequence 123 命令 创建zk-sequence顺序节点

《ZooKeeper-分布式利器(2)——CLI与节点》 顺序节点zk-sequence0000000005

可以看到zk-sequence节点后面自动添加了一串数字

1.2创建临时节点

使用create -e /zk-temp 123 命令创建zk-temp临时节点

《ZooKeeper-分布式利器(2)——CLI与节点》 创建临时节点

临时节点在客户端会话结束后,就会自动删除,使用quit退出客户端

《ZooKeeper-分布式利器(2)——CLI与节点》 退出客户端

再使用客户端连接服务端,并使用ls /命令查看根目录下的节点

《ZooKeeper-分布式利器(2)——CLI与节点》 临时节点消失

可以看到临时节点zk-temp已经消失了。

2.读取节点

读取节点可以通过ls 和 get命令,ls命令可以列出ZooKeeper指定节点下的第一级的所有子节点;get命令可以获取ZooKeeper指定节点的数据内容和属性信息。

若获取根节点下面的所有子节点,使用ls / 命令即可 前文已经用过了。

若想要获取某个节点数据内容 和 元数据(描述性信息),使用get / 命令即可,如获取前文创建的顺序节点

《ZooKeeper-分布式利器(2)——CLI与节点》 get

3.更新节点

使用set命令可以更新指定节点的数据内容,用法如下

set path data [version]

《ZooKeeper-分布式利器(2)——CLI与节点》 更新节点操作

针对上面读取的同一个节点,更新节点后,可以看到dataVersion由0变为了1

《ZooKeeper-分布式利器(2)——CLI与节点》 数据已更新

并且可以看到此节点的内容数据由原来的“123”变为了“data-update”

4.删除节点

delete /path 删除节点。

rmr /path  删除节点及子节点。

《ZooKeeper-分布式利器(2)——CLI与节点》 删除节点

可以看到 FirstZnode0000000001节点已经被删除。

总结概念

至此,对于ZooKeeper基本对象Znode节点和层次命名空间,我们已经有了概念。

ZooKeeper提供的命名空间更像一个标准的文件系统。名称是被“/”分割开的路径元素序列。ZooKeeper中的每个节点由路径进行唯一标识。

《ZooKeeper-分布式利器(2)——CLI与节点》 ZooKeeper层次命名空间

不像标准的文件系统,ZooKeeper命名空间中的每个Znode节点都有与之相关的内容数据以及子节点。它就像一个允许Znode既是文件同时也是目录的文件系统。(ZooKeeper用来存储协调数据:状态信息、配置、位置信息等,每个节点存储的数据通常是很小的,以字节为单位。)我们使用术语Znode来称呼ZooKeeper的节点。

Znode保有一个stat的结构,包含了 数据修改的版本号,ACL的变化,和时间戳信息 用来做缓存验证和协调更新。每次znode的数据变化,版本号的增加。举个例子,当一个客户端检索数据,它也会收到数据的版本信息。

《ZooKeeper-分布式利器(2)——CLI与节点》 stat结构

czxid. 节点创建时的zxid.

mzxid. 节点最新一次更新发生时的zxid.

ctime. 节点创建时的时间戳.

mtime. 节点最新一次更新发生时的时间戳.

dataVersion. 节点数据的更新次数.

cversion. 其子节点的更新次数.

aclVersion. 节点ACL(授权信息)的更新次数.

ephemeralOwner. 如果该节点为临时节点, ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是临时节点, ephemeralOwner值为0. 至于什么是临时节点, 请看前后的讲述.

dataLength. 节点数据的字节数.

numChildren. 子节点个数.

znode节点的状态信息中包含czxid和mzxid, 那么什么是zxid呢? ZooKeeper状态的每一次改变, 都对应着一个递增的Transaction id, 该id称为zxid. 由于zxid的递增性质, 如果zxid1小于zxid2, 那么zxid1肯定先于zxid2发生. 创建任意节点, 或者更新任意节点的数据, 或者删除任意节点, 都会导致Zookeeper状态发生改变, 从而导致zxid的值增加.

ZooKeeper也有临时节点的概念,这些znode只存在于创建它的当前会话状态为活跃,一旦会话结束,临时节点也会消失。当你想要实现断开连接会被撤销的事务,临时节点非常好用。

    原文作者:Xuds
    原文地址: https://www.jianshu.com/p/f994f6989f62
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞