上篇博文,我们成功的安装和启动了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. Memcache 优化建议

    一.memcached工作原理 基本概念:slab,page,chunk. slab,是一个逻辑概念.它是在启动memcached实例的时候预处理好的,每个slab对应一个chunk size,也就是 ...

  2. PHP从入门到精通

    php基本语法 1.变量类型 a.标量类型 bool integer float string b.复合类型 array object c.特殊类型 resource null d.伪类型 mixd ...

  3. js数组去重五种方法

    今天来聊一聊JS数组去重的一些方法,包括一些网上看到的和自己总结的,总共5种方法(ES5). 第一种:遍历数组法 这种方法最简单最直观,也最容易理解,代码如下: var arr = [2, 8, 5, ...

  4. Trace 2018徐州赛区网络预赛

    题意: 每次给出一个点,然后就会形成两条线,如果后面的矩形覆盖了前面的边,那么这条边就消失了, 最后求剩下的边是多少 题目确保不会完全覆盖 也没有一个矩形在另一个矩形里面 即对于 X1,Y1  X2, ...

  5. sort与qsort的区别与联系

    sort属于C++范畴,在algorithm头文件中,下面直奔主题,给大家一个清晰明了的认识.qsort有C,和C++两个版本. qsort的compare函数原型 //comp ,也就说,如果the ...

  6. python常用模块-配置文档模块(configparser)

    python常用模块-配置文档模块(configparser) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. ConfigParser模块用于生成和修改常见配置文档,当前模块的名称 ...

  7. Linux 磁盘自动挂载

    磁盘代号或者装置的Label 挂载点 档案系统格式 档案系统参数 是否用dump备份 是否用fsck检查扇区         0 0         1 1         2 2 下面来写一个代表的 ...

  8. bzoj千题计划206:bzoj1076: [SCOI2008]奖励关

    http://www.lydsy.com/JudgeOnline/problem.php?id=1076 很容易想到方程 dp[i][j]表示抛出了i个宝物,已选宝物状态为j的期望最大得分 初始化dp ...

  9. Bower使用笔记

    全局安装bower $ npm install -g bower 检测成功 $ bower help 在项目根目录下进行安装(最新版本),会自动生成一个bower_components文件夹(如果在c ...

  10. 赫夫曼树JAVA实现及分析

    一,介绍 1)构造赫夫曼树的算法是一个贪心算法,贪心的地方在于:总是选取当前频率(权值)最低的两个结点来进行合并,构造新结点. 2)使用最小堆来选取频率最小的节点,有助于提高算法效率,因为要选频率最低 ...