zookeeper基础命令
来源:互联网 发布:淘宝 投诉未生产扣分吗 编辑:程序博客网 时间:2024/05/29 17:24
zookeeper基础命令
1. 配置
复制conf下的zoo_sample.cfg
cp conf/zoo_sample.cfg conf/zoo.cfg
2. 启动
bin/zkServer.sh start
➜ zookeeper bin/zkServer.sh startZooKeeper JMX enabled by defaultUsing config: /Users/lilongjiu/03application/zookeeper/bin/../conf/zoo.cfgStarting 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:2181Connecting to 127.0.0.1:21812017-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 GMT2017-08-04 21:34:33,276 [myid:] - INFO [main:Environment@100] - Client environment:host.name=bogon2017-08-04 21:34:33,276 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_1112017-08-04 21:34:33,278 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation2017-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/jre2017-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 X2017-08-04 21:34:33,279 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=x86_642017-08-04 21:34:33,279 [myid:] - INFO [main:Environment@100] - Client environment:os.version=10.12.32017-08-04 21:34:33,279 [myid:] - INFO [main:Environment@100] - Client environment:user.name=lilongjiu2017-08-04 21:34:33,279 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/Users/lilongjiu2017-08-04 21:34:33,279 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/Users/lilongjiu/03application/zookeeper2017-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@531d72caWelcome 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 enabled2017-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 = 5000WATCHER::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] helpZooKeeper -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 /nodecZxid = 0x100000005 #创建时的事务idctime = 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,如果永久节点,默认时0dataLength = 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 /nodetestcZxid = 0x100000005ctime = Sun Jun 04 11:30:29 CST 2017mZxid = 0x100000005mtime = Sun Jun 04 11:30:29 CST 2017pZxid = 0x10000000acversion = 3dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 4numChildren = 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 = 0x100000005ctime = Sun Jun 04 11:30:29 CST 2017mZxid = 0x100000005mtime = Sun Jun 04 11:30:29 CST 2017pZxid = 0x10000000acversion = 3dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 4numChildren = 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 4Created /node/node4[zk: 127.0.0.1:2181(CONNECTED) 6] get /node/node44cZxid = 0x10000000fctime = Sun Jun 04 12:15:28 CST 2017mZxid = 0x10000000fmtime = Sun Jun 04 12:15:28 CST 2017pZxid = 0x10000000fcversion = 0dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 1numChildren = 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 41Created /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] quitQuitting...2017-06-04 12:19:30,763 [myid:] - INFO [main:ZooKeeper@684] - Session: 0x15c7118be740003 closed2017-06-04 12:19:30,765 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@519] - EventThread shut down for session: 0x15c7118be740003lilongjiu@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 41Created /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 41Created /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/node33 #当前值cZxid = 0x10000000actime = Sun Jun 04 11:33:17 CST 2017mZxid = 0x10000000amtime = Sun Jun 04 11:33:17 CST 2017pZxid = 0x10000000acversion = 0dataVersion = 0 #当前数据版本号aclVersion = 0ephemeralOwner = 0x0dataLength = 1numChildren = 0[zk: 127.0.0.1:2181(CONNECTED) 1] set /node/node3 333cZxid = 0x10000000actime = Sun Jun 04 11:33:17 CST 2017mZxid = 0x100000018mtime = Sun Jun 04 12:37:22 CST 2017pZxid = 0x10000000acversion = 0dataVersion = 1aclVersion = 0ephemeralOwner = 0x0dataLength = 3numChildren = 0[zk: 127.0.0.1:2181(CONNECTED) 2] get /node/node3 333 #修改后的值cZxid = 0x10000000actime = Sun Jun 04 11:33:17 CST 2017mZxid = 0x100000018mtime = Sun Jun 04 12:37:22 CST 2017pZxid = 0x10000000acversion = 0dataVersion = 1 #修改后数据版本号aclVersion = 0ephemeralOwner = 0x0dataLength = 3numChildren = 0[zk: 127.0.0.1:2181(CONNECTED) 3]
再次修改,修改后的值与原来的值一样。可以看到,再次修改前时数据版本号是1,修改后数据版本号时2。 也就是说,不管修改后的值是否与原来的值一样,数据版本号都增加1
[zk: 127.0.0.1:2181(CONNECTED) 3] set /node/node3 333cZxid = 0x10000000actime = Sun Jun 04 11:33:17 CST 2017mZxid = 0x100000019mtime = Sun Jun 04 12:40:51 CST 2017pZxid = 0x10000000acversion = 0dataVersion = 2aclVersion = 0ephemeralOwner = 0x0dataLength = 3numChildren = 0[zk: 127.0.0.1:2181(CONNECTED) 4] get /node/node3 333 #再次修改后的值cZxid = 0x10000000actime = Sun Jun 04 11:33:17 CST 2017mZxid = 0x100000019mtime = Sun Jun 04 12:40:51 CST 2017pZxid = 0x10000000acversion = 0dataVersion = 2 #再次修改后的版本号aclVersion = 0ephemeralOwner = 0x0dataLength = 3numChildren = 0[zk: 127.0.0.1:2181(CONNECTED) 5]
4.3.2 修改节点数据(带版本号)
当前节点状态如下:
[zk: 127.0.0.1:2181(CONNECTED) 7] get /node/node3333 #数据cZxid = 0x10000000actime = Sun Jun 04 11:33:17 CST 2017mZxid = 0x10000001amtime = Sun Jun 04 12:43:25 CST 2017pZxid = 0x10000000acversion = 0dataVersion = 3 #版本号aclVersion = 0ephemeralOwner = 0x0dataLength = 3numChildren = 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 3cZxid = 0x10000000actime = Sun Jun 04 11:33:17 CST 2017mZxid = 0x100000022mtime = Sun Jun 04 12:52:23 CST 2017pZxid = 0x10000000acversion = 0dataVersion = 4aclVersion = 0ephemeralOwner = 0x0dataLength = 3numChildren = 0[zk: 127.0.0.1:2181(CONNECTED) 9] set /node/node3 333 3version 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/node3Node 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/node3Comment: 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 31Created /node/node3/node3_1[zk: 127.0.0.1:2181(CONNECTED) 3] create /node/node3/node3_2 32Created /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 33Created /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=22017-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/node3absolute path is /zookeeper/quota/node/node3/zookeeper_limitsOutput 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/node3absolute path is /zookeeper/quota/node/node3/zookeeper_limitsOutput 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] history0 - ls /node/node31 - setquota -n 2 /node/node32 - create /node/node3/node3_1 313 - create /node/node3/node3_2 324 - create /node/node3/node3_3 335 - listquota /node/node36 - delquota -n /node/node37 - listquota /node/node38 - history[zk: 127.0.0.1:2181(CONNECTED) 9]
4.6.2 重新执行历史指令
redo cmdno
[zk: 127.0.0.1:2181(CONNECTED) 8] history0 - ls /node/node31 - setquota -n 2 /node/node32 - create /node/node3/node3_1 313 - create /node/node3/node3_2 324 - create /node/node3/node3_3 335 - listquota /node/node36 - delquota -n /node/node37 - listquota /node/node38 - history[zk: 127.0.0.1:2181(CONNECTED) 9] redo 7absolute path is /zookeeper/quota/node/node3/zookeeper_limitsOutput quota for /node/node3 count=-1,bytes=-1Output stat for /node/node3 count=4,bytes=7[zk: 127.0.0.1:2181(CONNECTED) 10]
- zookeeper基础命令
- Zookeeper--客户端基础命令
- zookeeper windows 下配置和基础命令
- zookeeper 命令
- zookeeper 命令
- zookeeper 命令
- zookeeper 命令
- Zookeeper命令
- Zookeeper命令
- zookeeper-命令
- zookeeper命令
- ZooKeeper基础
- Zookeeper 基础
- Zookeeper 基础
- Zookeeper-基础
- Zookeeper基础
- zookeeper基础
- Zookeeper基础—Zookeeper介绍
- ubuntu16搭建php7+phpredis拓展+nginx+mysql脚本(aws)
- 浅析三种特殊进程:孤儿进程,僵尸进程和守护进程.
- 《马云给年轻人的77条忠告》读书笔记2
- python安装mysql数据库和实现增删查改操作
- AppStore审核、排名规则及常用优化方法。
- zookeeper基础命令
- HDU5410(01背包+完全背包)
- java定时器的几种用法
- 线程的概念A
- 6.1 Tensorflow笔记(基础篇):队列与线程
- javascript(三)
- 未能加载文件或程序集“Oracle.DataAccess
- Flight HDU
- raid0/1/5/6/(1/0)/(0/1)