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
0 0
原创粉丝点击