Zookeeper入门学习(三)--Zookeeper客户端使用
来源:互联网 发布:淘宝拒签会自动退款吗 编辑:程序博客网 时间:2024/05/16 07:52
一、Zookeeper客户端
1、ZooKeeper客户端
(1)使用SSH连接ZooKeeper服务器,然后进入到ZooKeeper安装目录下的bin目录下,然后使用
./zkCli.sh -timeout 5000 -r -server ip:port
建立客户端连接,其中-r表示zookeeper的只读模式,当需要连接的服务器和集群中过半数的服务器失去连接时,该服务器则不再处理客户端请求,但是有的时候任然希望出现这种情况的时候,该服务器还可以提供只读服务,则需要添加-r(-r为可选参数), ip是要连接的服务器的IP地址,port为端口号,默认端口号是2181[zk: 192.168.153.129:2181(CONNECTED) 0] helpZooKeeper -server host:port cmd args #查看节点状态 stat path [watch] #设置节点的数据内容 set path data [version] #查看节点列表 ls path [watch] #删除节点配额 -n子节点个数, -b数据节点的长度 delquota [-n|-b] path #查看节点下的子节点列表,并显示当前节点的的状态 ls2 path [watch] #设置节点的权限 setAcl path acl #设置节点的配额 setquota -n|-b val path #查看历史命令 history #重复执行历史命令中的哪一条命令 cmdno表示在历史命令中的ID编号 redo cmdno printwatches on|off #删除子节点为空的节点 delete path [version] sync path #查看配额 listquota path #递归删除节点 rmr path #查看节点数据 get path [watch] #创建节点 -s表顺序创建,会自动增长ID,-e表是否为临时节点 create [-s] [-e] path data acl addauth scheme auth #退出客户端 quit getAcl path #关闭连接 close #连接到其他的服务器 connect host:portroot@liumeng-1:/opt/zookeeper/bin# ./zkCli.sh -timeout 5000 -server 192.168.153.129:2181
在zookeeper中,每次对数据节点的写操作都是一个事务,每个事务都会有一个事务ID
-客户端指令详解
#(1)ls与stat指令
- ls path : 查看节点的子节点列表
state path : 查看节点状态
WatchedEvent state:SyncConnected type:None path:null#查看节点下的子节点[zk: 192.168.153.129:2181(CONNECTED) 0] ls /[zookeeper]#查看节点的状态[zk: 192.168.153.129:2181(CONNECTED) 1] stat /#创建该节点的事务IDcZxid = 0x0#创建该节点的时间ctime = Thu Jan 01 08:00:00 CST 1970#最后一次被修改的事务IDmZxid = 0x0#最后一次被修改的IDmtime = Thu Jan 01 08:00:00 CST 1970#该节点的子节列表最后一次被修改的事务ID,为当前节点添加节点,或者从当前节点中删除节点会引起子节点列表的改变,但是修改子节点的数据内容是不计算在内的pZxid = 0x0#子节点的版本号cversion = -1#数据版本号dataVersion = 0#权限版本号aclVersion = 0#专用于临时节点,创建该临时节点的事务ID,如果该节点是一个持久节点,那么该属性的值就为固定值0ephemeralOwner = 0x0#当前节点所存放的数据的长度dataLength = 0#当前节点所拥有的子节点的个数numChildren = 1
#(2)get指令 : 获取节点的值
get path : 获取节点的值
[zk: 192.168.153.129:2181(CONNECTED) 5] get /zookeeper/node_1#节点值 345#节点状态,与stat指令的输出相同 cZxid = 0x1900000006ctime = Wed Apr 19 15:24:59 CST 2017mZxid = 0x1900000006mtime = Wed Apr 19 15:24:59 CST 2017pZxid = 0x1900000006cversion = 0dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 3numChildren = 0[zk: 192.168.153.129:2181(CONNECTED) 6]
#(3)ls2指令
ls2 path : 获取节点的子节点列表,并显示节点的状态
[zk: 192.168.153.129:2181(CONNECTED) 1] ls2 /zookeeper[node_1, quota]cZxid = 0x0ctime = Thu Jan 01 08:00:00 CST 1970mZxid = 0x0mtime = Thu Jan 01 08:00:00 CST 1970pZxid = 0x1900000006cversion = 0dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 0numChildren = 2
#(4)create指令
create [-s] [-e] path data acl : 创建一个节点,-s表示是否为顺序节点,-e表示是否为临时节点,path为节点路径,data为节点数据,acl为节点权限
#创建普通节点(永久节点)[zk: 192.168.153.129:2181(CONNECTED) 0] create /node_1 123Created /node_1[zk: 192.168.153.129:2181(CONNECTED) 2] get /node_1123cZxid = 0x190000000bctime = Wed Apr 19 15:36:40 CST 2017mZxid = 0x190000000bmtime = Wed Apr 19 15:36:40 CST 2017pZxid = 0x190000000bcversion = 0dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 3numChildren = 0#创建临时节点,在结束客户端连接后再重新登录,临时节点就失效删除了[zk: 192.168.153.129:2181(CONNECTED) 1] create -e /node_1/node_1_1 234Created /node_1/node_1_1[zk: 192.168.153.129:2181(CONNECTED) 2] ls /node_1[node_1_1]#退出客户端[zk: 192.168.153.129:2181(CONNECTED) 3] quitQuitting...#重新连接客户端root@liumeng-1:/opt/zookeeper/bin# ./zkCli.sh -timeout 5000 -server 192.168.153.129:2181Connecting to 192.168.153.129:2181#重新查询,节点的子节点为空[zk: 192.168.153.129:2181(CONNECTED) 0] ls /node_1[]#创建顺序节点[zk: 192.168.153.129:2181(CONNECTED) 1] create -s /node_1/node_1_1 234#创建成功之后返回的节点名称Created /node_1/node_1_10000000001#同路径下继续创建相同名称的节点名,因为是顺序节点,会子啊节点后面自动递增ID[zk: 192.168.153.129:2181(CONNECTED) 2] create -s /node_1/node_1_1 234Created /node_1/node_1_10000000002[zk: 192.168.153.129:2181(CONNECTED) 3] create -s /node_1/node_1_1 234Created /node_1/node_1_10000000003[zk: 192.168.153.129:2181(CONNECTED) 4] ls /node_1[node_1_10000000001, node_1_10000000003, node_1_10000000002]
#(5)set指令
set path data [version] : 修改节点,version为当前节点的数据版本号,可选参数,version必须要与当前节点的数据版本号一致才可以修改成功,否则失败
#修改节点内容[zk: 192.168.153.129:2181(CONNECTED) 3] set /node_1/node_1_10000000001 789cZxid = 0x1900000011ctime = Wed Apr 19 15:39:27 CST 2017mZxid = 0x1900000016mtime = Wed Apr 19 15:47:37 CST 2017pZxid = 0x1900000011cversion = 0#数据版本号加了1dataVersion = 1aclVersion = 0ephemeralOwner = 0x0dataLength = 3numChildren = 0#查询节点内容[zk: 192.168.153.129:2181(CONNECTED) 4] get /node_1/node_1_1000000000789cZxid = 0x1900000011ctime = Wed Apr 19 15:39:27 CST 2017mZxid = 0x1900000016mtime = Wed Apr 19 15:47:37 CST 2017pZxid = 0x1900000011cversion = 0#数据版本号加了1dataVersion = 1aclVersion = 0ephemeralOwner = 0x0dataLength = 3numChildren = 0#指定数据版本号修改#版本号一致,修改成功,数据版本号加1[zk: 192.168.153.129:2181(CONNECTED) 5] set /node_1/node_1_10000000001 987 2cZxid = 0x1900000011ctime = Wed Apr 19 15:39:27 CST 2017mZxid = 0x190000001cmtime = Wed Apr 19 15:51:52 CST 2017pZxid = 0x1900000011cversion = 0dataVersion = 3aclVersion = 0ephemeralOwner = 0x0dataLength = 3numChildren = 0#版本号不一致,修改失败[zk: 192.168.153.129:2181(CONNECTED) 6] set /node_1/node_1_10000000001 987 2version No is not valid : /node_1/node_1_10000000001
#(6)delete指令与rmr指令
- delete path [version] : 删除节点,只能删除没有子节点的节点,否则报错,version与set的版本号作用一致
rmr path : 递归删除节点,会删除节点下的所有子节点
#delete删除没有子节点的节点[zk: 192.168.153.129:2181(CONNECTED) 0] delete /node_1/node_1_10000000001[zk: 192.168.153.129:2181(CONNECTED) 2] ls /node_1[node_1_10000000003, node_1_10000000002]#delete删除有子节点的节点[zk: 192.168.153.129:2181(CONNECTED) 3] delete /node_1Node not empty: /node_1#rmr删除有子节点的节点[zk: 192.168.153.129:2181(CONNECTED) 4] rmr /node_1[zk: 192.168.153.129:2181(CONNECTED) 5] ls /[zookeeper]
#(7)setquota指令
setquota -n|-b var path : 给节点设置配额,-n表示限制子节点的个数,-b表示限制子节点数据的长度, var为值, path路径
#设置配额,子节点的个数为2[zk: 192.168.153.129:2181(CONNECTED) 3] setquota -n 2 /node_1Comment: the parts are option -n val 2 path /node_1#创建子节点[zk: 192.168.153.129:2181(CONNECTED) 5] create -s /node_1/node_1_1 123Created /node_1/node_1_10000000001[zk: 192.168.153.129:2181(CONNECTED) 6] create -s /node_1/node_1_1 123Created /node_1/node_1_10000000002[zk: 192.168.153.129:2181(CONNECTED) 7] create -s /node_1/node_1_1 123Created /node_1/node_1_10000000003[zk: 192.168.153.129:2181(CONNECTED) 8] ls /node_1[node_1_10000000001, node_1_10000000003, node_1_10000000002]
此处发现,节点个数超过配额设置之后并没有抛出异常,因为zookeeper中,如果子节点的个数超过配额限制,并不会抛出异常,而只是在日志中记录一条告警信息,日志在zookeeper安装目录下的bin目录中
#Quota exceeded: path count limit path为超出配额的节点路径,count为当前状态包括节点本身的子节点个数,limit子节点配额值 2017-04-19 16:04:15,460 [myid:3] - WARN [CommitProcessor:3:DataTree@301] - Quota exceeded: /node_1 count=3 limit=2 2017-04-19 16:04:18,128 [myid:3] - WARN [CommitProcessor:3:DataTree@301] - Quota exceeded: /node_1 count=4 limit=2
#(8)listquota指令
listquota path : 查看节点的配额
[zk: 192.168.153.129:2181(CONNECTED) 0] listquota /node_1absolute path is /zookeeper/quota/node_1/zookeeper_limits#当前节点的配额,子节点个数的配额为2,数据长度没有限制(-1表示没有限制)Output quota for /node_1 count=2,bytes=-1#当前节点的状态,count表示当前节点包括自己在内的子节点个数,bytes表示包括节点数据在内的所有子节点的数据长度的和Output stat for /node_1 count=4,bytes=12
#(9)listquota指令
delquota [-n|-b] path : 删除节点的配额
[zk: 192.168.153.129:2181(CONNECTED) 0] listquota /node_1absolute path is /zookeeper/quota/node_1/zookeeper_limitsOutput quota for /node_1 count=2,bytes=-1Output stat for /node_1 count=5,bytes=15[zk: 192.168.153.129:2181(CONNECTED) 1] delquota -n /node_1[zk: 192.168.153.129:2181(CONNECTED) 2] listquota /node_1absolute path is /zookeeper/quota/node_1/zookeeper_limitsOutput quota for /node_1 count=-1,bytes=-1Output stat for /node_1 count=5,bytes=15
- Zookeeper入门学习(三)--Zookeeper客户端使用
- Zookeeper入门学习(三)--Zookeeper客户端使用
- zookeeper使用(三)--Curator客户端操作zookeeper
- zookeeper学习之三(Curator客户端)
- zookeeper学习之三(Curator客户端)
- zookeeper学习之三(Curator客户端)
- zookeeper学习之三(Curator客户端)
- zookeeper学习之三(Curator客户端)
- zookeeper学习之三(Curator客户端)
- ZooKeeper 学习 (四) ZooKeeper Java客户端API使用
- ZooKeeper学习笔记-3---ZooKeeper客户端使用
- Zookeeper(三)客户端脚本
- zookeeper学习系列(三)zookeeper基本原理
- zookeeper入门(二)——zk客户端脚本使用
- ZooKeeper学习总结(2)——ZooKeeper开源Java客户端ZkClient使用
- zookeeper(2) zookeeper客户端ZkClient入门
- ZooKeeper 客户端的使用
- ZooKeeper二:客户端使用
- 技术管理序列3 -- 技术的价值究竟何在?-- 价值模型
- 输入三角形的3边长,求三角形面积
- Say Something
- 动态规划练习10:数字组合
- Java文件I/O的三种方法
- Zookeeper入门学习(三)--Zookeeper客户端使用
- 微信小程序Mac端设置服务器代理
- .bashrc: line 123: syntax error: unexpected end of file
- listView设置高度
- 输入一个字符,将大写字母换小写,小写变大写
- iscsi发起程序实例不存在的问题
- 463. Island Perimeter
- 彻底理解ThreadLocal
- 如何让SVG的path动起来