上篇博文,我们成功的安装和启动了zookeeper服务器,zookeeper还提供了很多方便的功能,方便我们查看服务器的状态,增加,修改,删除数据(入口是zkServer.sh和zkCli.sh)。还提供了一系列四字命令,方便我们跟服务器进行各种交互,来确认服务器当前的工作情况(这也是服务器监控告警的基础)。

zkServer.sh

zookeeper启动成功之后,我们先看一下zkServer.sh提供的主要功能:

  1. 查看服务器状态
[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的单机模式。

  1. 启停服务器
[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的使用(四)的更多相关文章

  1. zookeeper命令行(zkCli.sh&zkServer.sh)使用及四字命令

    zookeeper提供了很多方便的功能,方便我们查看服务器的状态,增加,修改,删除数据(入口是zkServer.sh和zkCli.sh). 还提供了一系列四字命令,方便我们跟服务器进行各种交互,来确认 ...

  2. 【Apache ZooKeeper】命令行zkCli.sh使用指南

    ZooKeeper命令行 原文                   http://blog.csdn.net/ganglia/article/details/11606807 ZooKeeper客户端 ...

  3. ZooKeeper系列(2):ZooKeeper命令行工具zkCli.sh

    ZooKeeper系列文章:https://www.cnblogs.com/f-ck-need-u/p/7576137.html#zk 1.简介 ZooKeeper提供了一个非常简单的命令行客户端zk ...

  4. Zookeeper命令行auth,digest

    一.auth auth:user:pwd:cdrwa digest:user:BASE64(SHA1(PWD)):cdrwa addauth digest user:pwd 增加用户和密码都是zhan ...

  5. Zookeeper命令行操作(常用命令;客户端连接;查看znode路径;创建节点;获取znode数据,查看节点内容,设置节点内容,删除节点;监听znode事件;telnet连接zookeeper)

    8.1.常用命令 启动ZK服务 bin/zkServer.sh start 查看ZK服务状态 bin/zkServer.sh status 停止ZK服务 bin/zkServer.sh stop 重启 ...

  6. zookeeper命令行客户端

    前提条件:搭建好zookeeper服务器集群<Zookeeper深入认识>,并且集群成功开启. 执行zkServer.sh,客户端连接上服务器hadoop1. 都有哪些命令行操作呢?(见下 ...

  7. zookeeper 命令行使用

    先用简易的客户端链接上 默认链接的就是本机上面的zkserver 我一上来help 下.没办法 ,用的少,先喊一声救命 ,看看有没有人救我! [zk: localhost:2181(CONNECTED ...

  8. zookeeper命令行操作

    创建 #[-s] 顺序 #[-e] 临时节点 #path 节点 #data 该节点存储的数据 #acl 证书 create [-s] [-e] path data acl -s或-e指定节点特性:顺序 ...

  9. zookeeper命令行

    ZooKeeper -server host:port cmd args stat path [watch] set path data [version] ls path [watch] delqu ...

随机推荐

  1. 怎么把焦点放在RichEdit的最后一行

    急急急!!!!如何把焦点放在RichEdit的最后一行!! 请高手指点,在线等!!!!当添加到出现滚动条时焦点就不会往下了,怎么把焦点移到最后一行 RichEdit-> Lines-> A ...

  2. Java获取当前运行方法所在的类和方法名

    很简单,直接看代码: public void showClassAndMethod() { System.out.println(this.getClass().getSimpleName() + & ...

  3. BZOJ1050 HAOI2006旅行(最小生成树+LCT)

    暴力枚举路径中权值最小边是哪个,然后求出边权不小于它的边的最小生成树,即可保证该路径上最大值最小.暴力当然可以过,这里使用LCT维护.注意数据中有自环. #include<iostream> ...

  4. Benefit UVA - 11889(已知LCM和其中一个数,求另一个数)

    首先对于C不能整除A的状况肯定排除 然后得到B=C/A 然后取G=GCD(A,B) 如果G==1,那么此时B就是解 否则的话,就证明A,B,的最小公倍数肯定不是C,因为其最小公倍数是A*B/G 那么我 ...

  5. MT【79】任意和存在并存

    评:一般这个题目是先考虑$x$的存在性,再考虑$t$的任意性.最后按照动区间定轴类型处理,考虑区间和对称轴的相对位置.

  6. C++ pbds 库平衡树(tree)

    头文件 #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> //或者直接 ...

  7. 今天GG

    刚开考: 这里锅了,那里锅了,还被D了QAQ. 然后\(YL\)说,\(T2\)不是傻逼题吗. 于是萝卜秒掉了\(T1\). 于是\(gsy\)秒掉了\(T3\). \(lalaxu,FlashHu\ ...

  8. Django通过中间件实现登录验证demo

    前提:中间件版的登录验证需要依靠session,所以数据库中要有django_session表. from django.conf.urls import url from django.contri ...

  9. 无焦点下获取条码枪返回值的Hook(再次改良版)

    针对上一个版本再次改良,上除掉无用代码,新手绝对可以看懂! using System; using System.Collections.Generic; using System.Linq; usi ...

  10. Golang的字符编码介绍

    Golang的字符编码介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Go里面内建仅支持UTF8字符串编码,因此如果你用fmt.Printf之类的函数无法将GBK,GB2312 ...