ZNode(数据节点)是 ZooKeeper 中数据的最小单元,每一个ZNode上均可以保存数据,同时仍是能够有子节点(这就像树结构同样,以下图所示)。能够看出,节点路径标识方式和Unix文件 系统路径很是类似,都是由一系列使用斜杠"/"进行分割的路径表示,开发人员能够向这个节点中写人数据,也能够在节点下面建立子节点。这些操做咱们后面都会介绍到。 node
提到 ZooKeeper 数据模型,还有一个不得不得提的东西就是 事务 ID 。事务的ACID(Atomic:原子性;Consistency:一致性;Isolation:隔离性;Durability:持久性)四大特性我在这里就很少说了,相信你们也已经挺腻了。linux
在Zookeeper中,事务是指可以改变 ZooKeeper 服务器状态的操做,咱们也称之为事务操做或更新操做,通常包括数据节点建立与删除、数据节点内容更新和客户端会话建立与失效等操做。对于每个事务请求,ZooKeeper 都会为其分配一个全局惟一的事务ID,用 ZXID 来表示,一般是一个64位的数字。每个ZXID对应一次更新操做,从这些 ZXID 中能够间接地识别出Zookeeper处理这些更新操做请求的全局顺序。shell
每一个 ZNode 由2部分组成:服务器
以下所示,我经过 get 命令来获取 根目录下的 dubbo 节点的内容。(get 命令在下面会介绍到)分布式
[zk: 127.0.0.1:2181(CONNECTED) 6] get /dubbo # 该数据节点关联的数据内容为空 null # 下面是该数据节点的一些状态信息,其实就是 Stat 对象的格式化输出 cZxid = 0x2 ctime = Tue Nov 27 11:05:34 CST 2018 mZxid = 0x2 mtime = Tue Nov 27 11:05:34 CST 2018 pZxid = 0x3 cversion = 1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 0 numChildren = 1
这些状态信息其实就是 Stat 对象的格式化输出。Stat 类中包含了一个数据节点的全部状态信息的字段,包括事务ID、版本信息和子节点个数等,以下图所示(图源:《从Paxos到Zookeeper 分布式一致性原理与实践》,下面会介绍经过 stat 命令查看数据节点的状态)。学习
Stat 类:测试
关于数据节点的状态信息说明(也就是对Stat 类中的各字段进行说明),能够参考下图(图源:《从Paxos到Zookeeper 分布式一致性原理与实践》)。操作系统
进入安装 ZooKeeper文件夹的 bin 目录下执行下面的命令链接 ZooKeeper 服务(Linux环境下)(链接以前首选要肯定你的 ZooKeeper 服务已经启动成功)。3d
./zkCli.sh -server 127.0.0.1:2181
从上图能够看出控制台打印出了不少信息,包括咱们的主机名称、JDK 版本、操做系统等等。若是你成功看到这些信息,说明你成功链接到 ZooKeeper 服务。code
help 命令查看 zookeeper 经常使用命令
经过 create 命令在根目录建立了node1节点,与它关联的字符串是"node1"
[zk: 127.0.0.1:2181(CONNECTED) 34] create /node1 “node1”
经过 create 命令在根目录建立了node1节点,与它关联的内容是数字 123
[zk: 127.0.0.1:2181(CONNECTED) 1] create /node1/node1.1 123 Created /node1/node1.1
[zk: 127.0.0.1:2181(CONNECTED) 11] set /node1 "set node1"
get 命令能够获取指定节点的数据内容和节点的状态,能够看出咱们经过set 命令已经将节点数据内容改成 "set node1"。
set node1 cZxid = 0x47 ctime = Sun Jan 20 10:22:59 CST 2019 mZxid = 0x4b mtime = Sun Jan 20 10:41:10 CST 2019 pZxid = 0x4a cversion = 1 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 9 numChildren = 1
经过 ls 命令查看根目录下的节点
[zk: 127.0.0.1:2181(CONNECTED) 37] ls / [dubbo, zookeeper, node1]
经过 ls 命令查看 node1 目录下的节点
[zk: 127.0.0.1:2181(CONNECTED) 5] ls /node1 [node1.1]
zookeeper 中的 ls 命令和 linux 命令中的 ls 相似, 这个命令将列出绝对路径path下的全部子节点信息(列出1级,并不递归)
经过 stat 命令查看节点状态
[zk: 127.0.0.1:2181(CONNECTED) 10] stat /node1 cZxid = 0x47 ctime = Sun Jan 20 10:22:59 CST 2019 mZxid = 0x47 mtime = Sun Jan 20 10:22:59 CST 2019 pZxid = 0x4a cversion = 1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 11 numChildren = 1
上面显示的一些信息好比cversion、aclVersion、numChildren等等,我在上面 “ZNode(数据节点)的结构” 这部分已经介绍到。
ls2 命令更像是 ls 命令和 stat 命令的结合。ls2 命令返回的信息包括2部分:子节点列表 + 当前节点的stat信息。
[zk: 127.0.0.1:2181(CONNECTED) 7] ls2 /node1 [node1.1] cZxid = 0x47 ctime = Sun Jan 20 10:22:59 CST 2019 mZxid = 0x47 mtime = Sun Jan 20 10:22:59 CST 2019 pZxid = 0x4a cversion = 1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 11 numChildren = 1
这个命令很简单,可是须要注意的一点是若是你要删除某一个节点,那么这个节点必须无子节点才行。
[zk: 127.0.0.1:2181(CONNECTED) 3] delete /node1/node1.1
在后面我会介绍到 Java 客户端 API的使用以及开源 Zookeeper 客户端 ZkClient 和 Curator 的使用。
QQ讨论群组:984370849 706564342 欢迎加入讨论
想要深刻学习的同窗们能够加入QQ群讨论,有全套资源分享,经验探讨,没错,咱们等着你,分享互相的故事!