zookeeper基础命令

xiaoxiao2021-02-27  219

zookeeper基础命令

1. 配置

复制conf下的zoo_sample.cfg

cp conf/zoo_sample.cfg conf/zoo.cfg

2. 启动

bin/zkServer.sh start

➜ zookeeper bin/zkServer.sh start ZooKeeper JMX enabled by default Using config: /Users/lilongjiu/03application/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED ➜ zookeeper

配置:默认zoo.cfg (在zkEnv.sh中默认读取zoo.cfg)

日志:默认zookeeper.out (zkServer.sh)

3. 连接

bin/zkCli.sh -timeout 5000 -server ip:port

➜ zookeeper bin/zkCli.sh -timeout 5000 -server 127.0.0.1:2181 Connecting to 127.0.0.1:2181 2017-08-04 21:34:33,274 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.10-39d3a4f269333c922ed3db283be479f9deacaa0f, built on 03/23/2017 10:13 GMT 2017-08-04 21:34:33,276 [myid:] - INFO [main:Environment@100] - Client environment:host.name=bogon 2017-08-04 21:34:33,276 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_111 2017-08-04 21:34:33,278 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation 2017-08-04 21:34:33,278 [myid:] - INFO [main:Environment@100] - Client environment:java.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre 2017-08-04 21:34:33,278 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=/Users/lilongjiu/03application/zookeeper/bin/../build/classes:/Users/lilongjiu/03application/zookeeper/bin/../build/lib/*.jar:/Users/lilongjiu/03application/zookeeper/bin/../lib/slf4j-log4j12-1.6.1.jar:/Users/lilongjiu/03application/zookeeper/bin/../lib/slf4j-api-1.6.1.jar:/Users/lilongjiu/03application/zookeeper/bin/../lib/netty-3.10.5.Final.jar:/Users/lilongjiu/03application/zookeeper/bin/../lib/log4j-1.2.16.jar:/Users/lilongjiu/03application/zookeeper/bin/../lib/jline-0.9.94.jar:/Users/lilongjiu/03application/zookeeper/bin/../zookeeper-3.4.10.jar:/Users/lilongjiu/03application/zookeeper/bin/../src/java/lib/*.jar:/Users/lilongjiu/03application/zookeeper/bin/../conf: 2017-08-04 21:34:33,278 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=/Users/lilongjiu/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:. 2017-08-04 21:34:33,278 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/var/folders/6q/t2vsnbxx6vsdt26xtlhb9yhr0000gn/T/ 2017-08-04 21:34:33,278 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA> 2017-08-04 21:34:33,279 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Mac OS X 2017-08-04 21:34:33,279 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=x86_64 2017-08-04 21:34:33,279 [myid:] - INFO [main:Environment@100] - Client environment:os.version=10.12.3 2017-08-04 21:34:33,279 [myid:] - INFO [main:Environment@100] - Client environment:user.name=lilongjiu 2017-08-04 21:34:33,279 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/Users/lilongjiu 2017-08-04 21:34:33,279 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/Users/lilongjiu/03application/zookeeper 2017-08-04 21:34:33,280 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=127.0.0.1:2181 sessionTimeout=5000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@531d72ca Welcome to ZooKeeper! 2017-08-04 21:34:33,302 [myid:] - INFO [main-SendThread(127.0.0.1:2181):ClientCnxn$SendThread@1032] - Opening socket connection to server 127.0.0.1/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error) JLine support is enabled 2017-08-04 21:34:33,363 [myid:] - INFO [main-SendThread(127.0.0.1:2181):ClientCnxn$SendThread@876] - Socket connection established to 127.0.0.1/127.0.0.1:2181, initiating session [zk: 127.0.0.1:2181(CONNECTING) 0] 2017-08-04 21:34:33,447 [myid:] - INFO [main-SendThread(127.0.0.1:2181):ClientCnxn$SendThread@1299] - Session establishment complete on server 127.0.0.1/127.0.0.1:2181, sessionid = 0x15dad7222110000, negotiated timeout = 5000 WATCHER:: WatchedEvent state:SyncConnected type:None path:null [zk: 127.0.0.1:2181(CONNECTED) 0] ls / [zookeeper] [zk: 127.0.0.1:2181(CONNECTED) 1]

4. 命令列表

WatchedEvent state:SyncConnected type:None path:null [zk: 127.0.0.1:2181(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 [zk: 127.0.0.1:2181(CONNECTED) 1]

4.1 查询类命令

4.1.1 查询子节点

ls path [watch]

[zk: 127.0.0.1:2181(CONNECTED) 1] ls /node [node2, node3, node1] [zk: 127.0.0.1:2181(CONNECTED) 2]
4.1.2 查询节点状态

stat path [watch]

zookeeper 每一次对数据节点的写操作,都是一次事务,每一个事务系统都会分配一个唯一的id来标识这个事务。

[zk: 127.0.0.1:2181(CONNECTED) 2] stat /node cZxid = 0x100000005 #创建时的事务id ctime = Sun Jun 04 11:30:29 CST 2017 #创建的时的时间 mZxid = 0x100000005 #最后一次更新时的事务id mtime = Sun Jun 04 11:30:29 CST 2017 #最后一次更新时的时间 pZxid = 0x10000000a #节点的子节点列表最后一次更新时的事务id(添加或删除子节点,更新子节点内容不算) cversion = 3 #子节点版本号 dataVersion = 0 #数据版本号 aclVersion = 0 #ACL权限版本号 ephemeralOwner = 0x0 #创建临时节点的事务id,如果永久节点,默认时0 dataLength = 4 #当前节点数据的长度 numChildren = 3 #当前节点的子节点个数 [zk: 127.0.0.1:2181(CONNECTED) 3]
4.1.3 查询节点数据

get path [watch]

[zk: 127.0.0.1:2181(CONNECTED) 3] get /node test cZxid = 0x100000005 ctime = Sun Jun 04 11:30:29 CST 2017 mZxid = 0x100000005 mtime = Sun Jun 04 11:30:29 CST 2017 pZxid = 0x10000000a cversion = 3 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 4 numChildren = 3 [zk: 127.0.0.1:2181(CONNECTED) 4]
4.1.4 查询子节点列表

ls2 path [watch]

比 ls 多了节点状态信息

[zk: 127.0.0.1:2181(CONNECTED) 4] ls2 /node [node2, node3, node1] cZxid = 0x100000005 ctime = Sun Jun 04 11:30:29 CST 2017 mZxid = 0x100000005 mtime = Sun Jun 04 11:30:29 CST 2017 pZxid = 0x10000000a cversion = 3 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 4 numChildren = 3 [zk: 127.0.0.1:2181(CONNECTED) 5]

4.2 创建类指令

create [-s] [-e] path data acl

path: 路径, data:数据

-s: 顺序节点

-e: 临时节点

4.2.1 创建节点
[zk: 127.0.0.1:2181(CONNECTED) 5] create /node/node4 4 Created /node/node4 [zk: 127.0.0.1:2181(CONNECTED) 6] get /node/node4 4 cZxid = 0x10000000f ctime = Sun Jun 04 12:15:28 CST 2017 mZxid = 0x10000000f mtime = Sun Jun 04 12:15:28 CST 2017 pZxid = 0x10000000f cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 1 numChildren = 0 [zk: 127.0.0.1:2181(CONNECTED) 7]
4.2.2 创建临时节点
[zk: 127.0.0.1:2181(CONNECTED) 7] create -e /node/node4/node4_1 41 Created /node/node4/node4_1 [zk: 127.0.0.1:2181(CONNECTED) 8] ls /node/node4 [node4_1] [zk: 127.0.0.1:2181(CONNECTED) 9] [zk: 127.0.0.1:2181(CONNECTED) 10] quit Quitting... 2017-06-04 12:19:30,763 [myid:] - INFO [main:ZooKeeper@684] - Session: 0x15c7118be740003 closed 2017-06-04 12:19:30,765 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@519] - EventThread shut down for session: 0x15c7118be740003 lilongjiu@bogonbin$

当退出重新登陆后,node4的子节点node4_1已经不存在了。临时节点在客户端session实效后,会自动被zookeeper从服务端删除。

[zk: 127.0.0.1:2181(CONNECTED) 0] ls /node/node4 [] [zk: 127.0.0.1:2181(CONNECTED) 1]
4.2.3 创建顺序节点

创建相同的顺序节点,zookeeper会自动添加序列号

[zk: 127.0.0.1:2181(CONNECTED) 1] create -s /node/node4/node4_1 41 Created /node/node4/node4_10000000001 [zk: 127.0.0.1:2181(CONNECTED) 2] create -s /node/node4/node4_1 41 Created /node/node4/node4_10000000002 [zk: 127.0.0.1:2181(CONNECTED) 3] create -s /node/node4/node4_1 41 Created /node/node4/node4_10000000003 [zk: 127.0.0.1:2181(CONNECTED) 4]

4.3 修改类指令

set path data [version]

4.3.1 修改节点数据
[zk: 127.0.0.1:2181(CONNECTED) 0] get /node/node3 3 #当前值 cZxid = 0x10000000a ctime = Sun Jun 04 11:33:17 CST 2017 mZxid = 0x10000000a mtime = Sun Jun 04 11:33:17 CST 2017 pZxid = 0x10000000a cversion = 0 dataVersion = 0 #当前数据版本号 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 1 numChildren = 0 [zk: 127.0.0.1:2181(CONNECTED) 1] set /node/node3 333 cZxid = 0x10000000a ctime = Sun Jun 04 11:33:17 CST 2017 mZxid = 0x100000018 mtime = Sun Jun 04 12:37:22 CST 2017 pZxid = 0x10000000a cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 0 [zk: 127.0.0.1:2181(CONNECTED) 2] get /node/node3 333 #修改后的值 cZxid = 0x10000000a ctime = Sun Jun 04 11:33:17 CST 2017 mZxid = 0x100000018 mtime = Sun Jun 04 12:37:22 CST 2017 pZxid = 0x10000000a cversion = 0 dataVersion = 1 #修改后数据版本号 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 0 [zk: 127.0.0.1:2181(CONNECTED) 3]

再次修改,修改后的值与原来的值一样。可以看到,再次修改前时数据版本号是1,修改后数据版本号时2。 也就是说,不管修改后的值是否与原来的值一样,数据版本号都增加1

[zk: 127.0.0.1:2181(CONNECTED) 3] set /node/node3 333 cZxid = 0x10000000a ctime = Sun Jun 04 11:33:17 CST 2017 mZxid = 0x100000019 mtime = Sun Jun 04 12:40:51 CST 2017 pZxid = 0x10000000a cversion = 0 dataVersion = 2 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 0 [zk: 127.0.0.1:2181(CONNECTED) 4] get /node/node3 333 #再次修改后的值 cZxid = 0x10000000a ctime = Sun Jun 04 11:33:17 CST 2017 mZxid = 0x100000019 mtime = Sun Jun 04 12:40:51 CST 2017 pZxid = 0x10000000a cversion = 0 dataVersion = 2 #再次修改后的版本号 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 0 [zk: 127.0.0.1:2181(CONNECTED) 5]
4.3.2 修改节点数据(带版本号)

当前节点状态如下:

[zk: 127.0.0.1:2181(CONNECTED) 7] get /node/node3 333 #数据 cZxid = 0x10000000a ctime = Sun Jun 04 11:33:17 CST 2017 mZxid = 0x10000001a mtime = Sun Jun 04 12:43:25 CST 2017 pZxid = 0x10000000a cversion = 0 dataVersion = 3 #版本号 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 0 [zk: 127.0.0.1:2181(CONNECTED) 8]

修改了两次:

第一次成功,并且可以看到返回的版本号时4第二次修改失败是因为版本号已经是4,但是修改命令带的版本号是3我们修改节点数据的时候,如果带版本号,那么这个版本号一定要和服务器的版本号一致,否则会报错。类似CAS操作,附带的版本号是期待的版本号,只有数据库版本号和我们期待的一致,才能修改成功 [zk: 127.0.0.1:2181(CONNECTED) 8] set /node/node3 333 3 cZxid = 0x10000000a ctime = Sun Jun 04 11:33:17 CST 2017 mZxid = 0x100000022 mtime = Sun Jun 04 12:52:23 CST 2017 pZxid = 0x10000000a cversion = 0 dataVersion = 4 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 0 [zk: 127.0.0.1:2181(CONNECTED) 9] set /node/node3 333 3 version No is not valid : /node/node3 [zk: 127.0.0.1:2181(CONNECTED) 10]

4.4 删除类指令

delete path [version]

rmr path

同样,delete命令也带一个版本号,这个用法和set指令的版本号用法是一致的。

当前节点如下:

[zk: 127.0.0.1:2181(CONNECTED) 21] ls /node [node4, node2, node3, node1] [zk: 127.0.0.1:2181(CONNECTED) 22] ls /node/node3 [node3_1] [zk: 127.0.0.1:2181(CONNECTED) 23]
4.4.1 删除节点
[zk: 127.0.0.1:2181(CONNECTED) 23] delete /node/node3 Node not empty: /node/node3

注意:delete只能删除没有子节点的节点

4.4.2 删除有子节点的节点
[zk: 127.0.0.1:2181(CONNECTED) 24] rmr /node/node3 [zk: 127.0.0.1:2181(CONNECTED) 25] ls /node [node4, node2, node1] [zk: 127.0.0.1:2181(CONNECTED) 26]

4.5 配额

限制节点的子节点个数,或者节点的数据长度。

setquota -n|-b val path

-n:子节点的个数

-b:子节点数据长度

当前状态:节点/node/node3没有子节点

[zk: 127.0.0.1:2181(CONNECTED) 0] ls /node/node3 [] [zk: 127.0.0.1:2181(CONNECTED) 1]
4.5.1 设置配额

设置/node/node3 子节点个数为2

[zk: 127.0.0.1:2181(CONNECTED) 1] setquota -n 2 /node/node3 Comment: the parts are option -n val 2 path /node/node3

为/node/node3增加2个子节点:node3_1、node3_2

[zk: 127.0.0.1:2181(CONNECTED) 2] create /node/node3/node3_1 31 Created /node/node3/node3_1 [zk: 127.0.0.1:2181(CONNECTED) 3] create /node/node3/node3_2 32 Created /node/node3/node3_2 [zk: 127.0.0.1:2181(CONNECTED) 4]

现在,再为节点/node/node3增加一个子节点:node3_3

[zk: 127.0.0.1:2181(CONNECTED) 4] create /node/node3/node3_3 33 Created /node/node3/node3_3 [zk: 127.0.0.1:2181(CONNECTED) 5]

增加第三个节点node3_3居然没有报错,这是因为:当配额超过限制时zookeeper并不会报错,仅仅只是在日志中记录超过配额的信息。

下面是zookeeper的日志,记录超过配额,当前count是4,是因为子节点的个数包括本身,也就是说在增加第2个子节点node3_2的时候就已经超过配额了。

2017-06-04 13:32:34,899 [myid:1] - WARN [CommitProcessor:1:DataTree@301] - Quota exceeded: /node/node3 count=3 limit=2 2017-06-04 13:38:19,010 [myid:1] - WARN [CommitProcessor:1:DataTree@301] - Quota exceeded: /node/node3 count=4 limit=2
4.5.2 查询配额

listquota path

[zk: 127.0.0.1:2181(CONNECTED) 5] listquota /node/node3 absolute path is /zookeeper/quota/node/node3/zookeeper_limits Output quota for /node/node3 count=2,bytes=-1 #配置:子节点个数2,数据长度-1 表示没有限制 Output stat for /node/node3 count=4,bytes=7 #实际:子节点个数4(包含本身),数据长度7(包含本身) [zk: 127.0.0.1:2181(CONNECTED) 6]
4.5.3 删除配额

delquota [-n|-b] path

[zk: 127.0.0.1:2181(CONNECTED) 6] delquota -n /node/node3 [zk: 127.0.0.1:2181(CONNECTED) 7] listquota /node/node3 absolute path is /zookeeper/quota/node/node3/zookeeper_limits Output quota for /node/node3 count=-1,bytes=-1 #配置:子节点个数-1,表示没有限制;数据长度-1 表示没有限制 Output stat for /node/node3 count=4,bytes=7 [zk: 127.0.0.1:2181(CONNECTED) 8]

4.6 其他指令

4.6.1 历史命令

history

[zk: 127.0.0.1:2181(CONNECTED) 8] history 0 - ls /node/node3 1 - setquota -n 2 /node/node3 2 - create /node/node3/node3_1 31 3 - create /node/node3/node3_2 32 4 - create /node/node3/node3_3 33 5 - listquota /node/node3 6 - delquota -n /node/node3 7 - listquota /node/node3 8 - history [zk: 127.0.0.1:2181(CONNECTED) 9]
4.6.2 重新执行历史指令

redo cmdno

[zk: 127.0.0.1:2181(CONNECTED) 8] history 0 - ls /node/node3 1 - setquota -n 2 /node/node3 2 - create /node/node3/node3_1 31 3 - create /node/node3/node3_2 32 4 - create /node/node3/node3_3 33 5 - listquota /node/node3 6 - delquota -n /node/node3 7 - listquota /node/node3 8 - history [zk: 127.0.0.1:2181(CONNECTED) 9] redo 7 absolute path is /zookeeper/quota/node/node3/zookeeper_limits Output quota for /node/node3 count=-1,bytes=-1 Output stat for /node/node3 count=4,bytes=7 [zk: 127.0.0.1:2181(CONNECTED) 10]
转载请注明原文地址: https://www.6miu.com/read-9425.html

最新回复(0)