前言
zk使用场景非常的多,今天收集了zk操作的客户端指令,供大家参考
登录zk服务命令
./zkCli.sh -timeout 5000 -server 127.0.0.1:2181
客户端与ZooKeeper建立链接
timeout:超时时间,单位毫秒
r:只读模式,当节点坏掉的时候,还可以提供读服务
登录成功显示如下:
root@941881570b74:/apache-zookeeper-3.6.2-bin/bin# ./zkCli.sh -timeout 5000 -server 127.0.0.1:2181
Connecting to 127.0.0.1:2181
2020-10-09 09:33:29,691 [myid:] - INFO [main:Environment@98] - Client environment:zookeeper.version=3.6.2--803c7f1a12f85978cb049af5e4ef23bd8b688715, built on 09/04/2020 12:44 GMT
2020-10-09 09:33:29,694 [myid:] - INFO [main:Environment@98] - Client environment:host.name=941881570b74
2020-10-09 09:33:29,694 [myid:] - INFO [main:Environment@98] - Client environment:java.version=11.0.8
2020-10-09 09:33:29,696 [myid:] - INFO [main:Environment@98] - Client environment:java.vendor=N/A
2020-10-09 09:33:29,697 [myid:] - INFO [main:Environment@98] - Client environment:java.home=/usr/local/openjdk-11
2020-10-09 09:33:29,697 [myid:] - INFO [main:Environment@98] - Client environment:java.class.path=/apache-zookeeper-3.6.2-bin/bin/../zookeeper-server/target/classes:/apache-zookeeper-3.6.2-bin/bin/../build/classes:/apache-zookeeper-3.6.2-bin/bin/../zookeeper-server/target/lib/*.jar:/apache-zookeeper-3.6.2-bin/bin/../build/lib/*.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/zookeeper-prometheus-metrics-3.6.2.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/zookeeper-jute-3.6.2.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/zookeeper-3.6.2.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/snappy-java-1.1.7.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/slf4j-log4j12-1.7.25.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/slf4j-api-1.7.25.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/simpleclient_servlet-0.6.0.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/simpleclient_hotspot-0.6.0.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/simpleclient_common-0.6.0.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/simpleclient-0.6.0.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/netty-transport-native-unix-common-4.1.50.Final.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/netty-transport-native-epoll-4.1.50.Final.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/netty-transport-4.1.50.Final.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/netty-resolver-4.1.50.Final.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/netty-handler-4.1.50.Final.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/netty-common-4.1.50.Final.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/netty-codec-4.1.50.Final.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/netty-buffer-4.1.50.Final.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/metrics-core-3.2.5.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/log4j-1.2.17.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/json-simple-1.1.1.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/jline-2.14.6.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/jetty-util-9.4.24.v20191120.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/jetty-servlet-9.4.24.v20191120.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/jetty-server-9.4.24.v20191120.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/jetty-security-9.4.24.v20191120.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/jetty-io-9.4.24.v20191120.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/jetty-http-9.4.24.v20191120.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/javax.servlet-api-3.1.0.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/jackson-databind-2.10.3.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/jackson-core-2.10.3.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/jackson-annotations-2.10.3.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/commons-lang-2.6.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/commons-cli-1.2.jar:/apache-zookeeper-3.6.2-bin/bin/../lib/audience-annotations-0.5.0.jar:/apache-zookeeper-3.6.2-bin/bin/../zookeeper-*.jar:/apache-zookeeper-3.6.2-bin/bin/../zookeeper-server/src/main/resources/lib/*.jar:/conf:
2020-10-09 09:33:29,697 [myid:] - INFO [main:Environment@98] - Client environment:java.library.path=/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib
2020-10-09 09:33:29,697 [myid:] - INFO [main:Environment@98] - Client environment:java.io.tmpdir=/tmp
2020-10-09 09:33:29,698 [myid:] - INFO [main:Environment@98] - Client environment:java.compiler=<NA>
2020-10-09 09:33:29,698 [myid:] - INFO [main:Environment@98] - Client environment:os.name=Linux
2020-10-09 09:33:29,698 [myid:] - INFO [main:Environment@98] - Client environment:os.arch=amd64
2020-10-09 09:33:29,698 [myid:] - INFO [main:Environment@98] - Client environment:os.version=4.19.76-linuxkit
2020-10-09 09:33:29,699 [myid:] - INFO [main:Environment@98] - Client environment:user.name=root
2020-10-09 09:33:29,699 [myid:] - INFO [main:Environment@98] - Client environment:user.home=/root
2020-10-09 09:33:29,699 [myid:] - INFO [main:Environment@98] - Client environment:user.dir=/apache-zookeeper-3.6.2-bin/bin
2020-10-09 09:33:29,699 [myid:] - INFO [main:Environment@98] - Client environment:os.memory.free=29MB
2020-10-09 09:33:29,701 [myid:] - INFO [main:Environment@98] - Client environment:os.memory.max=256MB
2020-10-09 09:33:29,702 [myid:] - INFO [main:Environment@98] - Client environment:os.memory.total=32MB
2020-10-09 09:33:29,706 [myid:] - INFO [main:ZooKeeper@1006] - Initiating client connection, connectString=127.0.0.1:2181 sessionTimeout=5000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@442675e1
2020-10-09 09:33:29,715 [myid:] - INFO [main:X509Util@77] - Setting -D jdk.tls.rejectClientInitiatedRenegotiation=true to disable client-initiated TLS renegotiation
2020-10-09 09:33:29,729 [myid:] - INFO [main:ClientCnxnSocket@239] - jute.maxbuffer value is 1048575 Bytes
2020-10-09 09:33:29,742 [myid:] - INFO [main:ClientCnxn@1716] - zookeeper.request.timeout value is 0. feature enabled=false
Welcome to ZooKeeper!
2020-10-09 09:33:29,788 [myid:127.0.0.1:2181] - INFO [main-SendThread(127.0.0.1:2181):ClientCnxn$SendThread@1167] - Opening socket connection to server localhost/127.0.0.1:2181.
2020-10-09 09:33:29,795 [myid:127.0.0.1:2181] - INFO [main-SendThread(127.0.0.1:2181):ClientCnxn$SendThread@1169] - SASL config status: Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2020-10-09 09:33:29,811 [myid:127.0.0.1:2181] - INFO [main-SendThread(127.0.0.1:2181):ClientCnxn$SendThread@999] - Socket connection established, initiating session, client: /127.0.0.1:55796, server: localhost/127.0.0.1:2181
2020-10-09 09:33:29,831 [myid:127.0.0.1:2181] - INFO [main-SendThread(127.0.0.1:2181):ClientCnxn$SendThread@1433] - Session establishment complete on server localhost/127.0.0.1:2181, session id = 0x100001dedb40012, negotiated timeout = 5000
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: 127.0.0.1:2181(CONNECTED) 0]
如上,表示我们和ZooKeeper建立了连接,可以通过命令与ZooKeeper进行交互了
h:帮助列表
[zk: 127.0.0.1:2181(CONNECTED) 0] h
ZooKeeper -server host:port -client-configuration properties-file cmd args
addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE
addauth scheme auth
close
config [-c] [-w] [-s]
connect host:port
create [-s] [-e] [-c] [-t ttl] path [data] [acl]
delete [-v version] path
deleteall path [-b batch size]
delquota [-n|-b] path
get [-s] [-w] path
getAcl [-s] path
getAllChildrenNumber path
getEphemerals path
history
listquota path
ls [-s] [-w] [-R] path
printwatches on|off
quit
reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
redo cmdno
removewatches path [-c|-d|-a] [-l]
set [-s] [-v version] path data
setAcl [-s] [-v version] [-R] path acl
setquota -n|-b val path
stat [-w] path
sync path
version
Command not found: Command not found h
[zk: 127.0.0.1:2181(CONNECTED) 1]
显示能够执行的命令
命令分类和数据库相似,大概可以分为增删改查四类
ZooKeeper数据结构:

大多数时候,我们队ZooKeeper的操作都是在对节点进行增删改查
常用命令
- 查询相关指令
ls path:列出path下的文件
[zk: 127.0.0.1:2181(CONNECTED) 1] ls /
[admin, brokers, cluster, config, consumers, controller, controller_epoch, etlAddTaskPath, isr_change_notification, latest_producer_id_block, log_dir_event_notification, zookeeper]
[zk: 127.0.0.1:2181(CONNECTED) 2]
如上:列出根目录节点下的所有文件
stat path:查看节点状态
[zk: 127.0.0.1:2181(CONNECTED) 2] stat /zookeeper
cZxid = 0x0
ctime = Thu Jan 01 00:00:00 UTC 1970
mZxid = 0x0
mtime = Thu Jan 01 00:00:00 UTC 1970
pZxid = 0x0
cversion = -2
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 2
[zk: 127.0.0.1:2181(CONNECTED) 3]
cZxid:创建节点时的事务id
pZxid:子节点列表最后一次被修改的事务id
cversion:节点版本号
dataCersion:数据版本号
aclVerson:acl权限版本号
…
get path:获取指定节点的内容
ls2 path:列出path节点的子节点及状态信息
- 创建指令
create [-s] [-e] path data acl
[zk: 127.0.0.1:2181(CONNECTED) 3] create /test_node_1 123
Created /test_node_1
如上:在根目录创建了test_node_1节点,携带数据 123
使用 get /test_node_1 验证是否添加节点及其数据成功
[zk: 127.0.0.1:2181(CONNECTED) 6] get /test_node_1
123
创建了一个临时节点(-e),并且携带数据234,使用stat命令查看这个新建的临时节点
[zk: 127.0.0.1:2181(CONNECTED) 15] create -e /test_node_1/node_1_1 234
Created /test_node_1/node_1_1
使用 get /temp_node_1验证是否添加节点及其数据成功
[zk: 127.0.0.1:2181(CONNECTED) 4] get /test_node_1/node_1_1
234
使用stat命令查看这个新建的临时节点
[zk: 127.0.0.1:2181(CONNECTED) 5] stat /test_node_1/node_1_1
cZxid = 0x3a6
ctime = Fri Oct 09 09:46:39 UTC 2020
mZxid = 0x3a6
mtime = Fri Oct 09 09:46:39 UTC 2020
pZxid = 0x3a6
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x100001dedb40013
dataLength = 4
numChildren = 0
[zk: 127.0.0.1:2181(CONNECTED) 6]
ephemeralOwner值不再是0,表示这个临时节点的版本号,如果是永久节点则其值为 0x0
通过使用-s参数,创建一个顺序节点,我们虽然指定的节点名是node_1_1,但是实际上,名称却是 node_1_10000000001,如果我们重复执行:
[zk: 127.0.0.1:2181(CONNECTED) 2] create -s /test_node_1/node_1_1 234
Created /test_node_1/node_1_10000000001
重复执行的效果图

这个特性,我们可以利用一下,生成在分布式环境下的主键生成器
-s 和 -e 可以同时使用
- 删除指令:
delete path [version]
删除指定节点数据,其version参数的作用于set指定一致
delete /test_node_1/node_1_10000000001
整个节点全删除
注意:delete只能删除不包含子节点的节点,如果要删除的节点包含子节点,使用deleteall命令
deleteall /node_1