上篇博文,我们成功的安装和启动了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. NOI.AC 20181103 题解

    CF 1037B  Reach Median 班上 n个同学(n 是奇数)排成一排站队,为了美观,需要大家高度的中位数是 x. 你可以让同学们在脚下垫木板或者稍微蹲一点来达成这个目标.对任意一位同学的 ...

  2. Installshield 打包安装程序时写入注册表,及运行bat文件

    一.写入注册表 1. 打开project assistant –> Project Registry 可以像注册表里一样操作,其中[INSTALLDIR]是指的安装路径   二. 运行bat文件 ...

  3. Activiti学习——Activiti与Spring集成

    转: Activiti学习——Activiti与Spring集成 与Spring集成 基础准备 目录结构 相关jar包 Activiti的相关jar包 Activiti依赖的相关jar包 Spring ...

  4. Linux上查看文件大小的用法(转载)

    具体用法可以参考:https://blog.csdn.net/linfanhehe/article/details/78560887 当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常 ...

  5. OpenStack 存储服务 Cinder存储节点部署LVM(十六)

    Cinder存储节点部署 部署在192.168.137.12主机 1.安装lvm2软件包 yum install lvm2 -y 2.启动LVM的metadata服务并且设置该服务随系统启动 syst ...

  6. POJ - 2299 Ultra-QuickSort(归并排序)

    https://vjudge.net/problem/POJ-2299 题意 求对于给定的无序数组,求出经过最少多少次相邻元素的交换之后,可以使数组从小到大有序. 分析 很明显是求逆序对的数目,那就要 ...

  7. (64位)本体学习程序(ontoEnrich)系统使用说明文档

    系统运行:文件夹system下,可执行文件ontoEnrichment 概念学习 --------------------------------------------------------1.简 ...

  8. 一个简单的二叉搜索树(C++实现)

    参考:http://www.cnblogs.com/skywang12345/p/3576373.html 这里主要就是自己实现的代码,删除动作有点不一样: #ifndef __BSTREE_H__ ...

  9. html5 canvas 径向渐变

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. TTPRequest 提示#import <libxml/HTMLparser.h>找不到 的解决方法

    本文永久地址为http://www.cnblogs.com/ChenYilong/p/3984251.html ,转载请注明出处. ASIHTTPRequest 或者AFNetwork提示的#impo ...