ZooKeeper学习笔记(六): 客户端命令行操作

客户端命令行操作

首先连接docker对应的集群

# 进入zookeeper1号容器中
root@azang405:~# docker exec -it zk-1 /bin/bash

# 进入到bin目录中
root@f04635a2c8a3:/apache-zookeeper-3.7.0-bin# cd /apache-zookeeper-3.7.0-bin/bin

我们这里因为在之前笔记里面创建了一个单独的docker网络不了解docker网络的话可以去看一下我之前的博客docker网络

正因为我创建了独立的docker网络所以在下面的zookeeper命令中我是可以直接使用容器名加上端口号可以直接使用客户端连接对应的节点的

之所以说这些是因为上面我进入的容器是zk-1但是我下面连接的节点是zk-3,所以解释说明一下,

连接客户端

zkCli.sh -server zk-3:2181

正文

# 在zk-1容器中连接
root@f04635a2c8a3:/apache-zookeeper-3.7.0-bin/bin# zkCli.sh -server zk-3:2181
Connecting to zk-3:2181
2022-02-10 10:57:02,271 [myid:] - INFO  [main:Environment@98] - Client environment:zookeeper.version=3.7.0-e3704b390a6697bfdf4b0bef79e3da7a4f6bac4b, built on 2021-03-17 09:46 UTC
2022-02-10 10:57:02,289 [myid:] - INFO  [main:Environment@98] - Client environment:host.name=f04635a2c8a3
2022-02-10 10:57:02,289 [myid:] - INFO  [main:Environment@98] - Client environment:java.version=11.0.13
2022-02-10 10:57:02,292 [myid:] - INFO  [main:Environment@98] - Client environment:java.vendor=Oracle Corporation
2022-02-10 10:57:02,292 [myid:] - INFO  [main:Environment@98] - Client environment:java.home=/usr/local/openjdk-11
2022-02-10 10:57:02,293 [myid:] - INFO  [main:Environment@98] - Client environment:java.class.path=/apache-zookeeper-3.7.0-bin/bin/../zookeeper-server/target/classes:/apache-zookeeper-3.7.0-bin/bin/../build/classes:/apache-zookeeper-3.7.0-bin/bin/../zookeeper-server/target/lib/*.jar:/apache-zookeeper-3.7.0-bin/bin/../build/lib/*.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/zookeeper-prometheus-metrics-3.7.0.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/zookeeper-jute-3.7.0.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/zookeeper-3.7.0.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/snappy-java-1.1.7.7.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/slf4j-log4j12-1.7.30.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/slf4j-api-1.7.30.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/simpleclient_servlet-0.9.0.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/simpleclient_hotspot-0.9.0.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/simpleclient_common-0.9.0.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/simpleclient-0.9.0.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/netty-transport-native-unix-common-4.1.59.Final.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/netty-transport-native-epoll-4.1.59.Final.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/netty-transport-4.1.59.Final.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/netty-resolver-4.1.59.Final.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/netty-handler-4.1.59.Final.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/netty-common-4.1.59.Final.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/netty-codec-4.1.59.Final.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/netty-buffer-4.1.59.Final.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/metrics-core-4.1.12.1.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/log4j-1.2.17.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/jline-2.14.6.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/jetty-util-ajax-9.4.38.v20210224.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/jetty-util-9.4.38.v20210224.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/jetty-servlet-9.4.38.v20210224.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/jetty-server-9.4.38.v20210224.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/jetty-security-9.4.38.v20210224.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/jetty-io-9.4.38.v20210224.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/jetty-http-9.4.38.v20210224.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/javax.servlet-api-3.1.0.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/jackson-databind-2.10.5.1.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/jackson-core-2.10.5.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/jackson-annotations-2.10.5.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/commons-cli-1.4.jar:/apache-zookeeper-3.7.0-bin/bin/../lib/audience-annotations-0.12.0.jar:/apache-zookeeper-3.7.0-bin/bin/../zookeeper-*.jar:/apache-zookeeper-3.7.0-bin/bin/../zookeeper-server/src/main/resources/lib/*.jar:/conf:
2022-02-10 10:57:02,293 [myid:] - INFO  [main:Environment@98] - Client environment:java.library.path=/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib
2022-02-10 10:57:02,294 [myid:] - INFO  [main:Environment@98] - Client environment:java.io.tmpdir=/tmp
2022-02-10 10:57:02,294 [myid:] - INFO  [main:Environment@98] - Client environment:java.compiler=<NA>
2022-02-10 10:57:02,296 [myid:] - INFO  [main:Environment@98] - Client environment:os.name=Linux
2022-02-10 10:57:02,296 [myid:] - INFO  [main:Environment@98] - Client environment:os.arch=amd64
2022-02-10 10:57:02,297 [myid:] - INFO  [main:Environment@98] - Client environment:os.version=5.4.0-83-generic
2022-02-10 10:57:02,301 [myid:] - INFO  [main:Environment@98] - Client environment:user.name=root
2022-02-10 10:57:02,301 [myid:] - INFO  [main:Environment@98] - Client environment:user.home=/root
2022-02-10 10:57:02,302 [myid:] - INFO  [main:Environment@98] - Client environment:user.dir=/apache-zookeeper-3.7.0-bin/bin
2022-02-10 10:57:02,302 [myid:] - INFO  [main:Environment@98] - Client environment:os.memory.free=24MB
2022-02-10 10:57:02,304 [myid:] - INFO  [main:Environment@98] - Client environment:os.memory.max=256MB
2022-02-10 10:57:02,305 [myid:] - INFO  [main:Environment@98] - Client environment:os.memory.total=32MB
2022-02-10 10:57:02,309 [myid:] - INFO  [main:ZooKeeper@637] - Initiating client connection, connectString=zk-3:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@7946e1f4
2022-02-10 10:57:02,313 [myid:] - INFO  [main:X509Util@77] - Setting -D jdk.tls.rejectClientInitiatedRenegotiation=true to disable client-initiated TLS renegotiation
2022-02-10 10:57:02,318 [myid:] - INFO  [main:ClientCnxnSocket@239] - jute.maxbuffer value is 1048575 Bytes
2022-02-10 10:57:02,326 [myid:] - INFO  [main:ClientCnxn@1726] - zookeeper.request.timeout value is 0. feature enabled=false
Welcome to ZooKeeper!
2022-02-10 10:57:02,368 [myid:zk-3:2181] - INFO  [main-SendThread(zk-3:2181):ClientCnxn$SendThread@1171] - Opening socket connection to server zk-3/172.38.0.13:2181.
2022-02-10 10:57:02,368 [myid:zk-3:2181] - INFO  [main-SendThread(zk-3:2181):ClientCnxn$SendThread@1173] - SASL config status: Will not attempt to authenticate using SASL (unknown error)
2022-02-10 10:57:02,389 [myid:zk-3:2181] - INFO  [main-SendThread(zk-3:2181):ClientCnxn$SendThread@1005] - Socket connection established, initiating session, client: /172.38.0.11:58548, server: zk-3/172.38.0.13:2181
JLine support is enabled
2022-02-10 10:57:02,425 [myid:zk-3:2181] - INFO  [main-SendThread(zk-3:2181):ClientCnxn$SendThread@1438] - Session establishment complete on server zk-3/172.38.0.13:2181, session id = 0x30000fcab630000, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
# 成功连接
[zk: zk-3:2181(CONNECTED) 0] 

查看都有哪些命令

[zk: zk-3:2181(CONNECTED) 0] help
ZooKeeper -server host:port -client-configuration properties-file cmd args
        addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE
        addauth scheme auth
        close 
        config [-c] [-w] [-s]
        connect host:port
        # 普通创建节点 -s:含有序列 -e:临时(重启或者超时消失)
        create [-s] [-e] [-c] [-t ttl] path [data] [acl]
        # 删除一个节点
        delete [-v version] path
        # 递归删除节点
        deleteall path [-b batch size]
        delquota [-n|-b|-N|-B] path
        # 监听
        get [-s] [-w] path
        getAcl [-s] path
        getAllChildrenNumber path
        getEphemerals path
        # 历史服务
        history 
        listquota path
        ls [-s] [-w] [-R] path
        printwatches on|off
        # 退出
        quit 
        reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
        redo cmdno
        removewatches path [-c|-d|-a] [-l]
        # 设置节点的具体值
        set [-s] [-v version] path data
        setAcl [-s] [-v version] [-R] path acl
        setquota -n|-b|-N|-B val path
        # 查看节点状态
        stat [-w] path
        sync path
        version 
        whoami 
Command not found: Command not

查看

  1. ls / : 查看当前znode(节点)中包含的内容
  2. ls -s / : 查看当前znode(节点)详细数据
# 查看当前znode(节点)中包含的内容
[zk: zk-3:2181(CONNECTED) 2] ls /
[zookeeper]

# 查看当前znode(节点)详细数据
[zk: zk-3:2181(CONNECTED) 3] ls -s /

# 参数解读
[zookeeper]
cZxid = 0x0			# 创建节点的事务zxid: 每次修改ZooKeeper状态都会产生一个ZooKeeper事务ID.事务ID是ZooKeeper中所有修改的总次序.每次修改都有为一个zxid(事务ID),如果zxid1小于zxid2,那么zxid1在zxid2之前发生.
ctime = Thu Jan 01 00:00:00 UTC 1970		# znode被创建的毫秒数(从1970年开始)
mZxid = 0x0		# 当前znode最后更新的事务ID
mtime = Thu Jan 01 00:00:00 UTC 1970		# 当前znode最后修改的毫秒数(从1970年开始)
pZxid = 0x0		# 当前znode最后更新的子节点的事务ID(因为znode是树形结构的)
cversion = -1		# 当前znode子节点变化好,znode子节点修改次数
dataVersion = 0		# 当前znode数据变化的版本号
aclVersion = 0		# 当前znode访问控制列表的变化号
ephemeralOwner = 0x0		# 如果是临时节点,这个是当前znode拥有者的session_id.如果不是临时节点的话这永远是0.
dataLength = 0		# 当前znode的数据长度
numChildren = 1		# 当前znode子节点数量

(节点讲解)节点类型(持久/短暂/有序号/无序号)

持久(Persistent) : 客户端和服务器断开链接后,创建的节点不删除
  1. 持久化目录节点(无序号): 例如znode1

    客户端与ZooKeeper断开连接后,该节点依然存在

  2. 持久化顺序编号目录节点: 例如znode2_001

    客户端与ZooKeeper断开连接后,该节点依旧存在,这只是ZooKeeper给该节点名称进行顺序编号

    说明: 创建znode时设置顺序表示,znode名称后恢复加一个值,顺序号是一个单调递增的计数器,由父节点维护

    注意: 在分布式中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序

短暂(Ephemeral) : 客户端和服务端断开链接后,创建的节点自己删除
  1. 临时目录节点(无序号): 例如znode3

    客户端与ZooKeeper断开连接后,该节点被删除

  2. 临时顺序编号目录节点: 例如znode4_001

    客户端与ZooKeeper断开连接后,该节点被删除,只是ZooKeeper给该节点名称进行顺序编号

创建节点 create

  1. 创建 持久化目录节点

    create 节点名字 值

    这里因为是非顺序编号目录节点,所以节点名是唯一的,不会去在后边有一个自增编号

    # 创建一个值为null的持久化目录节点hao_da_er
    [zk: zk-3:2181(CONNECTED) 1] create /hao_da_er
    Created /hao_da_er
    
    # 查看节点信息
    [zk: zk-3:2181(CONNECTED) 5] get -s /hao_da_er 
    null
    cZxid = 0x100000003
    ctime = Mon Feb 21 13:36:16 UTC 2022
    mZxid = 0x100000003
    mtime = Mon Feb 21 13:36:16 UTC 2022
    pZxid = 0x100000003
    cversion = 0
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 0
    numChildren = 0
    
    # 再次创建
    [zk: zk-3:2181(CONNECTED) 9] create /hao_da_er "heihei"
    # 这里可以看到显示hao_da_er节点已经存在无法创建了
    Node already exists: /hao_da_er
    
  2. 创建 持久化顺序编号目录节点

    create -s 节点名字 值

    当重复执行语句的时候节点名字会自增,这就是和非顺序编号目录节点的区别

    # 创建持久化顺序编号目录节点
    [zk: zk-3:2181(CONNECTED) 6] create -s /hao_er_er "叫爸爸"
    # 这里我们可以看到创建的并不是我节点名字变成了 hao_er_er0000000001
    Created /hao_er_er0000000001
    
    # 查看节点信息
    [zk: zk-3:2181(CONNECTED) 7] get -s /hao_er_er0000000001 
    叫爸爸
    cZxid = 0x100000004
    ctime = Mon Feb 21 14:56:38 UTC 2022
    mZxid = 0x100000004
    mtime = Mon Feb 21 14:56:38 UTC 2022
    pZxid = 0x100000004
    cversion = 0
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 9
    numChildren = 0
    
    # 再次创建节点
    [zk: zk-3:2181(CONNECTED) 8] create -s /hao_er_er "叫爸爸"
    # 这里我们看到下方的节点编号进行了自增
    Created /hao_er_er0000000002
    
  3. 创建 临时目录节点

    # 创建临时目录节点
    [zk: zk-3:2181(CONNECTED) 12] create -e /xiao_erzi
    Created /xiao_erzi
    
    # 查看
    [zk: zk-3:2181(CONNECTED) 13] get -s /xiao_erzi
    null
    cZxid = 0x10000000e
    ctime = Wed Feb 23 14:41:10 UTC 2022
    mZxid = 0x10000000e
    mtime = Wed Feb 23 14:41:10 UTC 2022
    pZxid = 0x10000000e
    cversion = 0
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x30000fcab630003
    dataLength = 0
    numChildren = 0
    
    # 退出
    [zk: zk-3:2181(CONNECTED) 14] quit
    
    # 重连然后查看
    root@1d9718594b03:/apache-zookeeper-3.7.0-bin/bin# zkCli.sh -server zk-3:2181
    
    [zk: zk-3:2181(CONNECTED) 0] get -s /xiao_erzi
    # 节点无了
    org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /xiao_erzi
    
    
  4. 创建 临时顺序编号目录节点

    # 创建临时顺序编号目录节点
    [zk: zk-3:2181(CONNECTED) 3] create -e -s /xiao_san_er "bobo"
    Created /xiao_san_er0000000003
    [zk: zk-3:2181(CONNECTED) 4] get -s/xiao_san_er
    org.apache.commons.cli.UnrecognizedOptionException: Unrecognized option: -s/xiao_san_er
    [zk: zk-3:2181(CONNECTED) 5] get -s /xiao_san_er
    org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /xiao_san_er
    
    # 获取信息这里我没有断开连接我们可以看到下面产生了编号,同时也可以看到这里的编号是从3开始的说明顺序着上面的1和2
    [zk: zk-3:2181(CONNECTED) 6] get -s /xiao_san_er0000000003 
    bobo
    cZxid = 0x100000008
    ctime = Wed Feb 23 14:00:40 UTC 2022
    mZxid = 0x100000008
    mtime = Wed Feb 23 14:00:40 UTC 2022
    pZxid = 0x100000008
    cversion = 0
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x30000fcab630002
    dataLength = 4
    numChildren = 0
    
    # 这里我又创建了一个4号
    [zk: zk-3:2181(CONNECTED) 7] create -e -s /xiao_san_er "bobo"
    Created /xiao_san_er0000000004
    
    # 退出
    zk: zk-3:2181(CONNECTED) 8] quit
    WATCHER::
    WatchedEvent state:Closed type:None path:null
    2022-02-23 14:34:12,392 [myid:] - INFO  [main:ZooKeeper@1232] - Session: 0x30000fcab630002 closed
    2022-02-23 14:34:12,392 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread@570] - EventThread shut down for session: 0x30000fcab630002
    2022-02-23 14:34:12,396 [myid:] - ERROR [main:ServiceUtils@42] - Exiting JVM with code 0
    
    # 重新连接
    root@1d9718594b03:/apache-zookeeper-3.7.0-bin/bin# zkCli.sh -server zk-3:2181
    
    # 查询
    [zk: zk-3:2181(CONNECTED) 1] get -s /xiao_san_er0000000004
    # 这里看到异常没有节点了
    org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /xiao_san_er0000000004
    [zk: zk-3:2181(CONNECTED) 2] get -s /xiao_san_er0000000003
    org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /xiao_san_er0000000003
    
    # 再次执行创建
    [zk: zk-3:2181(CONNECTED) 7] create -e -s /xiao_san_er "bobo"
    # 这里发现编号已经变成5了,说明是继续增加的
    Created /xiao_san_er0000000005
    

监听器原理

监听原理详解

  1. 首先要有一个main()线程
  2. 在main线程中创建ZooKeeper客户端,这是就会创建两个线程,一个负责网络连接通信(connect),一个负责监听(listener)
  3. 通过connect线程将注册的监听事件发送给ZooKeeper、
  4. 在ZooKeeper的注册监听器列表中将注册的监听事件添加到列表中
  5. listener线程内部调用了process()方法

图解:

常见监听

  1. 监听节点数据的变化

    get path [watch]

  2. 监听子节点增减的变化

    ls path [watch]

具体操作与探究

  1. 节点的值变化监听

    • 创建两次连接,我这里连接的都是同一个集群,然后我要监听的节点是hao_da_er这也是之前创建的节点

      # 容器1
      root@1d9718594b03:/apache-zookeeper-3.7.0-bin# zkCli.sh -server zk-3:2181
      
      # 容器2
      root@f04635a2c8a3:/apache-zookeeper-3.7.0-bin# zkCli.sh -server zk-3:2181
      

      这里两条相同的命令,虽然命令式相同的但是可以从root后面可以看出来这是两个不同的容器但是连接的是一个zk集群,这里前言就是我是用docker运行的ZooKeeper容器

    • 接下来我要在容器1中进行监听,在容器2中进行修改

      # 容器1
      
      # 首先查看确认是否有hao_da_er节点
      [zk: zk-3:2181(CONNECTED) 2] ls -s /
      [hao_da_er, hao_er_er0000000001, hao_er_er0000000002, xiao_erer0000000006, zookeeper]
      cZxid = 0x0
      ctime = Thu Jan 01 00:00:00 UTC 1970
      mZxid = 0x0
      mtime = Thu Jan 01 00:00:00 UTC 1970
      pZxid = 0x10000000f
      cversion = 11
      dataVersion = 0
      aclVersion = 0
      ephemeralOwner = 0x0
      dataLength = 0
      numChildren = 5
      # 对hao_da_er节点进行监听
      [zk: zk-3:2181(CONNECTED) 3] get -w /hao_da_er
      null
      
      # 容器2
      # 直接对hao_da_er节点值进行修改
      [zk: zk-3:2181(CONNECTED) 1] set /hao_da_er "wobianle" 
      
    • 这时候回到容器1的shell界面我们可以实时看到

      # 容器1
      # 这里就会监听到节点值被修改了
      [zk: zk-3:2181(CONNECTED) 4] 
      WATCHER::
      
      WatchedEvent state:SyncConnected type:NodeDataChanged path:/hao_da_er
      
    • 这里我们尝试容器1不重新注册监听然后容器2再一次修改节点值

      # 容器2
      # 直接对hao_da_er节点值再次进行修改
      [zk: zk-3:2181(CONNECTED) 2] set /hao_da_er "wobianle" 
      
    • 这里我们会发现容器1的客户端没有任何的反应

    注意⚠️:

    注册一次,只能监听一次,想再次监听,需要再次注册.也就是说一次注册,当数据发生过一次改变也就是监听有效一次的时候那么这次注册也就消失了

  2. 节点的子节点变化监听(路径变化)

    • 这里我们依旧使用容器1进行监听hao_da_er节点的子节点变化,同时依旧使用容器2来对hao_da_er节点的子节点进行修改
    # 容器1
    # 监听hao_da_er节点
    [zk: zk-3:2181(CONNECTED) 4] ls -w /hao_da_er 
    []
    
    # 容器2
    # 创建子节点/hao_da_sun
    [zk: zk-3:2181(CONNECTED) 3] create /hao_da_er/hao_da_sun
    Created /hao_da_er/hao_da_sun
    
    • 我们回到容器一种可以看到

      [zk: zk-3:2181(CONNECTED) 5] 
      WATCHER::
      
      WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/hao_da_er
      

    这里需要注意⚠️的是对于子节点变化的监听也是一次注册一次监听,无法多次监听

节点删除和查看

删除节点

delete 节点

例子

# 首先查看一下所有节点
[zk: zk-3:2181(CONNECTED) 5] ls -s /
[hao_da_er, hao_er_er0000000001, hao_er_er0000000002, xiao_erer0000000006, zookeeper]
cZxid = 0x0
ctime = Thu Jan 01 00:00:00 UTC 1970
mZxid = 0x0
mtime = Thu Jan 01 00:00:00 UTC 1970
pZxid = 0x10000000f
cversion = 11
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 5

# 这里要删除节点/hao_er_er0000000001
[zk: zk-3:2181(CONNECTED) 6] delete /hao_er_er0000000001

# 再次查看发现已经删除成功了
[zk: zk-3:2181(CONNECTED) 8] ls -s /
[hao_da_er, hao_er_er0000000002, xiao_erer0000000006, zookeeper]
cZxid = 0x0
ctime = Thu Jan 01 00:00:00 UTC 1970
mZxid = 0x0
mtime = Thu Jan 01 00:00:00 UTC 1970
pZxid = 0x100000016
cversion = 12
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 4

递归删除节点

deleteall 节点

例子

# 首先查看节点
[zk: zk-3:2181(CONNECTED) 14] ls -s /hao_da_er 
[hao_da_sun, hao_da_sun2] #两个子节点名(没有的话可以自己创建两个)
cZxid = 0x100000003
ctime = Mon Feb 21 13:36:16 UTC 2022
mZxid = 0x100000014
mtime = Thu Feb 24 14:53:56 UTC 2022
pZxid = 0x100000017
cversion = 2
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 2 # 这里说明有两个子节点

# 递归删除节点/hao_da_er/hao_da_sun2
[zk: zk-3:2181(CONNECTED) 17] deleteall /hao_da_er/hao_da_sun2

# 查看hao_da_er子节点
[zk: zk-3:2181(CONNECTED) 18] ls -s /hao_da_er 
[hao_da_sun]
cZxid = 0x100000003
ctime = Mon Feb 21 13:36:16 UTC 2022
mZxid = 0x100000014
mtime = Thu Feb 24 14:53:56 UTC 2022
pZxid = 0x100000018
cversion = 3
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 1

# 接着递归删除节点/hao_da_er/hao_da_sun
[zk: zk-3:2181(CONNECTED) 17] deleteall 

# 查看hao_da_er子节点
[zk: zk-3:2181(CONNECTED) 19] deleteall /hao_da_er/hao_da_sun
[zk: zk-3:2181(CONNECTED) 20] ls -s /hao_da_er 
[]
cZxid = 0x100000003
ctime = Mon Feb 21 13:36:16 UTC 2022
mZxid = 0x100000014
mtime = Thu Feb 24 14:53:56 UTC 2022
pZxid = 0x100000019
cversion = 4
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 0

查看节点状态

stat 节点

例子

# 查看hao_da_er节点状态
[zk: zk-3:2181(CONNECTED) 21] stat /hao_da_er 
cZxid = 0x100000003
ctime = Mon Feb 21 13:36:16 UTC 2022
mZxid = 0x100000014
mtime = Thu Feb 24 14:53:56 UTC 2022
pZxid = 0x100000019
cversion = 4
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 0

其他ZooKeeper文章

ZooKeeper学习笔记(一): ZooKeeper是什么能用来做什么
ZooKeeper学习笔记(二): Zookeeper的安装与启动(Docker)
ZooKeeper学习笔记(三): Zookeeper的五大参数解读
ZooKeeper学习笔记(四): Docker搭建ZooKeeper集群(这里是三个,具体可以修改对应参数)脚本
ZooKeeper学习笔记(五): ZooKeeper集群选举机制
ZooKeeper学习笔记(六): 客户端命令行操作
ZooKeeper学习笔记(七):ZooKeeper依赖-API方法
ZooKeeper学习笔记(八):服务器动态上下线原理

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

社畜阿藏405

挣点钱不丢人吧?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值