ZooKeeper命令简介

ZooKeeper的客户端包括Java版本和C语言版本。使用Java版本连接zk的命令以下:

1
bin/zkCli.sh -server ip:port

执行此命令,客户端成功连接上zk,会有类似以下的输出,其中,包括“Welcome to ZooKeeper!”的欢迎语,以及其他一些连接的信息等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
lihaodeMacBook-Pro:bin lihao$ ./zkCli.sh -server 127.0.0.1:2182
Connecting to 127.0.0.1:2182
2016-06-29 07:51:39,679 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.8--1, built on 02/06/2016 03:18 GMT
2016-06-29 07:51:39,682 [myid:] - INFO [main:Environment@100] - Client environment:host.name=192.168.31.107
2016-06-29 07:51:39,682 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_77
2016-06-29 07:51:39,684 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
……
2016-06-29 07:51:39,686 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=127.0.0.1:2182 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@531d72ca
Welcome to ZooKeeper!
2016-06-29 07:51:39,715 [myid:] - INFO [main-SendThread(127.0.0.1:2182):ClientCnxn$SendThread@1032] - Opening socket connection to server 127.0.0.1/127.0.0.1:2182. Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2016-06-29 07:51:39,797 [myid:] - INFO [main-SendThread(127.0.0.1:2182):ClientCnxn$SendThread@876] - Socket connection established to 127.0.0.1/127.0.0.1:2182, initiating session
[zk: 127.0.0.1:2182(CONNECTING) 0] 2016-06-29 07:51:39,830 [myid:] - INFO [main-SendThread(127.0.0.1:2182):ClientCnxn$SendThread@1299] - Session establishment complete on server 127.0.0.1/127.0.0.1:2182, sessionid = 0x155996605050000, negotiated timeout = 30000
WATCHER::
WatchedEvent state:SyncConnected type:None path:null

连接成功后,便可以使用命令与zk服务进行交互。

help

help命令会输出zk支持的所有命令。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[zk: 127.0.0.1:2182(CONNECTED) 0] 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

ls

查看指定路径下包含的节点

1
2
[zk: localhost:2181(CONNECTED) 2] ls /
[zookeeper]

create

创建一个节点,例如:

1
2
[zk: localhost:2181(CONNECTED) 3] create /zk mydata
Created /zk

以上命令创建一个/zk节点,且其内容为 “myData”

get

显示指定路径下节点的信息,例如,我们检查一下上面的/zk节点最否创建成功

1
2
3
4
5
6
7
8
9
10
11
12
13
[zk: localhost:2181(CONNECTED) 4] get /zk
mydata
cZxid = 0xb59
ctime = Thu Jun 30 11:13:24 CST 2016
mZxid = 0xb59
mtime = Thu Jun 30 11:13:24 CST 2016
pZxid = 0xb59
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0

可以看到/zk节点的内容为”myData”,且输出包含了znode的其他信息。有关各个字段的具体含义,请参见了本博客对znode的介绍。

set

设置节点的内容,例如:

1
2
3
4
5
[zk: localhost:2181(CONNECTED) 6] set /zk "anotherData"
……
[zk: localhost:2181(CONNECTED) 7] get /zk
"anotherData"
……

delete

删除一个节点,例如:

1
2
3
[zk: localhost:2181(CONNECTED) 8] delete /zk
[zk: localhost:2181(CONNECTED) 9] get /zk
Node does not exist: /zk

以上就是zk客户端最常用的几个命令,从这几个命令我们也可以看到zk提供的API设计的简单。

四字母命令

ZooKeeper提供了多个由4个字母构成的命令,可以使用nc或者telnet来使用这些命令。例如:

1
telnet 127.0.0.1 2181

成功连接zk后,输入conf
会看到以下输出

1
2
3
4
5
6
7
8
clientPort=2181
dataDir=D:\Soft\zookeeper-3.4.6\data\version-2
dataLogDir=D:\Soft\zookeeper-3.4.6\data\version-2
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=0

或者使用nc来向zk发送4字母命令,例如:

1
echo conf | nc 192.168.229.161 2181

其他常用的四字母命令如下表格所示:

表格:ZooKeeper提供的四字母命令

命令 描述
conf zk服务配置的详细信息
stat 客户端与zk连接的简要信息
srvr zk服务的详细信息
cons 客户端与zk连接的详细信息
mntr zk服务目前的性能状况
wchs watch的简要信息
wchc watch的详细信息,客户端 -> watch的映射,线上环境要小心使用
wchp watch的详细信息, znode -> 客户端的映射,线上环境要小心使用

例如,mntr 命令的输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
echo mntr | nc 192.168.229.161 2181
zk_version 3.4.6-1569965, built on 02/20/2014 09:09 GMT
zk_avg_latency 0
zk_max_latency 565
zk_min_latency 0
zk_packets_received 95353
zk_packets_sent 95713
zk_num_alive_connections 3
zk_outstanding_requests 0
zk_server_state leader
zk_znode_count 20
zk_watch_count 12
zk_ephemerals_count 9
zk_approximate_data_size 1465
zk_open_file_descriptor_count 37
zk_max_file_descriptor_count 65535
zk_followers 2 - 只有leader进程才有此项输出
zk_synced_followers 2 - 只有leader进程才有此项输出
zk_pending_syncs 0 - 只有leader进程才有此项输出

参考资料

  1. http://www.programering.com/a/MTOxUjMwATI.html
  2. https://zookeeper.apache.org/doc/r3.4.8/zookeeperStarted.html