zookeeper 客户端命令行操作
1. 基本语法¶
命令基本语法 | 功能描述 |
---|---|
help | 显示所有操作命令 |
ls path [watch] | 使用 ls 命令来查看当前znode中所包含的内容 |
ls2 path [watch] | 查看当前节点数据并能看到更新次数等数据 |
create | 普通创建-s 含有序列-e 临时(重启或者超时消失) |
get path [watch] | 获得节点的值 |
set | 设置节点的具体值 |
stat | 查看节点状态 |
delete | 删除节点 |
rmr | 递归删除节点 |
2. 操作¶
2.1 启动¶
root@leco:/usr/local/zookeeper/bin# ./zkCli.sh
2.2 帮助¶
[zk: localhost:2181(CONNECTED) 41] help ZooKeeper -server host:port cmd args stat path [watch] set path data [version] ls path [watch] delquota [-n|-b] path ls2 path [watch] setAcl path acl setquota -n|-b val path history redo cmdno printwatches on|off delete path [version] sync path listquota path rmr path get path [watch] create [-s] [-e] path data acl addauth scheme auth quit getAcl path close connect host:port
2.3 查看当前znode中所包含的内容¶
[zk: localhost:2181(CONNECTED) 42] ls / [cmz, zookeeper]
2.4 查看当前节点详细数据¶
[zk: localhost:2181(CONNECTED) 43] ls2 / [cmz, zookeeper] cZxid = 0x0 ctime = Thu Jan 01 08:00:00 CST 1970 mZxid = 0x0 mtime = Thu Jan 01 08:00:00 CST 1970 pZxid = 0x47 cversion = 6 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 0 numChildren = 2
2.5 分别创建2个普通节点¶
[zk: localhost:2181(CONNECTED) 44] create /leco "icpc" Created /leco [zk: localhost:2181(CONNECTED) 47] create /leco/cmz 'caimengzhi' Created /leco/cmz [zk: localhost:2181(CONNECTED) 48] ls / [cmz, zookeeper, leco] [zk: localhost:2181(CONNECTED) 49] ls /leco/ Command failed: java.lang.IllegalArgumentException: Path must not end with / character [zk: localhost:2181(CONNECTED) 50] ls /leco [cmz] [zk: localhost:2181(CONNECTED) 51] ls /leco/cmz []
2.6 获得节点的值¶
[zk: localhost:2181(CONNECTED) 57] ls / [cmz, zookeeper, leco] [zk: localhost:2181(CONNECTED) 58] ls /leco [cmz] [zk: localhost:2181(CONNECTED) 59] ls /leco/cmz [] [zk: localhost:2181(CONNECTED) 60] get /leco "icpc" cZxid = 0x48 ctime = Wed Aug 07 13:34:14 CST 2019 mZxid = 0x48 mtime = Wed Aug 07 13:34:14 CST 2019 pZxid = 0x4a cversion = 1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 6 numChildren = 1 [zk: localhost:2181(CONNECTED) 61] get /leco/cmz 'caimengzhi' cZxid = 0x4a ctime = Wed Aug 07 13:35:35 CST 2019 mZxid = 0x4a mtime = Wed Aug 07 13:35:35 CST 2019 pZxid = 0x4a cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 12 numChildren = 0
2.7 创建短暂节点¶
[zk: localhost:2181(CONNECTED) 64] ls / [cmz, zookeeper, leco] [zk: localhost:2181(CONNECTED) 65] create -e /leco/tmp 'tmp for test' Created /leco/tmp
- 在当前客户端是能查看到的
[zk: localhost:2181(CONNECTED) 67] ls /leco [cmz, tmp]
- 退出当前客户端然后再重启客户端
[zk: localhost:2181(CONNECTED) 69] quit Quitting... 2019-08-07 13:39:30,041 [myid:] - INFO [main:ZooKeeper@684] - Session: 0x16c6a1676db0000 closed 2019-08-07 13:39:30,041 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@509] - EventThread shut down root@leco:/usr/local/zookeeper/bin# ./zkCli.sh Connecting to localhost:2181 2019-08-07 13:39:33,131 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.5-139209 0, built on 09/30/2012 17:52 GMT2019-08-07 13:39:33,137 [myid:] - INFO [main:Environment@100] - Client environment:host.name=localhost 2019-08-07 13:39:33,137 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_40 2019-08-07 13:39:33,137 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation 2019-08-07 13:39:33,137 [myid:] - INFO [main:Environment@100] - Client environment:java.home=/usr/lib/jvm/jdk1.8. 0_40/jre2019-08-07 13:39:33,137 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=/usr/local/zoo keeper/bin/../build/classes:/usr/local/zookeeper/bin/../build/lib/*.jar:/usr/local/zookeeper/bin/../lib/slf4j-log4j12-1.6.1.jar:/usr/local/zookeeper/bin/../lib/slf4j-api-1.6.1.jar:/usr/local/zookeeper/bin/../lib/netty-3.2.2.Final.jar:/usr/local/zookeeper/bin/../lib/log4j-1.2.15.jar:/usr/local/zookeeper/bin/../lib/jline-0.9.94.jar:/usr/local/zookeeper/bin/../zookeeper-3.4.5.jar:/usr/local/zookeeper/bin/../src/java/lib/*.jar:/usr/local/zookeeper/bin/../conf:.:/usr/lib/jvm/jdk1.8.0_40/lib:/usr/lib/jvm/jdk1.8.0_40/jre/lib2019-08-07 13:39:33,138 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=/usr/java/pa ckages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib2019-08-07 13:39:33,138 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp 2019-08-07 13:39:33,138 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA> 2019-08-07 13:39:33,138 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux 2019-08-07 13:39:33,138 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64 2019-08-07 13:39:33,139 [myid:] - INFO [main:Environment@100] - Client environment:os.version=4.15.0-47-generic 2019-08-07 13:39:33,139 [myid:] - INFO [main:Environment@100] - Client environment:user.name=root 2019-08-07 13:39:33,139 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/root 2019-08-07 13:39:33,139 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/usr/local/zookeeper- 3.4.5/bin2019-08-07 13:39:33,141 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=localho st:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@5c29bfdWelcome to ZooKeeper! 2019-08-07 13:39:33,177 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@966] - Opening sock et connection to server localhost/192.168.5.110:2181. Will not attempt to authenticate using SASL (unknown error)JLine support is enabled 2019-08-07 13:39:33,266 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@849] - Socket conne ction established to localhost/192.168.5.110:2181, initiating session2019-08-07 13:39:33,276 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1207] - Session est ablishment complete on server localhost/192.168.5.110:2181, sessionid = 0x16c6a1676db0008, negotiated timeout = 30000 WATCHER:: WatchedEvent state:SyncConnected type:None path:null
- 再次查看根目录下短暂节点已经删除
[zk: localhost:2181(CONNECTED) 0] ls / [cmz, zookeeper, leco] [zk: localhost:2181(CONNECTED) 1] ls /leco [cmz]
2.8 创建带序号的节点¶
- 先创建一个普通的根节点
[zk: localhost:2181(CONNECTED) 2] ls / [cmz, zookeeper, leco] [zk: localhost:2181(CONNECTED) 3] create /leco/item '带节点' Created /leco/item
- 创建带序号的节点
[zk: localhost:2181(CONNECTED) 9] create -s /leco/item/name1 '张三' Created /leco/item/name10000000000 [zk: localhost:2181(CONNECTED) 9] create -s /leco/item/name2 '李四' Created /leco/item/name20000000001 [zk: localhost:2181(CONNECTED) 9] create -s /leco/item/name3 '王五' Created /leco/item/name30000000002 [zk: localhost:2181(CONNECTED) 17] ls /leco/item [name30000000002, name20000000001, name10000000000] [zk: localhost:2181(CONNECTED) 20] get /leco/item/name20000000001 '李四' cZxid = 0x50 ctime = Wed Aug 07 13:44:52 CST 2019 mZxid = 0x50 mtime = Wed Aug 07 13:44:52 CST 2019 pZxid = 0x50 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 8 numChildren = 0 删除节点 [zk: localhost:2181(CONNECTED) 18] rmr /leco/item/name10000000000 [zk: localhost:2181(CONNECTED) 19] ls /leco/item [name30000000002, name20000000001] [zk: localhost:2181(CONNECTED) 4] rmr /leco/item/name30000000002 [zk: localhost:2181(CONNECTED) 6] ls /leco/item [name20000000001] [zk: localhost:2181(CONNECTED) 7] create -s /leco/item/name4 'cmz' Created /leco/item/name40000000003 [zk: localhost:2181(CONNECTED) 8] ls /leco/item [name40000000003, name20000000001]
如果原来没有序号节点,序号从0开始依次递增。如果原节点下已有2个节点,则再排序时从2开始,以此类推。
2.9 修改节点的值¶
[zk: localhost:2181(CONNECTED) 12] get /leco/item/name20000000001 '李四' cZxid = 0x50 ctime = Wed Aug 07 13:44:52 CST 2019 mZxid = 0x50 mtime = Wed Aug 07 13:44:52 CST 2019 pZxid = 0x50 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 8 numChildren = 0 [zk: localhost:2181(CONNECTED) 13] set /leco/item/name20000000001 'lisi' cZxid = 0x50 ctime = Wed Aug 07 13:44:52 CST 2019 mZxid = 0x57 mtime = Wed Aug 07 13:50:32 CST 2019 pZxid = 0x50 cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 6 numChildren = 0 [zk: localhost:2181(CONNECTED) 14] get /leco/item/name20000000001 'lisi' cZxid = 0x50 ctime = Wed Aug 07 13:44:52 CST 2019 mZxid = 0x57 mtime = Wed Aug 07 13:50:32 CST 2019 pZxid = 0x50 cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 6 numChildren = 0
2.10 节点的值变化监听¶
[zk: localhost:2181(CONNECTED) 3] ls / [cmz, zookeeper] [zk: localhost:2181(CONNECTED) 5] create /leco 'root' Created /leco [zk: localhost:2181(CONNECTED) 6] create /leco/tmp1 'tmp1' Created /leco/tmp1 [zk: localhost:2181(CONNECTED) 7] create /leco/tmp2 'tmp2' Created /leco/tmp2 [zk: localhost:2181(CONNECTED) 8] ls / [cmz, zookeeper, leco] [zk: localhost:2181(CONNECTED) 10] ls /leco [tmp1, tmp2]
- 在master主机上注册监听/leco节点数据变化
[zk: localhost:2181(CONNECTED) 11] ls / [cmz, zookeeper, leco] [zk: localhost:2181(CONNECTED) 13] get /leco watch 'root' cZxid = 0x100000003 ctime = Wed Aug 07 13:52:21 CST 2019 mZxid = 0x100000003 mtime = Wed Aug 07 13:52:21 CST 2019 pZxid = 0x100000005 cversion = 2 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 6 numChildren = 2 查看值,待会在别的机器上修改 [zk: localhost:2181(CONNECTED) 8] set /leco 'LECO' cZxid = 0x100000003 ctime = Wed Aug 07 01:52:21 EDT 2019 mZxid = 0x100000008 mtime = Wed Aug 07 01:57:38 EDT 2019 pZxid = 0x100000005 cversion = 2 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 6 numChildren = 2
- 在slave1主机上修改/leco节点的数据
[zk: localhost:2181(CONNECTED) 7] get /leco 'root' cZxid = 0x100000003 ctime = Wed Aug 07 01:52:21 EDT 2019 mZxid = 0x100000003 mtime = Wed Aug 07 01:52:21 EDT 2019 pZxid = 0x100000005 cversion = 2 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 6 numChildren = 2 修改节点的值 [zk: localhost:2181(CONNECTED) 8] set /leco 'LECO' cZxid = 0x100000003 ctime = Wed Aug 07 01:52:21 EDT 2019 mZxid = 0x100000008 mtime = Wed Aug 07 01:57:38 EDT 2019 pZxid = 0x100000005 cversion = 2 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 6
- 观察master主机[开启监听]收到数据变化的监听
WATCHER:: WatchedEvent state:SyncConnected type:NodeDataChanged path:/leco
2.11 节点的子节点变化监听(路径变化)¶
- 在master主机上注册监听/leco节点的子节点变化
[zk: localhost:2181(CONNECTED) 16] ls / [cmz, zookeeper, leco] [zk: localhost:2181(CONNECTED) 17] ls /leco watch [tmp1, tmp2]
- 在slave1主机/leco节点上创建子节点
[zk: localhost:2181(CONNECTED) 11] create /leco/tmp3 'tmp3' Created /leco/tmp3 [zk: localhost:2181(CONNECTED) 12] ls /leco [tmp3, tmp1, tmp2]
- 观察master主机收到子节点变化的监听
WATCHER:: WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/leco
2.12 删除节点¶
- 非递归删除
[zk: localhost:2181(CONNECTED) 18] ls /leco [tmp3, tmp1, tmp2] [zk: localhost:2181(CONNECTED) 19] delete /leco Node not empty: /leco [zk: localhost:2181(CONNECTED) 20] delete /leco/tmp1 [zk: localhost:2181(CONNECTED) 21] ls /leco [tmp3, tmp2] [zk: localhost:2181(CONNECTED) 22] rmr /leco/tmp2 [zk: localhost:2181(CONNECTED) 23] ls /leco [tmp3]
- 递归删除
[zk: localhost:2181(CONNECTED) 26] ls / [cmz, zookeeper, leco] [zk: localhost:2181(CONNECTED) 27] ls /leco [tmp3] [zk: localhost:2181(CONNECTED) 28] rmr /leco
rmr 类似Linux 的rm -r
2.13 查看节点状态¶
[zk: localhost:2181(CONNECTED) 31] ls / [cmz, zookeeper] [zk: localhost:2181(CONNECTED) 32] stat /cmz cZxid = 0x100000002 ctime = Wed Aug 07 10:12:39 CST 2019 mZxid = 0x100000002 mtime = Wed Aug 07 10:12:39 CST 2019 pZxid = 0x100000002 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 12 numChildren = 0
解释
1)czxid-创建节点的事务zxid 每次修改ZooKeeper状态都会收到一个zxid形式的时间戳,也就是ZooKeeper事务ID。 事务ID是ZooKeeper中所有修改总的次序。每个修改都有唯一的zxid,如果zxid1小于zxid2,那么zxid1在zxid2之前发生。 2)ctime - znode被创建的毫秒数(从1970年开始) 3)mzxid - znode最后更新的事务zxid 4)mtime - znode最后修改的毫秒数(从1970年开始) 5)pZxid-znode最后更新的子节点zxid 6)cversion - znode子节点变化号,znode子节点修改次数 7)dataversion - znode数据变化号 8)aclVersion - znode访问控制列表的变化号 9)ephemeralOwner- 如果是临时节点,这个是znode拥有者的session id。如果不是临时节点则是0。 10)dataLength- znode的数据长度 11)numChildren - znode子节点数
2.14 查看历史操作¶
[zk: localhost:2181(CONNECTED) 35] history ls 25 - ls /leco 26 - ls / 27 - ls /leco 28 - rmr /leco 29 - ls 30 - ls / 31 - ls / 32 - stat /cmz 33 - history 34 - history ls 35 - history ls ZooKeeper -server host:port cmd args stat path [watch] set path data [version] ls path [watch] delquota [-n|-b] path ls2 path [watch] setAcl path acl setquota -n|-b val path history redo cmdno printwatches on|off delete path [version] sync path listquota path rmr path get path [watch] create [-s] [-e] path data acl addauth scheme auth quit getAcl path close connect host:port
2.15 配额¶
- 设置配额
节点可以存储数据,也可以创建子节点,但是如果不做控制,节点数据可以无限大,子节点数量也可以创建无数个,所以在有些场景下需要对节点的数据和子节点的数量需要做一些限制,zk为我们提供了setauota命令实现对子节点的限制功能。但是,zk并不是真正在的物理上对节点做了限制,而是如果超过了节点限制,会在zk的日志文件中记录配额超限的警告信息。
setquota -n|-b val path -n:限制子节点的数量 -b:限制节点的数据长度 val:根据-n和-b参数不同,val值的意义也不一样。 如果是-n参数,val表示限制子节点的数量。 如果是-b参数,val表示限制节点的数据长度
[zk: localhost:2181(CONNECTED) 10] create /cmz/tmp1 'tmp1' Created /cmz/tmp1 [zk: localhost:2181(CONNECTED) 11] create /cmz/tmp2 'tmp2' Created /cmz/tmp2 [zk: localhost:2181(CONNECTED) 12] create /cmz/tmp3 'tmp3' Created /cmz/tmp3
你可能会觉得奇怪,我明明限制了/node_01节点最多只能有2个节点,在创建第3个节点的时候并没有报错,也创建成功了,为什么限制没有起作用呢?在上面我也提到了,zk并没有在物理上限制节点的数量和数据的长度,当节点超过了限制,zk只会在后台记录节点限制的日志信息。下面我们看下zk日志文件中输出的节点配额限制警告信息
[root@master bin]# ls README.txt zkCleanup.sh zkCli.cmd zkCli.sh zkEnv.cmd zkEnv.sh zkServer.cmd zkServer.sh zookeeper.out [root@master bin]# grep Quota zookeeper.out 2019-08-07 14:23:48,072 [myid:1] - WARN [CommitProcessor:1:DataTree@388] - Quota exceeded: /cmz count=3 limit=2 2019-08-07 14:23:52,233 [myid:1] - WARN [CommitProcessor:1:DataTree@388] - Quota exceeded: /cmz count=4 limit=2
日志中输出的警告信息count=2,表示/cmz节点当前有3个子节点。limit=2,表示/cmz节点最多只能有2个节点。
- 显示配额
解释
Output quota:表示节点的配额信息,限制该节点最多有2个子节点,节点数据为-1,表示不限制 Output stat:表示当前节点的状态信息,该节点有4个子节点,节点数据长度为30
- 删除节点配额
delquota [-n|-b] path
- -n:删除子节点数量配额限制
- -b:删除节点数据长度配额限制
[zk: localhost:2181(CONNECTED) 16] delquota -n /cmz [zk: localhost:2181(CONNECTED) 17] listquota /cmz absolute path is /zookeeper/quota/cmz/zookeeper_limits Output quota for /cmz count=-1,bytes=-1 Output stat for /cmz count=4,bytes=30
2.16 再次执行某命令¶
[zk: localhost:2181(CONNECTED) 4] history 0 - history 1 - ls / 2 - ls /cmz/ 3 - ls /cmz 4 - history ZooKeeper -server host:port cmd args stat path [watch] set path data [version] ls path [watch] delquota [-n|-b] path ls2 path [watch] setAcl path acl setquota -n|-b val path history redo cmdno printwatches on|off delete path [version] sync path listquota path rmr path get path [watch] create [-s] [-e] path data acl addauth scheme auth quit getAcl path close connect host:port [zk: localhost:2181(CONNECTED) 5] redo 3 [] ZooKeeper -server host:port cmd args stat path [watch] set path data [version] ls path [watch] delquota [-n|-b] path ls2 path [watch] setAcl path acl setquota -n|-b val path history redo cmdno printwatches on|off delete path [version] sync path listquota path rmr path get path [watch] create [-s] [-e] path data acl addauth scheme auth quit getAcl path close connect host:port
其中3为命令ID,需与history配合使用。
2.17 同步¶
sync path
path: 节点路径,在对某个znode进行读操作时,应该先执行sync方法,使得读操作的连接所连的zk实例能与leader进行同步,从而保证能读到最新的数据。
[zk: localhost:2181(CONNECTED) 18] sync /cmz
注意:sync调用是异步的,无需等待调用的返回,zk服务器会保证所有后续的操作会在sync操作完成之后才执行,哪怕这些操作是在执行sync之前被提交的。
2.18 打开或关闭监听日志¶
在获取节点数据、子节点列表等操作时,都可以添加watch参数监听节点的变化,从而节点数据更改、子节点列表变更时收到通知,并输出到控制台。默认是打开,可以设置参数将其关闭。
printwatches on|off
[zk: localhost:2181(CONNECTED) 19] printwatches off [zk: localhost:2181(CONNECTED) 19] printwatches on
2.19 权限¶
2.19.1 查看权限¶
- 查看权限
getAcl path
- path:节点路径
ACL是zk对节点权限控制的一种策略.
[zk: master(CONNECTED) 26] getAcl /cmz 'world,'anyone : cdrwa
创建节点时如果没有设置acl权限,默认为所有用户都可以对该节点进行读写操作。
2.19.2 设置权限¶
setAcl path acl
- path:节点路径
- acl:ACL权限模式
2.20 关闭与连接¶
- close :关闭
- connect 主机 :链接主机
[zk: localhost:2181(CONNECTED) 22] close 2019-08-07 14:38:08,797 [myid:] - INFO [main:ZooKeeper@684] - Session: 0x16c69ca3b220001 closed [zk: localhost:2181(CLOSED) 23] 2019-08-07 14:38:08,798 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@509] - Event Thread shut down [zk: localhost:2181(CLOSED) 23] ls / Not connected [zk: localhost:2181(CLOSED) 24] connect master 2019-08-07 14:39:17,843 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=master sessionTime out=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@6d86b085ZooKeeper -server host:port cmd args stat path [watch] set path data [version] ls path [watch] delquota [-n|-b] path ls2 path [watch] setAcl path acl setquota -n|-b val path history redo cmdno printwatches on|off delete path [version] sync path listquota path rmr path get path [watch] create [-s] [-e] path data acl addauth scheme auth quit getAcl path close connect host:port [zk: master(CONNECTING) 25] 2019-08-07 14:39:17,846 [myid:] - INFO [main-SendThread(master:2181):ClientCnxn$SendThread@966] - Opening socket connection to server master/192.168.186.10:2181. Will not attempt to authenticate using SASL (unknown error)2019-08-07 14:39:17,847 [myid:] - INFO [main-SendThread(master:2181):ClientCnxn$SendThread@849] - Socket connection establis hed to master/192.168.186.10:2181, initiating session2019-08-07 14:39:17,852 [myid:] - INFO [main-SendThread(master:2181):ClientCnxn$SendThread@1207] - Session establishment com plete on server master/192.168.186.10:2181, sessionid = 0x16c69ca3b220002, negotiated timeout = 30000 WATCHER:: WatchedEvent state:SyncConnected type:None path:null [zk: master(CONNECTED) 25] ls / [cmz, zookeeper]