Zookeeper命令行zkCli.sh&zkServer.sh的使用(四)
上篇博文,我们成功的安装和启动了zookeeper服务器,zookeeper还提供了很多方便的功能,方便我们查看服务器的状态,增加,修改,删除数据(入口是zkServer.sh和zkCli.sh)。还提供了一系列四字命令,方便我们跟服务器进行各种交互,来确认服务器当前的工作情况(这也是服务器监控告警的基础)。
zkServer.sh
zookeeper启动成功之后,我们先看一下zkServer.sh提供的主要功能:
- 查看服务器状态
[yinpeng@slave1 zookeeper-3.4.9]$ ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/yinpeng/yuliang/zookeeper-3.4.9/bin/../conf/zoo.cfg
Mode: standalone
我们使用的是zookeeper的单机模式。
- 启停服务器
[yinpeng@slave1 zookeeper-3.4.9]$ ./bin/zkServer.sh help
ZooKeeper JMX enabled by default
Using config: /home/yinpeng/yuliang/zookeeper-3.4.9/bin/../conf/zoo.cfg
Usage: ./bin/zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}
zkServer.sh还提供了启动,停止,重启等功能。zookeeper不仅提供了服务端命令,而且提供了客户端命令。
zkCli.sh
使用zkCli.sh可以连接zookeeper,以及在客户端操作zookeeper。
首先,连接zookeeper
./bin/zkCli.sh -timeout 5000 -server 192.168.0.23:2181
连接成功后,系统会输出zookeeper的相关环境以及配置信息,并在屏幕输出“ Welcome to ZooKeeper ”等信息。如下图所示:
输入 help或h 之后,屏幕会输出可用的客户端命令列表,如下图所示:
从上到下,一共就十几个命令。学的东西再多,不如多实践,下面我们逐个命令实践一遍:
- ls 查询当前节点列表(/是根节点)path:路径
[zk: 192.168.0.23:2181(CONNECTED) 7] ls /
[zookeeper]
- create 创建新的Znode节点 (-s : 顺序节点 -e :临时数据节点(重启会消失)) path:路径 data:数据 acl:权限,不指定默认为world:anyone:cdwra,可参考Zookeeper的ACL access control list
[zk: 192.168.0.23:2181(CONNECTED) 10] create /node_1 "test"
Created /node_1
顺序节点可以作为主键自增的策略
- get 查看节点数据 path:路径
[zk: 192.168.0.23:2181(CONNECTED) 11] get /node_1
test
cZxid = 0x13
ctime = Thu Feb 16 13:19:40 CST 2017
mZxid = 0x13
mtime = Thu Feb 16 13:19:40 CST 2017
pZxid = 0x13
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0
test 为节点存储的数据内容
注:
CZxid:表示该节点在那个事务中创建的事务id。
ctime:表示该节点的创建时间
mZxid:表示该节点更新时的事务id
mtime:表示该节点的修改时间
pZxid:表示该节点的子节点列表最后一次被修改的事务id
cversion:子节点版本号
dataversion:数据版本号
aclversion:权限版本号
ephemeralOwner:专门用于临时节点,表示创建该临时节点的事务id(如果当前节点是持久节点,该值固定为0)
dataLength:当前节点存放数据的长度
numChildren:当前节点的子节点数目
- stat 查看数据节点的状态信息 path:路径
[zk: 192.168.0.23:2181(CONNECTED) 12] stat /node_1
cZxid = 0x13
ctime = Thu Feb 16 13:19:40 CST 2017
mZxid = 0x13
mtime = Thu Feb 16 13:19:40 CST 2017
pZxid = 0x13
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0
ls2 是ls的超级指令,不仅可以列出当前节点的子节点,还可以输出节点的状态信息,不再演示。
set 设置数据节点的值,path:路径,data:数据,可以带版本号,可以不带版本号,
[zk: 192.168.0.23:2181(CONNECTED) 19] set /node_1 "11114"
cZxid = 0x13
ctime = Thu Feb 16 13:19:40 CST 2017
mZxid = 0x18
mtime = Thu Feb 16 13:32:59 CST 2017
pZxid = 0x17
cversion = 4
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 3
[zk: 192.168.0.23:2181(CONNECTED) 20] get /node_1
11114
cZxid = 0x13
ctime = Thu Feb 16 13:19:40 CST 2017
mZxid = 0x18
mtime = Thu Feb 16 13:32:59 CST 2017
pZxid = 0x17
cversion = 4
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 3
我在node_1下建立了三个节点,node_1_1,node_1_2以及node_1_3
- set:添加上版本号(乐观锁)
[zk: 192.168.0.23:2181(CONNECTED) 27] get /node_1/node_1_3
333
cZxid = 0x30
ctime = Fri Feb 17 10:11:45 CST 2017
mZxid = 0x33
mtime = Fri Feb 17 10:29:37 CST 2017
pZxid = 0x30
cversion = 0
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
[zk: 192.168.0.23:2181(CONNECTED) 28] set /node_1/node_1_3 332 2
cZxid = 0x30
ctime = Fri Feb 17 10:11:45 CST 2017
mZxid = 0x34
mtime = Fri Feb 17 10:31:51 CST 2017
pZxid = 0x30
cversion = 0
dataVersion = 3
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
[zk: 192.168.0.23:2181(CONNECTED) 29] set /node_1/node_1_3 332 2
version No is not valid : /node_1/node_1_3
通过get,我们知道了node_1_3,的数据值和版本号,然后修改node_1_3的数据值和版本号,版本号一致会修改成功,版本号不一致,抛出版本号无效的异常。
- delete 删除node_1_3节点,此时它没有子节点,否则会报错,也可以携带版本
[zk: 192.168.0.23:2181(CONNECTED) 4] delete /node_1/node_1_3
[zk: 192.168.0.23:2181(CONNECTED) 5] ls2 /node_1
[node_1_1, node_1_2]
cZxid = 0x13
ctime = Thu Feb 16 13:19:40 CST 2017
mZxid = 0x18
mtime = Thu Feb 16 13:32:59 CST 2017
pZxid = 0x26
cversion = 6
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 2
此时,我们看到node_1_3节点已经被删除了。
- rmr 循环删除有子节点的父节点,例如删除node_1
[zk: 192.168.0.23:2181(CONNECTED) 6] rmr /node_1
[zk: 192.168.0.23:2181(CONNECTED) 7] ls /
[zookeeper]
使用ls验证之后,确实删除了父节点,以及子节点。
- quota(配额):增加一些节点的限制,必须在一定的范围内
- setquota :设置子节点的个数(-n:子节点个数的限制,-b:数据数据节点数据长度的限制)
[zk: 192.168.0.23:2181(CONNECTED) 33] create /node_1 1
Created /node_1
[zk: 192.168.0.23:2181(CONNECTED) 40] setquota -n 2 /node_1
Comment: the parts are option -n val 2 path /node_1
[zk: 192.168.0.23:2181(CONNECTED) 47] create /node_1/node_1_1 11
Created /node_1/node_1_1
[zk: 192.168.0.23:2181(CONNECTED) 48] create /node_1/node_1_2 12
Created /node_1/node_1_2
[zk: 192.168.0.23:2181(CONNECTED) 49] create /node_1/node_1_3 13
Created /node_1/node_1_3
上面的命令,我们重新创建了node_1节点,并给它设置节点数为2的限制,但是我们成功了创建子节点,node_1_3,并没有给我们抛出异常,它仅仅是在跟目录下的zookeeper.out的输出了一个警告。
超过个数只会报警告:
[yinpeng@slave1 zookeeper-3.4.9]$ tail zookeeper.out
....省略
2017-02-17 10:45:32,472 [myid:] - WARN [SyncThread:0:DataTree@301] - Quota exceeded: /node_1 count=3 limit=2
- listquota,查看数据节点配额的情况
[zk: 192.168.0.23:2181(CONNECTED) 50] listquota /node_1
absolute path is /zookeeper/quota/node_1/zookeeper_limits
Output quota for /node_1 count=2,bytes=-1
Output stat for /node_1 count=4,bytes=7
输出了两行信息,第一行是配额信息,设置的子节点数为2,数据长度为-1,表示没有限制,第二行是状态信息,此时的子节点数为4,数据长度为7(自己的数据长度加上子节点的数据长度)
- delquota,删除数据节点配额的情况
[zk: 192.168.0.23:2181(CONNECTED) 51] delquota -n /node_1
[zk: 192.168.0.23:2181(CONNECTED) 52] listquota /node_1
absolute path is /zookeeper/quota/node_1/zookeeper_limits
Output quota for /node_1 count=-1,bytes=-1
Output stat for /node_1 count=4,bytes=7
删除节点的配置之后,我们验证一下,看到此时node_1节点的子节点个数没有限制,数据长度没有限制了。
我们简单看一下其他的命令:
history 打印出最近执行的十个命令
redo cmdno 根据命令编号(可用history查询编号)重新执行以前执行过的命令
close关闭当前连接,可用connect 再次连接,不会退出客户端
quit 关闭连接并退出连接客户端
connect连接服务器
对权限的命令,我们通过一篇文章来学习,我觉得挺不错,就不再做了:
使用ZooKeeper ACL特性进行znode控制
常用四字命令
命令 | 功能描述 |
---|---|
conf | 输出相关服务配置的详细信息 |
cons | 列出所有连接到服务器的客户端的完全的连接/会话的详细信息.包括“接受/发送”的包数量,会话,id,操作延迟,最后的操作执行等等信息 |
dump | 列出未经处理的会话和临时节点. |
envi | 输出关于服务环境的详细信息 |
reqs | 列出未经处理的请求 |
ruok | 测试服务是否处于正确状态.如果确实如此,那么服务返回”imok”,否则不做任何响应 |
stat | 输出关于性能和连接的客户端的列表 |
wchs | 列出服务器watch的详细信息 |
wchc | 通过session列出服务器watch的详细信息,它的输出是一个与watch相关的会话的列表 |
wchp | 通过路径列出服务器watch的详细信息.它输出一个与session相关的路径 |
下面给出几个例子:
- conf
[yinpeng@slave1 zookeeper-3.4.9]$ echo conf | nc 192.168.0.23 2181
clientPort=2181
dataDir=/home/yinpeng/yuliang/data/version-2
dataLogDir=/home/yinpeng/yuliang/data/version-2
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=0
- cons
[yinpeng@slave1 zookeeper-3.4.9]$ echo cons | nc 192.168.0.23 2181
/192.168.0.23:38968[0](queued=0,recved=1,sent=0)
- ruok
测试服务是否处于正确状态.如果确实如此,那么服务返回” imok”,否则不做任何相应.
[yinpeng@slave1 zookeeper-3.4.9]$ echo ruok | nc 192.168.0.23 2181
imok
回复imok表示已经启动
- stat
[yinpeng@slave1 zookeeper-3.4.9]$ echo stat | nc 192.168.0.23 2181
Zookeeper version: 3.4.9-1757313, built on 08/23/2016 06:50 GMT
Clients:
/192.168.0.23:38972[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 0/0/32
Received: 5425
Sent: 5424
Connections: 1
Outstanding: 0
Zxid: 0x4a
Mode: standalone
Node count: 11
其他命令,我们不看了,大家可以尝试一下,这篇博文到此为止。
总结
zookeeper的命令还是非常的简单,跟平时使用sql,差不太多,不多说了,下篇博文我们使用java的客户端来操作一下。
Zookeeper命令行zkCli.sh&zkServer.sh的使用(四)的更多相关文章
- zookeeper命令行(zkCli.sh&zkServer.sh)使用及四字命令
zookeeper提供了很多方便的功能,方便我们查看服务器的状态,增加,修改,删除数据(入口是zkServer.sh和zkCli.sh). 还提供了一系列四字命令,方便我们跟服务器进行各种交互,来确认 ...
- 【Apache ZooKeeper】命令行zkCli.sh使用指南
ZooKeeper命令行 原文 http://blog.csdn.net/ganglia/article/details/11606807 ZooKeeper客户端 ...
- ZooKeeper系列(2):ZooKeeper命令行工具zkCli.sh
ZooKeeper系列文章:https://www.cnblogs.com/f-ck-need-u/p/7576137.html#zk 1.简介 ZooKeeper提供了一个非常简单的命令行客户端zk ...
- Zookeeper命令行auth,digest
一.auth auth:user:pwd:cdrwa digest:user:BASE64(SHA1(PWD)):cdrwa addauth digest user:pwd 增加用户和密码都是zhan ...
- Zookeeper命令行操作(常用命令;客户端连接;查看znode路径;创建节点;获取znode数据,查看节点内容,设置节点内容,删除节点;监听znode事件;telnet连接zookeeper)
8.1.常用命令 启动ZK服务 bin/zkServer.sh start 查看ZK服务状态 bin/zkServer.sh status 停止ZK服务 bin/zkServer.sh stop 重启 ...
- zookeeper命令行客户端
前提条件:搭建好zookeeper服务器集群<Zookeeper深入认识>,并且集群成功开启. 执行zkServer.sh,客户端连接上服务器hadoop1. 都有哪些命令行操作呢?(见下 ...
- zookeeper 命令行使用
先用简易的客户端链接上 默认链接的就是本机上面的zkserver 我一上来help 下.没办法 ,用的少,先喊一声救命 ,看看有没有人救我! [zk: localhost:2181(CONNECTED ...
- zookeeper命令行操作
创建 #[-s] 顺序 #[-e] 临时节点 #path 节点 #data 该节点存储的数据 #acl 证书 create [-s] [-e] path data acl -s或-e指定节点特性:顺序 ...
- zookeeper命令行
ZooKeeper -server host:port cmd args stat path [watch] set path data [version] ls path [watch] delqu ...
随机推荐
- 如何取消mysql的密码?
有两种方法: 1.mysql命令 SET PASSWORD FOR root@localhost=PASSWORD(''); 2.运行 mysqladmin 命令 mysqladmin -u roo ...
- 【移动端debug-6】如何做一个App里的web调试小工具
原文链接:如何做一个App里的web调试小工具 我们知道现在hybrid app非常流行,在这样的app里,h5页面是应用非常广泛的.相对于以往在pc端开发的网页,放在app里的网页由于无法直接使用桌 ...
- Java_按位与&,按位或,取反,左移,右移运算符
//按位与运算& System.out.println(0&0);//0 System.out.println(0&1);//0 System.out.println(1&am ...
- [代码]--SQLServer数据库的一些全局变量
select APP_NAME ( ) as w --当前会话的应用程序 select @@IDENTITY --返回最后插入的标识值 select USER_NAME() --返回用户数据 ...
- 结合NTLM中继和Kerberos委派攻击AD
0x00 前言 在上个月我深入演讲了无约束委派之后,本文将讨论一种不同类型的Kerberos委派:基于资源的约束委派.本文的内容基于Elad Shamir的Kerberos研究,并结合我自己的NTLM ...
- 个推应用统计产品(个数)Android集成实践
前段时间,我们公司的产品又双叒叕给我们提了新需求,要求我们把APP相关的数据统计分析一下,这些指标包括但不限于应用每日的新增.活跃.留存率等等,最好每天都能提供数据报表.这种事情真是想想就麻烦,大家最 ...
- Python基础【day01】:PyChram使用技巧总结(六)
本节内容 1.添加或者修改文件模板 2. python版本管理切换 3.已有文件重命名4.Python模块安装5.在PyChram中直接浏览文件目录6. 断点调试7.常用快捷键8.PyChram设置字 ...
- angularJs的继承
为什么要继承,本来是后端的概念,但是同样适用于前端开发.继承,无疑是将通用的东西抽取出来. 下面介绍的是angular的伪继承,就是说是通过继承scope这个变量来实现的.代码很简单,一行代码就可以. ...
- 从ACM会议分析我国计算机科学近十年发展情况
从ACM会议分析我国计算机科学近十年发展情况 来源:<中国计算机学会通讯>2015年第10期<专栏> 作者:陈 钢 2006年,承蒙李国杰院士推荐,<中国计算机学会通讯& ...
- [转载]Understanding the Bootstrap 3 Grid System
https://scotch.io/tutorials/understanding-the-bootstrap-3-grid-system With the 3rd version of the gr ...