zookeeper-04-基本命令

[TOC]

在zookeeper安装目录的bin目录下有名为 zkCli.sh 的文件,该文件可以作为客户端连接到zookeeper。

1 使用zkCli.sh连接到zookeeper

# 一般语法
./zkCli.sh -timeout 0 -r -server ip:port

# 连接到主机h1 超时时间3秒
./zkCli.sh -timeout 3000 -server h1:2181

# 有类似如下的命令提示符就表示连接成功了
[zk: h1:2181(CONNECTED) 0] 

另外,我们在前面说过。整个zookeeper的节点结构就和linux文件系统是一致的。
都是只有一个最顶层的根节点,其下有若干子节点。

随便敲个字母就可以显示出使用帮助了:

[zk: h1:2181(CONNECTED) 1] h
ZooKeeper -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

2 基本命令的使用

在一定角度来说zookeeper是个存储数据的东西。
所以他的操作命令大致可以分为增删改查四类了

2.1 查询操作

  • ls path [watch]

列出指定节点,类似于linux的ls命令

[zk: h1:2181(CONNECTED) 8] ls /
[zookeeper]
[zk: h1:2181(CONNECTED) 9] ls /zookeeper
[quota]
[zk: h1:2181(CONNECTED) 10] ls /zookeeper/quota
[]
[zk: h1:2181(CONNECTED) 11]
  • stat path [watch]

列出指定节点的状态信息,或者说是元数据信息

[zk: h1:2181(CONNECTED) 11] stat /
# 节点被创建时的事务ID
cZxid = 0x0 
# 节点创建时间
ctime = Thu Jan 01 08:00:00 CST 1970
# 最近一次更新时的事务ID
mZxid = 0x0
# 最近一次更新时间
mtime = Thu Jan 01 08:00:00 CST 1970
# 该节点的子节点列表最近一次被修改的事务ID
# 添加、删除子节点会影响该值
pZxid = 0x0
# 子节点版本号
cversion = -1
# 数据版本号
dataVersion = 0
# ACL版本号
aclVersion = 0
# 创建临时节点的事务ID
# 如果是持久节点,则该值为0x0
ephemeralOwner = 0x0
# 当前节点的数据长度
dataLength = 0
# 当前节点的子节点数目
numChildren = 1

[zk: h1:2181(CONNECTED) 12] stat /zookeeper
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
[zk: h1:2181(CONNECTED) 13]
  • get path [watch]

可以列出指定节点的数据

get /
get /zookeeper
  • ls2 path [watch]

是ls的升级版,列出子节点的同时列出节点的状态信息

[zk: h1:2181(CONNECTED) 15] ls2 /
[zookeeper] # 子节点列表
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
[zk: h1:2181(CONNECTED) 16]

2.2 创建节点

create [-s] [-e] path data acl
    s:可选,表示该节点为顺序节点
    e:可选,表示该节点为临时节点
    path:节点路径
    data:节点数据
    acl:访问控制列表
# 创建节点/node_1,数据为dataOfNode_1
[zk: h1:2181(CONNECTED) 17] create /node_1 dataOfNode_1
Created /node_1
[zk: h1:2181(CONNECTED) 18] ls /
[zookeeper, node_1]

# 创建临时节点/node_1/node_1_1 11
# 在会话结束后被删除
[zk: h1:2181(CONNECTED) 20] create -e /node_1/node_1_1 11
Created /node_1/node_1_1
[zk: h1:2181(CONNECTED) 21] ls /node_1
[node_1_1]
[zk: h1:2181(CONNECTED) 22] 

# 创建顺序节点/node_1/node_1_2
[zk: h1:2181(CONNECTED) 22] create -s /node_1/node_1_2 12
Created /node_1/node_1_20000000001
[zk: h1:2181(CONNECTED) 23] create -s /node_1/node_1_3 13
Created /node_1/node_1_30000000002
[zk: h1:2181(CONNECTED) 26] create -s /node_1/node_1_2 12
Created /node_1/node_1_20000000003
[zk: h1:2181(CONNECTED) 27] create -s /node_1/node_1_2 12
Created /node_1/node_1_20000000004
[zk: h1:2181(CONNECTED) 28] create -s /node_1/node_1_2 12
Created /node_1/node_1_20000000005
[zk: h1:2181(CONNECTED) 29] 
# 目前的/node_1节点
[zk: h1:2181(CONNECTED) 29] ls /node_1
[node_1_20000000005, node_1_1, node_1_30000000002, node_1_20000000001, node_1_20000000003, node_1_20000000004]

2.3 修改操作

set path data [version]
    path : 节点路径
    data : 新数据
    version : 版本号,要么不写,要么和上一次查询出的版本号一致
该操作会影响节点的mZxid、dataVersion和mtime属性
set /node_1 newdataOfNode_1
set /node_1 newdataOfNode_1 2

2.4 删除操作

  • delete

只能删除不含子节点的节点

delete path [version]
    path :要删除的节点的路径
  • rmr

可以递归删除节点

rmr path

2.5 quota

  • setquota

对节点增加限制(配额)

setquota -n|-b val path
    n:表示子节点的最大个数
    b:表示数据值的最大长度
    val:子节点最大个数或数据值的最大长度
    path:节点路径

