• zookeeper-03 命令行操作


    1. 前言

    在3台机器分别部署了zookeeper-3.4.5,本文操作是在此基础上进行的。部署详情参见上一篇文章

      

    2. 客户端登录与帮助查看

     1 # 由于是集群模式,所以可以在3台机器的其中任意一台进行登录,操作结果和数据也会同步到其他机器 
     2 [root@docker01 bin]# pwd
     3 /app/zookeeper-3.4.5/bin
     4 [root@docker01 bin]# ll
     5 total 64
     6 -rwxr-xr-x 1  501 games   238 Oct  1  2012 README.txt
     7 -rwxr-xr-x 1  501 games  1909 Oct  1  2012 zkCleanup.sh
     8 -rwxr-xr-x 1  501 games  1049 Oct  1  2012 zkCli.cmd
     9 -rwxr-xr-x 1  501 games  1512 Oct  1  2012 zkCli.sh
    10 -rwxr-xr-x 1  501 games  1333 Oct  1  2012 zkEnv.cmd
    11 -rwxr-xr-x 1  501 games  2599 Oct  1  2012 zkEnv.sh
    12 -rwxr-xr-x 1  501 games  1084 Oct  1  2012 zkServer.cmd
    13 -rwxr-xr-x 1  501 games  5467 Oct  1  2012 zkServer.sh
    14 -rw-r--r-- 1 root root  25108 May 26 14:51 zookeeper.out
    15 [root@docker01 bin]# ./zkCli.sh  # 客户端登录 
    16 ………………  # 一些摘要信息
    17 [zk: localhost:2181(CONNECTED) 0] 
    18 [zk: localhost:2181(CONNECTED) 0] help  # 客户端帮助信息 
    19 ZooKeeper -server host:port cmd args
    20     stat path [watch]           # 查看路径【节点】属性信息  [watch] 观察模式,有改变则会被通知,watch一次有效一次
    21     set path data [version]  # 设置/修改节点信息
    22     ls path [watch]             # 查看路径【节点】  [watch] 观察模式,有改变则会被通知,watch一次有效一次
    23     delquota [-n|-b] path
    24     ls2 path [watch]
    25     setAcl path acl
    26     setquota -n|-b val path
    27     history 
    28     redo cmdno
    29     printwatches on|off
    30     delete path [version]   # 删除节点
    31     sync path
    32     listquota path
    33     rmr path           # 递归删除
    34     get path [watch]   # 更具路径【节点】得到信息  [watch] 观察模式,有改变则会被通知,watch一次有效一次
    35     create [-s] [-e] path data acl  # 创建节点和数据  -s 序列化【避免重复】 -e 临时数据【常用】 
    36     addauth scheme auth
    37     quit   # 退出客户端
    38     getAcl path
    39     close 
    40     connect host:port   # 可以连接到其他客户端,前提在一个集群内
    41 [zk: localhost:2181(CONNECTED) 1]

    2.1.  数据的属性说明

    属性

    描述

    czxid

    节点被创建的Zxid值

    mzxid

    节点被修改的Zxid值

    ctime

    节点被创建的时间

    mtime

    节点最后一次被修改的时间

    versoin

    节点被修改的版本号

    cversion

    节点的所拥有子节点被修改的版本号

    aversion

    节点的ACL被修改的版本号

    emphemeralOwner

    如果此节点为临时节点,那么它的值为这个节点拥有者的会话ID;否则,它的值为0

    dataLength

    节点数据域的长度

    numChildren

    节点拥有的子节点个数

    3.  常用操作

    3.1.  切换到其他客户端

    1 [zk: localhost:2181(CONNECTED) 1] connect 172.16.1.13:2181  
    2 ……………… # 一些摘要信息
    3 WATCHER::
    4 
    5 WatchedEvent state:SyncConnected type:None path:null
    6 
    7 [zk: 172.16.1.13:2181(CONNECTED) 2]

    3.2.  节点的增删改查

    3.2.1.   增加节点

    1 [zk: 172.16.1.13:2181(CONNECTED) 2] ls /
    2 [zookeeper]
    3 [zk: 172.16.1.13:2181(CONNECTED) 3] create /zhang01/yang01 test0001  # 保证父节点存在  
    4 Node does not exist: /zhang01/yang01
    5 [zk: 172.16.1.13:2181(CONNECTED) 4] 
    6 [zk: 172.16.1.13:2181(CONNECTED) 4] create /zhang01 test01         
    7 Created /zhang01
    8 [zk: 172.16.1.13:2181(CONNECTED) 5] ls /
    9 [zookeeper, zhang01]

    3.2.2.    查询节点

     1 [zk: 172.16.1.13:2181(CONNECTED) 7] ls /     
     2 [zookeeper, zhang01]
     3 [zk: 172.16.1.13:2181(CONNECTED) 8] get /zhang01  
     4 test01                                    # 内容
     5 cZxid = 0x100000007                        # 创建数据时的事物编号
     6 ctime = Sat May 26 15:11:40 CST 2018    # 创建时间
     7 mZxid = 0x100000007                        # 修改数据时的事物编号
     8 mtime = Sat May 26 15:11:40 CST 2018    # 修改时间
     9 pZxid = 0x100000007            # 持久化事物编号
    10 cversion = 0                # 创建版本号
    11 dataVersion = 0                # 数据版本
    12 aclVersion = 0                # 权限版本
    13 ephemeralOwner = 0x0        # 持久接待
    14 dataLength = 6                # 数据长度
    15 numChildren = 0                # 子节点数

    3.2.3.    修改节点

     1 [zk: 172.16.1.13:2181(CONNECTED) 9] ls /
     2 [zookeeper, zhang01]
     3 [zk: 172.16.1.13:2181(CONNECTED) 10] set /zhang01 1111111  # 修改节点信息 
     4 cZxid = 0x100000007
     5 ctime = Sat May 26 15:11:40 CST 2018
     6 mZxid = 0x100000009
     7 mtime = Sat May 26 15:15:38 CST 2018
     8 pZxid = 0x100000007
     9 cversion = 0
    10 dataVersion = 1
    11 aclVersion = 0
    12 ephemeralOwner = 0x0
    13 dataLength = 7
    14 numChildren = 0
    15 [zk: 172.16.1.13:2181(CONNECTED) 11] get /zhang01        
    16 1111111
    17 cZxid = 0x100000007
    18 ctime = Sat May 26 15:11:40 CST 2018
    19 mZxid = 0x100000009
    20 mtime = Sat May 26 15:15:38 CST 2018
    21 pZxid = 0x100000007
    22 cversion = 0
    23 dataVersion = 1
    24 aclVersion = 0
    25 ephemeralOwner = 0x0
    26 dataLength = 7
    27 numChildren = 0

    3.2.4.    节点常规删除

     1 [zk: localhost:2181(CONNECTED) 1] ls /zhang01
     2 [test04, test03, test02, test01]
     3 [zk: localhost:2181(CONNECTED) 3] ls /zhang01/test04  # 没有子节点 
     4 []
     5 [zk: localhost:2181(CONNECTED) 4] get /zhang01/test04
     6 date_test04
     7 cZxid = 0x10000000d
     8 ………………
     9 [zk: localhost:2181(CONNECTED) 5] delete /zhang01/test04  # 删除子节点
    10 [zk: localhost:2181(CONNECTED) 6] ls /zhang01   # 经常看删除成功        
    11 [test03, test02, test01]
    12 [zk: localhost:2181(CONNECTED) 7] delete /zhang01  # 如果有子节点那么不能删除 
    13 Node not empty: /zhang01

    3.2.5.    递归删除节点

    1 [zk: localhost:2181(CONNECTED) 8] ls /zhang01
    2 [test03, test02, test01]
    3 [zk: localhost:2181(CONNECTED) 9] rmr /zhang01  # 递归删除 
    4 [zk: localhost:2181(CONNECTED) 10] ls /zhang01  # 删除成功 
    5 Node does not exist: /zhang01
    6 [zk: localhost:2181(CONNECTED) 11] ls /
    7 [zookeeper]

    3.3.  持久节点和临时节点

    第一台客户端

     1 [zk: localhost:2181(CONNECTED) 14] ls /            
     2 [zookeeper]
     3 [zk: localhost:2181(CONNECTED) 15] create /zhang01 yang01  # 默认持久节点 
     4 Created /zhang01
     5 [zk: localhost:2181(CONNECTED) 16] create -e /zhang02 yang02  # 创建临时节点 
     6 Created /zhang02
     7 [zk: localhost:2181(CONNECTED) 17] ls /
     8 [zookeeper, zhang02, zhang01]
     9 [zk: localhost:2181(CONNECTED) 18] get /zhang01
    10 yang01
    11 cZxid = 0x100000018
    12 ctime = Sat May 26 15:33:47 CST 2018
    13 mZxid = 0x100000018
    14 mtime = Sat May 26 15:33:47 CST 2018
    15 pZxid = 0x100000018
    16 cversion = 0
    17 dataVersion = 0
    18 aclVersion = 0
    19 ephemeralOwner = 0x0   # 代表持久节点 
    20 dataLength = 6
    21 numChildren = 0
    22 [zk: localhost:2181(CONNECTED) 19] get /zhang02
    23 yang02
    24 cZxid = 0x100000019
    25 ctime = Sat May 26 15:33:55 CST 2018
    26 mZxid = 0x100000019
    27 mtime = Sat May 26 15:33:55 CST 2018
    28 pZxid = 0x100000019
    29 cversion = 0
    30 dataVersion = 0
    31 aclVersion = 0
    32 ephemeralOwner = 0x1639b3087ac0002  # 代表临时节点  
    33 dataLength = 6
    34 numChildren = 0
    35 [zk: localhost:2181(CONNECTED) 20] quit  # 退出当前客户端【那么当前这个客户端创建的临时节点会被自动删除】 

     

    第二台客户端

    1 # 之前可以正常查到,但是当上面的客户端退出后,节点/zhang02 被自动删除了  
    2 [zk: localhost:2181(CONNECTED) 4] ls /
    3 [zookeeper, zhang01]

    3.4.  节点序列化

     1 [zk: localhost:2181(CONNECTED) 14] ls /
     2 [zookeeper, zhang01]
     3 [zk: localhost:2181(CONNECTED) 15] ls /zhang01
     4 []
     5 [zk: localhost:2181(CONNECTED) 16] 
     6 [zk: localhost:2181(CONNECTED) 16] create -s /zhang01/test01 test01  
     7 Created /zhang01/test010000000002
     8 [zk: localhost:2181(CONNECTED) 17] create -s -e /zhang01/test02 test02   
     9 Created /zhang01/test020000000003
    10 [zk: localhost:2181(CONNECTED) 18] 
    11 [zk: localhost:2181(CONNECTED) 18] ls /zhang01
    12 [test020000000003, test010000000002]

    3.5.  watch模式节点操作

    watch监听有不同的类型,有监听状态的stat ,内容的get,目录结构的ls。

    3.5.1.    watch节点属性

    监听自身属性改变和节点删除

     1 # 第一台客户端监听
     2 [zk: localhost:2181(CONNECTED) 4] ls /               
     3 [zookeeper, zhang01]
     4 [zk: localhost:2181(CONNECTED) 5] stat /zhang01 watch
     5 cZxid = 0x100000018
     6 ctime = Sat May 26 15:33:47 CST 2018
     7 mZxid = 0x10000001e
     8 mtime = Sat May 26 15:44:20 CST 2018
     9 pZxid = 0x100000018
    10 cversion = 0
    11 dataVersion = 2
    12 aclVersion = 0
    13 ephemeralOwner = 0x0
    14 dataLength = 8
    15 numChildren = 0
    16 
    17 # 第二台客户端操作
    18 [zk: localhost:2181(CONNECTED) 10] set /zhang01 yyyywwwww  # 修改节点信息 
    19 ……………………
    20 
    21 # 第一台客户端自动响应
    22 [zk: localhost:2181(CONNECTED) 6] 
    23 WATCHER::
    24 
    25 WatchedEvent state:SyncConnected type:NodeDataChanged path:/zhang01

    3.5.2.    watch路径

     1 # 第一台客户端
     2 [zk: localhost:2181(CONNECTED) 6] ls /zhang01 watch 
     3 []
     4 
     5 # 第二台客户端操作
     6 [zk: localhost:2181(CONNECTED) 11] create -e /zhang01/test01 test01
     7 Created /zhang01/test01
     8 
     9 # 第一台客户端自动响应
    10 [zk: localhost:2181(CONNECTED) 7] 
    11 WATCHER::
    12 
    13 WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/zhang01
    14 
    15 [zk: localhost:2181(CONNECTED) 7]

    3.5.3.    watch节点

    节点自身属性改变和节点被删除都会被通知

    自身属性改变

     1 # 第一台客户端
     2 [zk: localhost:2181(CONNECTED) 7] ls /
     3 [zookeeper, zhang01]
     4 [zk: localhost:2181(CONNECTED) 8] ls /zhang01
     5 [test01]
     6 [zk: localhost:2181(CONNECTED) 9] 
     7 [zk: localhost:2181(CONNECTED) 9] get /zhang01/test01 watch
     8 test01
     9 cZxid = 0x100000020
    10 ………………
    11 
    12 # 第二台客户端操作
    13 [zk: localhost:2181(CONNECTED) 12] set /zhang01/test01  kkkk
    14 cZxid = 0x100000020
    15 ctime = Sat May 26 15:49:30 CST 2018
    16 ………………
    17 
    18 # 第一台客户端自动响应
    19 [zk: localhost:2181(CONNECTED) 10] 
    20 WATCHER::
    21 
    22 WatchedEvent state:SyncConnected type:NodeDataChanged path:/zhang01/test01
    23 
    24 [zk: localhost:2181(CONNECTED) 10]

    节点删除

     1 # 第一台客户端
     2 [zk: localhost:2181(CONNECTED) 10] get /zhang01/test01 watch
     3 kkkk
     4 cZxid = 0x100000020
     5 ………………
     6 
     7 # 第二台客户端操作
     8 [zk: localhost:2181(CONNECTED) 14] delete /zhang01/test01 
     9 
    10 # 第一台客户端自动响应
    11 [zk: localhost:2181(CONNECTED) 11] 
    12 WATCHER::
    13 
    14 WatchedEvent state:SyncConnected type:NodeDeleted path:/zhang01/test01
    15 
    16 [zk: localhost:2181(CONNECTED) 11]
  • 相关阅读:
    dotnetcore EF 分页
    MySQL为什么有时候会选错索引?
    Java内存模型:看Java如何解决可见性和有序性问题
    互斥锁(上):解决原子性问题
    可见性、原子性和有序性问题:并发编程Bug的源头
    程序的运行过程:从代码到机器运行
    几行汇编几行C:实现一个最简单的内核
    怎么给字符串字段加索引?
    互斥锁(下):如何用一把锁保护多个资源?
    震撼的Linux全景图:业界成熟的内核架构长什么样?
  • 原文地址:https://www.cnblogs.com/zhanglianghhh/p/9094363.html
Copyright © 2020-2023  润新知