欢迎来到分布式管中窥豹之zookeeper小白学习系列,本系列会记录zookeeper以及分布式系统学习过程中的一些操作和细节,大饼果子非科班出身,如有错误,欢迎指出
准备:使用我们上一篇启动的zookeeper服务(如果已经关闭,再重新start就好),我们进入客户端
./bin/zkCli.sh
zookeeper的文件结构是类似linux的树状结构,我们来看一下
[zk: localhost:2181(CONNECTED) 0] ls / [zookeeper] [zk: localhost:2181(CONNECTED) 1] ls /zookeeper [quota] [zk: localhost:2181(CONNECTED) 2] ls /zookeeper/quota []
在zookeeper里,单位数据节点叫做znode,那么根目录下有一个znode zookeeper,zookeeper节点下有一个节点 quota,节点quota下没有节点
那么节点的信息是什么样子的
[zk: localhost:2181(CONNECTED) 3] get /zookeeper cZxid = 0x0 ctime = Thu Jan 01 07:30:00 SRET 1970 mZxid = 0x0 mtime = Thu Jan 01 07:30:00 SRET 1970 pZxid = 0x0 cversion = -1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 0 numChildren = 1
在这里我们看到get到的第一行是空的,说明这个节点里没有值,而下面的数据是节点的基本信息(节点信息会在之后的章节覆盖到)
那么其实zookeeper的使用,就是对这些节点数据进行操作(当然,这个要求也并不容易)
我们尝试一下使用客户端创建一个节点,创建一个叫做dabingguozi的节点,并赋值“hello”
[zk: localhost:2181(CONNECTED) 4] create /dabingguozi "hello" Created /dabingguozi [zk: localhost:2181(CONNECTED) 5] ls / [dabingguozi, zookeeper] [zk: localhost:2181(CONNECTED) 6] get /dabingguozi hello cZxid = 0x43 ctime = Fri Jan 25 15:38:22 SRET 2019 mZxid = 0x43 mtime = Fri Jan 25 15:38:22 SRET 2019 pZxid = 0x43 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 5 numChildren = 0
我们可以看到,dabingguozi成功的创建到了根目录,并且能够拿到dabingguozi这个节点的值“hello”,我们甚至可以再添加一个子节点
[zk: localhost:2181(CONNECTED) 7] create /dabingguozi/zk_learning "zookeeper" Created /dabingguozi/zk_learning [zk: localhost:2181(CONNECTED) 8] ls /dabingguozi [zk_learning] [zk: localhost:2181(CONNECTED) 9] get /dabingguozi/zk_learning zookeeper cZxid = 0x44 ctime = Fri Jan 25 15:41:13 SRET 2019 mZxid = 0x44 mtime = Fri Jan 25 15:41:13 SRET 2019 pZxid = 0x44 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 9 numChildren = 0
至此,我们观察了zookeeper的结构,并创建了一些节点。
引用《zookeeper分布式过程协议技术讲解》中的一张结构图作为结尾,zookeeper的节点结构就是这样的(该图作为观察节点结构的举例使用,其中节点命名和使用非必须)