最大节点数示例

# 创建节点/node_2
[zk: h1:2181(CONNECTED) 51] create /node_2 node2
Created /node_2
# 指定其子节点最大数为2
[zk: h1:2181(CONNECTED) 52] setquota -n 2 /node_2
Comment: the parts are option -n val 2 path /node_2
# 创建第2个子节点
[zk: h1:2181(CONNECTED) 53] create /node_2/node_2_1 21
Created /node_2/node_2_1
# 创建第2个子节点
[zk: h1:2181(CONNECTED) 54] create /node_2/node_2_2 22
Created /node_2/node_2_2
# 创建第3个子节点
# 此处虽然指定了最大两个子节点,但是并没报错,而是成功创建了
# 虽然创建成功了,但是会在${dataDir}/zookeeper.out中记录警告信息
[zk: h1:2181(CONNECTED) 55] create /node_2/node_2_3 23

[zk: h1:2181(CONNECTED) 56] ls /node_2
[node_2_1, node_2_2, node_2_3]

最大节点数警告信息

# 此处的zookeeper.out在zookeeper的 $dataDir目录下
tail -2 /var/zookeeper/zookeeper.out
[myid:1] - WARN  [CommitProcessor:1:DataTree@301] - Quota exceeded: /node_2 count=3 limit=2
[myid:1] - WARN  [CommitProcessor:1:DataTree@301] - Quota exceeded: /node_2 count=4 limit=2
  • listquota

列出指定节点的quota

listquota path
[zk: h1:2181(CONNECTED) 58] listquota /node_2
absolute path is /zookeeper/quota/node_2/zookeeper_limits
# 子节点个数为2,数据长度-1表示没限制
Output quota for /node_2 count=2,bytes=-1
# 当前信息,节点数为4(超额了),数据长度为11(包含子节点的数据长度)
Output stat for /node_2 count=4,bytes=11
[zk: h1:2181(CONNECTED) 59]
  • delquota

删除quota

delquota [-n|-b] path
# 删除/node_2对于子节点个数限制的quota
[zk: h1:2181(CONNECTED) 64] delquota -n /node_2
[zk: h1:2181(CONNECTED) 65] listquota /node_2
absolute path is /zookeeper/quota/node_2/zookeeper_limits
# -1表示不做限制
Output quota for /node_2 count=-1,bytes=-1
Output stat for /node_2 count=4,bytes=11
[zk: h1:2181(CONNECTED) 66]

2.6 ACL

此处的ACL(Access Control List)和Linux文件系统的中的那个访问控制列表有点类似。

权限主要有:

  • CREATE : 创建子节点
  • READ : 获取节点数据和子节点列表
  • WRITE : 更新节点数据
  • DELETE : 删除子节点
  • ADMIN : 设置节点ACL的权限

与授权相关的几个概念:

  • shchema:权限模式,有IP和digest两种
  • ID:授权对象
    • schema为IP时,该值为具体的IP地址
    • scheme为digest时,该值为 userName:base64(sha1(userName:password))
    • zookeeper的javaAPI提供了一个工具类org.apache.zookeeper.server.auth.DigestAuthenticationProvider 可以快速生成加密的密文
  • permission:权限,指的就是上面所说的五种权限

最终的组合为: schema + ID + permission

和ACL相关的命令

  • getAcl

获取指定节点的ACL信息

getAcl path
# 创建节点/node9,并指定其ACL:ip为192.168.161.1,权限为create,read,write,delete,damin
[zk: h1:2181(CONNECTED) 22] create /node9 data9 ip:192.168.161.1:crwda
Created /node9
[zk: h1:2181(CONNECTED) 23] getAcl /node9
'ip,'192.168.161.1
: cdrwa

# schema为digest,用户名为hylexus,密码为123(密文),权限:create,read,write,admin,delete
[zk: h1:2181(CONNECTED) 26] create /node10 data10 digest:hylexus:f4Myrgy6YlaWdo4lvv///2jgEDI=:crwad
Created /node10
[zk: h1:2181(CONNECTED) 27] getAcl /node10
'digest,'hylexus:f4Myrgy6YlaWdo4lvv///2jgEDI=
: cdrwa
[zk: h1:2181(CONNECTED) 28] 
  • setAcl
setAcl path acl
setAcl /node_3 digest:hylexus:f4Myrgy6YlaWdo4lvv///2jgEDI=:crwad
setAcl /node_4 ip:192.168.161.1:crawd
  • addauth

注册会话授权信息

addauth scheme auth
    schema:可取ip或digest
    auth
        schema==digest时为 userName:password
        schema==ip时为
# 用户名:hylexus,密码:123456
addauth digest hylexus:123456

其他命令

  • history : 列出命令历史

  • redo : 该命令可以重新执行指定命令编号的历史命令,命令编号可以通过history查看

[zk: h1:2181(CONNECTED) 70] history
60 - ls /zookeeper
61 - get /node_2
……………………
……………………
# 重新执行编号为60的命令
[zk: h1:2181(CONNECTED) 71] redo 60
[quota]
[zk: h1:2181(CONNECTED) 72] 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容