Zookeeper入门学习(三)--Zookeeper客户端使用
一、Zookeeper客户端1、ZooKeeper客户端(1)使用SSH连接ZooKeeper服务器,然后进入到ZooKeeper安装目录下的bin目录下,然后使用./zkCli.sh -timeout 5000 -r -server ip:port建立客户端连接,其中-r表示zookeeper的只读模式,当需要连接的服务器和集群中过半数的服务器失去连接时,该服务器则不再处理客户端请求,但是有的时
一、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] help ZooKeeper -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:port root@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 / #创建该节点的事务ID cZxid = 0x0 #创建该节点的时间 ctime = Thu Jan 01 08:00:00 CST 1970 #最后一次被修改的事务ID mZxid = 0x0 #最后一次被修改的ID mtime = Thu Jan 01 08:00:00 CST 1970 #该节点的子节列表最后一次被修改的事务ID,为当前节点添加节点,或者从当前节点中删除节点会引起子节点列表的改变,但是修改子节点的数据内容是不计算在内的 pZxid = 0x0 #子节点的版本号 cversion = -1 #数据版本号 dataVersion = 0 #权限版本号 aclVersion = 0 #专用于临时节点,创建该临时节点的事务ID,如果该节点是一个持久节点,那么该属性的值就为固定值0 ephemeralOwner = 0x0 #当前节点所存放的数据的长度 dataLength = 0 #当前节点所拥有的子节点的个数 numChildren = 1
#(2)get指令 : 获取节点的值
get path : 获取节点的值
[zk: 192.168.153.129:2181(CONNECTED) 5] get /zookeeper/node_1 #节点值 345 #节点状态,与stat指令的输出相同 cZxid = 0x1900000006 ctime = Wed Apr 19 15:24:59 CST 2017 mZxid = 0x1900000006 mtime = Wed Apr 19 15:24:59 CST 2017 pZxid = 0x1900000006 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 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 = 0x0 ctime = Thu Jan 01 08:00:00 CST 1970 mZxid = 0x0 mtime = Thu Jan 01 08:00:00 CST 1970 pZxid = 0x1900000006 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 0 numChildren = 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 123 Created /node_1 [zk: 192.168.153.129:2181(CONNECTED) 2] get /node_1 123 cZxid = 0x190000000b ctime = Wed Apr 19 15:36:40 CST 2017 mZxid = 0x190000000b mtime = Wed Apr 19 15:36:40 CST 2017 pZxid = 0x190000000b cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 0 #创建临时节点,在结束客户端连接后再重新登录,临时节点就失效删除了 [zk: 192.168.153.129:2181(CONNECTED) 1] create -e /node_1/node_1_1 234 Created /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] quit Quitting... #重新连接客户端 root@liumeng-1:/opt/zookeeper/bin# ./zkCli.sh -timeout 5000 -server 192.168.153.129:2181 Connecting 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 234 Created /node_1/node_1_10000000002 [zk: 192.168.153.129:2181(CONNECTED) 3] create -s /node_1/node_1_1 234 Created /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 789 cZxid = 0x1900000011 ctime = Wed Apr 19 15:39:27 CST 2017 mZxid = 0x1900000016 mtime = Wed Apr 19 15:47:37 CST 2017 pZxid = 0x1900000011 cversion = 0 #数据版本号加了1 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 0 #查询节点内容 [zk: 192.168.153.129:2181(CONNECTED) 4] get /node_1/node_1_1000000000 789 cZxid = 0x1900000011 ctime = Wed Apr 19 15:39:27 CST 2017 mZxid = 0x1900000016 mtime = Wed Apr 19 15:47:37 CST 2017 pZxid = 0x1900000011 cversion = 0 #数据版本号加了1 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 0 #指定数据版本号修改 #版本号一致,修改成功,数据版本号加1 [zk: 192.168.153.129:2181(CONNECTED) 5] set /node_1/node_1_10000000001 987 2 cZxid = 0x1900000011 ctime = Wed Apr 19 15:39:27 CST 2017 mZxid = 0x190000001c mtime = Wed Apr 19 15:51:52 CST 2017 pZxid = 0x1900000011 cversion = 0 dataVersion = 3 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 0 #版本号不一致,修改失败 [zk: 192.168.153.129:2181(CONNECTED) 6] set /node_1/node_1_10000000001 987 2 version 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_1 Node 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_1 Comment: 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 123 Created /node_1/node_1_10000000001 [zk: 192.168.153.129:2181(CONNECTED) 6] create -s /node_1/node_1_1 123 Created /node_1/node_1_10000000002 [zk: 192.168.153.129:2181(CONNECTED) 7] create -s /node_1/node_1_1 123 Created /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_1 absolute 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_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=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_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=5,bytes=15
更多推荐
所有评论(0)