发表文章

[最新] 【快说】zkCli的使用

holycat 1月前 0

版权声明: http://blog.csdn.net/holy_cat/article/details/81408959

楔子

前几篇文章都是侧重于解决问题的心路历程,对于只想看精华的同学,这种方式过于啰嗦。所以今后就再开一个系列 – 快说系列。风格便是快狠准,这也将是一个持续努力的目标。接着上一篇的文章,我们在这里快说一下Zookeeper客户端zkCli的使用。

正文

1. 连接Zookeeper

zkCli.sh [-server ip:port]

如果这里不指定Zookeeper服务端的ip和port,那么zkCli默认连接部署在localhost上开放2181端口的服务端

2. 支持功能列表

[zk: localhost:2181(CONNECTED) 0] 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
[zk: localhost:2181(CONNECTED) 1]

stat获取节点的状态

set修改节点内容

ls获取节点的子节点列表

delquota删除节点配额信息

ls2ls + stat

setAcl设置节点访问权限

setquota设置节点配额

history查看历史操作记录

redo执行历史命令

printwatches开关监听日志

delete删除节点

sync强制同步数据

listquota查看节点配额信息

rmr强制删除节点

get获取节点的数据

create创建一个节点

addauth添加访问权限信息

quit退出zkCli

getAcl查询节点权限

close断开会话连接

connect重新建立连接

3. 增

create [-s] [-e] path data [acl]

-s表示创建顺序节点

-e表示创建临时节点

path表示创建的节点路径

data表示创建的节点的数据内容

acl节点访问权限,包含该字段则在创建节点的同时设置了其访问权限,默认为world:anyone:cdrwa

3.1 创建一个持久节点

[zk: localhost:2181(CONNECTED) 5] create /node data

3.2 创建一个临时节点

[zk: localhost:2181(CONNECTED) 5] create -e /node/tempNode temporaryData

当创建临时节点的客户端断开与服务端的连接后,该节点便会消失。因此可以利用Zookeeper临时节点的这种特性来实现微服务中的服务动态发现,当新的服务上线后就在Zookeeper中创建一个临时节点,服务下线后该节点便会消失。

3.3 创建顺序节点

[zk: localhost:2181(CONNECTED) 16] create -s /node/seqNode seqNode
Created /node/seqNode0000000002

这里可以看到创建的节点名称并不是seqNode,而是后面附加了一个序列号,该序列号的生成由Zookeeper来生成。

4. 删

4.1 删除无子节点的节点

delete path [version]

version节点版本号,如果包含该字段则会与节点状态的dataVersion进行比对,不一致则无法删除

[zk: localhost:2181(CONNECTED) 18] delete /node/seqNode0000000002

使用delete删除节点必须保证该节点下无子节点

4.2 强制删除节点

rmr path  
[zk: localhost:2181(CONNECTED) 3] rmr /node/tempNode

使用rmr命令进行节点删除,可以无视子节点是否存在

5. 改

set path data [version]

version节点版本号,如果包含该字段则会与节点状态的dataVersion进行比对,不一致则无法修改

[zk: localhost:2181(CONNECTED) 5] set /node/tempNode 123

6. 查

6.1 查询节点状态

stat path [watch]

watch监听节点状态变化

[zk: localhost:2181(CONNECTED) 8] stat /node
cZxid = 0x2e3
ctime = Tue May 08 21:07:25 CST 2018
mZxid = 0x2e3
mtime = Tue May 08 21:07:25 CST 2018
pZxid = 0x2ed
cversion = 9
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 1

Zookeeper每一次对节点进行写操作的时候都会创建一个事务,并且会为其分配一个Id

cZxid创建节点事务Id

ctime创建节点时间

mZxid修改节点事务Id

mtime修改节点时间

pZxid最后一次删除或新增子节点操作的事务Id

cversion子节点版本号,删除或新增子节点该版本号会自动+1

dataVersion节点数据修改版本号,节点数据进行修改该版本号会自动+1

aclVersion节点权限版本号,修改权限进行修改版本号自动+1

ephemeralOwner临时节点创建事务Id,当该节点为永久节点时,该字段为0

dataLength节点数据长度,一个中文占3byte

numChildren子节点数量

6.2 获取节点数据

get path [watch] 

watch监听节点数据变化。如果选择了该字段且其它客户端修改了该节点的数据,则会通知监听了该节点的所有客户端

[zk: localhost:2181(CONNECTED) 26] get /node/tempNode
123456
cZxid = 0x2ed
ctime = Tue May 08 22:05:32 CST 2018
mZxid = 0x2f0
mtime = Tue May 08 22:10:28 CST 2018
pZxid = 0x2ed
cversion = 0
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0

6.3 查询子节点列表

ls path [watch]
[zk: localhost:2181(CONNECTED) 27] ls /node
[tempNode]

6.4 查询子节点列表&当前节点状态

[zk: localhost:2181(CONNECTED) 28] ls2 /node
[tempNode]
cZxid = 0x2e3
ctime = Tue May 08 21:07:25 CST 2018
mZxid = 0x2e3
mtime = Tue May 08 21:07:25 CST 2018
pZxid = 0x2ed
cversion = 9
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 1

7. 权限设置

setAcl,getAcl,addauth具体使用方法参照上一篇《记录Zookeeper被玩坏后的60分钟》中所讲

8. 配额

8.1 设置配额

setquota -n|-b val path

n限制子节点个数

b限制数据长度

值得注意Zookeeper在设置配额时并不能阻止信息的写入,只能在日志打印中记录当前信息超出了限额。

8.2 删除配额

delquota [-n|-b] path

8.3 查询配额

listquota path

由于Zookeeper在设置配额时并不能阻止信息的写入,只能在日志打印中记录当前信息超出了限额。

9. 历史操作记录

9.1. 查询历史操作记录

[zk: localhost:2181(CONNECTED) 29] history
19 - ls /node
20 - close
21 - connect localhost:2181
22 - get /node/tempNode
23 - get /node/tempNode watch
24 - get /node/tempNode
25 - connect localhost:2181
26 - get /node/tempNode
27 - ls /node
28 - ls2 /node
29 - history

9.2 重新执行历史操作

redo cmdno 

cmdnohistory命令中查询到的编号

[zk: localhost:2181(CONNECTED) 30] redo 26
123456
cZxid = 0x2ed
ctime = Tue May 08 22:05:32 CST 2018
mZxid = 0x2f0
mtime = Tue May 08 22:10:28 CST 2018
pZxid = 0x2ed
cversion = 0
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0

10. 强制同步数据

sync path

Zookeeper作为一个分布式的系统,并不能保证实时数据都是同步的,有些时候就需要手动与leader的数据进行同步,这时候就需要使用sync命令

11. 开关监听日志

printwatches on|off

getls2lsstat命令中都有一个watch的参数用来监听节点的变化。而监听到变化后是否进行打印的开关是使用printwatches进行配置的,默认为开启

12. 会话

12.1 重新建立会话

connect host:port 

12.2 断开会话

close

12.3 退出客户端

quit

至此本文的所有内容到此结束。后面我们会开展一个新的系列 – 微服务的伤于痛,从一个小码农的视角来聊聊微服务中遇到的一些坑。在下一期我们会先介绍如何搭建起一个简易的微服务框架。

欢迎关注微信公众号,在这里可以提前看到下一期文章哦~

mark

相关推荐
最新评论 (0)
返回
发表文章
holycat
文章数
8
评论数
0
注册排名
998525