
前言
在3台机器分别部署了zookeeper-3.4.5,本文操作是在此基础上进行的。部署详情参见上一篇文章 ZooKeeper部署.
客户端登录与帮助查看
# 由于是集群模式,所以可以在3台机器的其中任意一台进行登录,操作结果和数据也会同步到其他机器[root@docker01 bin]# pwd/app/zookeeper-3.4.5/bin[root@docker01 bin]# lltotal 64-rwxr-xr-x 1 501 games 238 Oct 1 2012 README.txt-rwxr-xr-x 1 501 games 1909 Oct 1 2012 zkCleanup.sh-rwxr-xr-x 1 501 games 1049 Oct 1 2012 zkCli.cmd-rwxr-xr-x 1 501 games 1512 Oct 1 2012 zkCli.sh-rwxr-xr-x 1 501 games 1333 Oct 1 2012 zkEnv.cmd-rwxr-xr-x 1 501 games 2599 Oct 1 2012 zkEnv.sh-rwxr-xr-x 1 501 games 1084 Oct 1 2012 zkServer.cmd-rwxr-xr-x 1 501 games 5467 Oct 1 2012 zkServer.sh-rw-r--r-- 1 root root 25108 May 26 14:51 zookeeper.out[root@docker01 bin]# ./zkCli.sh # 客户端登录……………… # 一些摘要信息[zk: localhost:2181(CONNECTED) 0][zk: localhost:2181(CONNECTED) 0] help # 客户端帮助信息ZooKeeper -server host:port cmd argsstat path [watch] # 查看路径【节点】属性信息 [watch] 观察模式,有改变则会被通知,watch一次有效一次set path data [version] # 设置/修改节点信息ls path [watch] # 查看路径【节点】 [watch] 观察模式,有改变则会被通知,watch一次有效一次delquota [-n|-b] pathls2 path [watch]setAcl path aclsetquota -n|-b val pathhistoryredo cmdnoprintwatches on|offdelete path [version] # 删除节点sync pathlistquota pathrmr path # 递归删除get path [watch] # 更具路径【节点】得到信息 [watch] 观察模式,有改变则会被通知,watch一次有效一次create [-s] [-e] path data acl # 创建节点和数据 -s 序列化【避免重复】 -e 临时数据【常用】addauth scheme authquit # 退出客户端getAcl pathcloseconnect host:port # 可以连接到其他客户端,前提在一个集群内[zk: localhost:2181(CONNECTED) 1]
数据的属性说明
| 属性 | 描述 |
|---|---|
| czxid | 节点被创建的Zxid值 |
| mzxid | 节点被修改的Zxid值 |
| ctime | 节点被创建的时间 |
| mtime | 节点最后一次被修改的时间 |
| versoin | 节点被修改的版本号 |
| cversion | 节点的所拥有子节点被修改的版本号 |
| aversion | 节点的ACL被修改的版本号 |
| emphemeralOwner | 如果此节点为临时节点,那么它的值为这个节点拥有者的会话ID;否则,它的值为0 |
| dataLength | 节点数据域的长度 |
| numChildren | 节点拥有的子节点个数 |
常用操作
切换到其他客户端
[zk: localhost:2181(CONNECTED) 1] connect 172.16.1.13:2181……………… # 一些摘要信息WATCHER::WatchedEvent state:SyncConnected type:None path:null[zk: 172.16.1.13:2181(CONNECTED) 2]
节点的增删改查
增加节点
[zk: 172.16.1.13:2181(CONNECTED) 2] ls[zookeeper][zk: 172.16.1.13:2181(CONNECTED) 3] create zhang01/yang01 test0001 # 保证父节点存在Node does not exist: zhang01/yang01[zk: 172.16.1.13:2181(CONNECTED) 4][zk: 172.16.1.13:2181(CONNECTED) 4] create zhang01 test01Created zhang01[zk: 172.16.1.13:2181(CONNECTED) 5] ls[zookeeper, zhang01]
查询节点
[zk: 172.16.1.13:2181(CONNECTED) 7] ls[zookeeper, zhang01][zk: 172.16.1.13:2181(CONNECTED) 8] get zhang01test01 # 内容cZxid = 0x100000007 # 创建数据时的事物编号ctime = Sat May 26 15:11:40 CST 2018 # 创建时间mZxid = 0x100000007 # 修改数据时的事物编号mtime = Sat May 26 15:11:40 CST 2018 # 修改时间pZxid = 0x100000007 # 持久化事物编号cversion = 0 # 创建版本号dataVersion = 0 # 数据版本aclVersion = 0 # 权限版本ephemeralOwner = 0x0 # 持久接待dataLength = 6 # 数据长度numChildren = 0 # 子节点数
修改节点
[zk: 172.16.1.13:2181(CONNECTED) 9] ls[zookeeper, zhang01][zk: 172.16.1.13:2181(CONNECTED) 10] set zhang01 1111111 # 修改节点信息cZxid = 0x100000007ctime = Sat May 26 15:11:40 CST 2018mZxid = 0x100000009mtime = Sat May 26 15:15:38 CST 2018pZxid = 0x100000007cversion = 0dataVersion = 1aclVersion = 0ephemeralOwner = 0x0dataLength = 7numChildren = 0[zk: 172.16.1.13:2181(CONNECTED) 11] get zhang011111111cZxid = 0x100000007ctime = Sat May 26 15:11:40 CST 2018mZxid = 0x100000009mtime = Sat May 26 15:15:38 CST 2018pZxid = 0x100000007cversion = 0dataVersion = 1aclVersion = 0ephemeralOwner = 0x0dataLength = 7numChildren = 0
节点常规删除
[zk: localhost:2181(CONNECTED) 1] ls zhang01[test04, test03, test02, test01][zk: localhost:2181(CONNECTED) 3] ls zhang01/test04 # 没有子节点[][zk: localhost:2181(CONNECTED) 4] get zhang01/test04date_test04cZxid = 0x10000000d………………[zk: localhost:2181(CONNECTED) 5] delete zhang01/test04 # 删除子节点[zk: localhost:2181(CONNECTED) 6] ls zhang01 # 经查看删除成功[test03, test02, test01][zk: localhost:2181(CONNECTED) 7] delete zhang01 # 如果有子节点那么不能删除Node not empty: zhang01
递归删除节点
[zk: localhost:2181(CONNECTED) 8] ls zhang01[test03, test02, test01][zk: localhost:2181(CONNECTED) 9] rmr zhang01 # 递归删除[zk: localhost:2181(CONNECTED) 10] ls zhang01 # 删除成功Node does not exist: zhang01[zk: localhost:2181(CONNECTED) 11] ls[zookeeper]
持久节点和临时节点
第一台客户端
[zk: localhost:2181(CONNECTED) 14] ls[zookeeper][zk: localhost:2181(CONNECTED) 15] create zhang01 yang01 # 默认持久节点Created zhang01[zk: localhost:2181(CONNECTED) 16] create -e zhang02 yang02 # 创建临时节点Created zhang02[zk: localhost:2181(CONNECTED) 17] ls[zookeeper, zhang02, zhang01][zk: localhost:2181(CONNECTED) 18] get zhang01yang01cZxid = 0x100000018ctime = Sat May 26 15:33:47 CST 2018mZxid = 0x100000018mtime = Sat May 26 15:33:47 CST 2018pZxid = 0x100000018cversion = 0dataVersion = 0aclVersion = 0ephemeralOwner = 0x0 # 代表持久节点dataLength = 6numChildren = 0[zk: localhost:2181(CONNECTED) 19] get zhang02yang02cZxid = 0x100000019ctime = Sat May 26 15:33:55 CST 2018mZxid = 0x100000019mtime = Sat May 26 15:33:55 CST 2018pZxid = 0x100000019cversion = 0dataVersion = 0aclVersion = 0ephemeralOwner = 0x1639b3087ac0002 # 代表临时节点dataLength = 6numChildren = 0[zk: localhost:2181(CONNECTED) 20] quit # 退出当前客户端【那么当前这个客户端创建的临时节点会被自动删除】
第二台客户端
# 之前可以正常查到,但是当上面的客户端退出后,节点/zhang02 被自动删除了[zk: localhost:2181(CONNECTED) 4] ls /[zookeeper, zhang01]
节点序列化
[zk: localhost:2181(CONNECTED) 14] ls /[zookeeper, zhang01][zk: localhost:2181(CONNECTED) 15] ls /zhang01[][zk: localhost:2181(CONNECTED) 16][zk: localhost:2181(CONNECTED) 16] create -s /zhang01/test01 test01Created /zhang01/test010000000002[zk: localhost:2181(CONNECTED) 17] create -s -e /zhang01/test02 test02Created /zhang01/test020000000003[zk: localhost:2181(CONNECTED) 18][zk: localhost:2181(CONNECTED) 18] ls /zhang01[test020000000003, test010000000002]
watch模式节点操作
watch监听有不同的类型,有监听状态的stat ,内容的get,目录结构的ls。
watch节点属性
监听到自身属性改变则被通知
# 第一台客户端监听[zk: localhost:2181(CONNECTED) 4] ls /[zookeeper, zhang01][zk: localhost:2181(CONNECTED) 5] stat /zhang01 watchcZxid = 0x100000018ctime = Sat May 26 15:33:47 CST 2018mZxid = 0x10000001emtime = Sat May 26 15:44:20 CST 2018pZxid = 0x100000018cversion = 0dataVersion = 2aclVersion = 0ephemeralOwner = 0x0dataLength = 8numChildren = 0# 第二台客户端操作[zk: localhost:2181(CONNECTED) 10] set /zhang01 yyyywwwww # 修改节点信息,节点属性被改变……………………# 第一台客户端自动响应[zk: localhost:2181(CONNECTED) 6]WATCHER::WatchedEvent state:SyncConnected type:NodeDataChanged path:/zhang01
watch路径
# 第一台客户端[zk: localhost:2181(CONNECTED) 6] ls /zhang01 watch[]# 第二台客户端操作[zk: localhost:2181(CONNECTED) 11] create -e /zhang01/test01 test01Created /zhang01/test01# 第一台客户端自动响应[zk: localhost:2181(CONNECTED) 7]WATCHER::WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/zhang01[zk: localhost:2181(CONNECTED) 7]
watch节点内容
节点自身内容改变和节点被删除都会被通知
自身属性改变
# 第一台客户端[zk: localhost:2181(CONNECTED) 7] ls /[zookeeper, zhang01][zk: localhost:2181(CONNECTED) 8] ls /zhang01[test01][zk: localhost:2181(CONNECTED) 9][zk: localhost:2181(CONNECTED) 9] get /zhang01/test01 watchtest01cZxid = 0x100000020………………# 第二台客户端操作[zk: localhost:2181(CONNECTED) 12] set /zhang01/test01 kkkkcZxid = 0x100000020ctime = Sat May 26 15:49:30 CST 2018………………# 第一台客户端自动响应[zk: localhost:2181(CONNECTED) 10]WATCHER::WatchedEvent state:SyncConnected type:NodeDataChanged path:/zhang01/test01[zk: localhost:2181(CONNECTED) 10]
节点删除
# 第一台客户端[zk: localhost:2181(CONNECTED) 10] get /zhang01/test01 watchkkkkcZxid = 0x100000020………………# 第二台客户端操作[zk: localhost:2181(CONNECTED) 14] delete /zhang01/test01# 第一台客户端自动响应[zk: localhost:2181(CONNECTED) 11]WATCHER::WatchedEvent state:SyncConnected type:NodeDeleted path:/zhang01/test01[zk: localhost:2181(CONNECTED) 11]
另请参见:
———END———
如果觉得不错就关注下呗 (-^O^-) !

文章转载自OpenInfo,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




