• 【Zookeeper客户端常用的命令&&Zookeeper的核心功能之节点数据存储】


    【Zookeeper客户端常用的命令】

    知识回顾:
    之前我们学习了【Docker安装部署Zookeeper集群】,以及关于zookeeper的一些面试常考的点(需要学习的请请点击这里看专栏呦),接下我们来学习一下zookeeper客户端常用的命令。

    客户端命令操作

    接下来的操作都是基于之前的文章docker部署zookeeper集群完成后的操作,需要通过docker启动我们对应的集群,然后继续接下来的操作,如果有问题,可以先看一下之前的文章。然后继续下面的操作。。。。

    【Docker安装部署Zookeeper集群】

    docker命令进入我们的zookeeper集群的容器内部
    docker exec -it zookeeper-master /bin/bash
    
    docker exec -it zookeeper-node1 /bin/bash
    
    docker exec -it zookeeper-node2 /bin/bash
    
    • 1
    • 2
    • 3
    • 4
    • 5
    分别进入我们每一个容器中的bin目录
    cd bin
    ls 
    
    • 1
    • 2

    在这里插入图片描述

    启动我们的客户端
    如果想要连接当前节点上的zookeeper服务器
    zkCli.sh
    
    • 1
    如果想要连接其他节点上的服务器上的zookeeper服务器
    zkCli.sh -timeout 5000 -server zookeeper-node1/zookeeper-node2/zookeeper-master(选择要连接的服务器就可以啦)
    
    • 1

    参数说明:
    -timeout 连接超时时长
    -server 需要连接的服务器地址默认端口是2181,可以省略

    客户端成功连接我们指定要连接的zookeeper服务器,接下来我们就要通过客户端的命令通过节点来将我们的数据进行存储。好的,再学习下面的操作之前,我们首先先来学习一下存储数据的节点。

    节点存储数据操作

    zookeeper节点数据存储结构
    1. 层次化的目录结构,命名符合常规文件系统规范
    2. 每个节点在zookeeper中叫做znode,并且有一个唯一的路径标识
    3. 节点znode可以包含数据和子节点(但是EPHEMERAL类型的节点不能有子节点)
    4. 客户端应用可以在节点上设置监听器
      在这里插入图片描述
    说来就来,让我们学习一下zookeeper的二类四种节点
     1. PERSISTENT :持久化节点 ,节点创建后会被持久化,只有主动调用delete方法的时候才可以删除节点。
     2. PERSISTENT_SEQUENTIAL:持久化序列号持久化节点, 排序节点:创建的节点名称后自动添加序号,如节点名称为"node-",自动添加为"node-1",顺序添加为"node-2"
     3. EPHEMERAL:临时节点, 临时节点:节点创建后在创建者超时连接或失去连接的时候,节点会被删除。客户端session超时这类节点就会被自动删除。临时节点下不能存在子节点。
     4. EPHEMERAL_SEQUENTIAL:临时排序节点, 排序节点:创建的节点名称后自动添加序号,如节点名称为"node-",自动添加为"node-1",顺序添加为"node-2"
    
    • 1
    • 2
    • 3
    • 4
    查看一下客户端操作的具体命令
    查看命令
    [zk: localhost:2181(CONNECTED) 7] 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
    	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 found help
    [zk: localhost:2181(CONNECTED) 8] 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    解释说明
    命令说明解释说明
    connect在连接服务器的情况连接到其他节点上去
    close关闭和服务器的连接
    ls用于获取某个节点下的节点信息
    create用于创建节点,其中-s为顺序节点,-e临时节点
    delete只能删除没有子节点的节点
    deleteall可以删除有子节点的节点
    get用户获取节点信息
    stat查看节点的状态
    set设置节点的数据
    listquotalistquota命令用于显示配额,zookeeper的quota并没有实际的限制作用,超出了也只是打印WARN级别日志
    setquotasetquota命令用于设置节点个数以及数据长度的配额
    delquota用于删除配额,-n为子节点个数,-b为节点数据长度,如:delquota –n 2
    history用于列出最近的命令历史,可以和redo配合使用
    redo命令用于再次执行某个命令
    addauth用于节点认证,使用方式:如addauth digest username:password
    setAclsetAcl命令用于设置节点AclAcl由三部分构成:1为scheme,2为user,3为permission,一般情况下表示为scheme: id :permissions
    getAcl获取节点的Acl,如getAcl /node1
    sync用于强制同步,由于请求在半数以上的zk server上生效就表示此请求生效,那么就会有一些zk server上的数据是旧的。sync命令就是强制同步所有的更新操作
    printwatchers用于设置和显示监视状态,值为on或则off
    quit退出客户端
    对常用的命令做一下实践
    ls命令:是用来查看某个节点下的子节点信息,zookeeper的根节点是’/’,在初始的时候’/'下是没有任何子节点的
    [zk: localhost:2181(CONNECTED) 9] ls /
    [node1, node2, node3, zookeeper]
    [zk: localhost:2181(CONNECTED) 10] 
    
    
    • 1
    • 2
    • 3
    • 4
    get命令:查看节点的信息 -s 查看节点的详细信息
    [zk: localhost:2181(CONNECTED) 10] get /
    
    [zk: localhost:2181(CONNECTED) 11] get 
    get [-s] [-w] path
    [zk: localhost:2181(CONNECTED) 12] get /node1
    hellozk
    [zk: localhost:2181(CONNECTED) 13] get -s /node1
    hellozk
    cZxid = 0x100000002
    ctime = Wed Oct 19 02:30:20 UTC 2022
    mZxid = 0x100000003
    mtime = Wed Oct 19 02:33:01 UTC 2022
    pZxid = 0x100000006
    cversion = 2
    dataVersion = 1
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 7
    numChildren = 2
    [zk: localhost:2181(CONNECTED) 14] 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    节点中详细信息的说明:

    节点中信息解释说明
    cZxidZnode创建的事务id
    ctime节点创建时间
    mZxidZnode被修改的事务id,即每次对znode的修改都会更新mZxid
    mtime节点最近一次更新的时间
    pZxid是与该节点的子节点(或该节点)的最近一次 创建 / 删除 的时间戳对应
    cversion子节点数据更新次数
    dataVersion本节点数据更新次数
    aclVersion节点ACL(授权信息)的更新次数
    ephemeralOwner如果该节点为临时节点,ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是临时节点,ephemeralOwner值为0
    dataLength节点数据长度
    numChildren子节点个数
    create命令:用户创建znode节点
    create [-s] [-e] path data acl
    
    • 1

    参数配置:

    create命令参数配置解释说明
    -s有序
    -e短暂
    path节点路径及名称
    data节点保存的数据
    acl节点的权限

    创建永久节点

    [zk: zookeeper-node1(CONNECTED) 63] create /node4/per1 p1
    Node does not exist: /node4/per1
    [zk: zookeeper-node1(CONNECTED) 64] create /node4
    Created /node4
    [zk: zookeeper-node1(CONNECTED) 65] create /node4/per p1
    Created /node4/per
    [zk: zookeeper-node1(CONNECTED) 66] get /node4/per
    p1
    [zk: zookeeper-node1(CONNECTED) 67] get /node4
    null
    [zk: zookeeper-node1(CONNECTED) 68] get -s  /node/per 
    org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /node/per
    [zk: zookeeper-node1(CONNECTED) 69] get /node/per
    org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /node/per
    [zk: zookeeper-node1(CONNECTED) 70] get -s /node4/per
    p1
    cZxid = 0x10000001f
    ctime = Wed Oct 19 04:03:31 UTC 2022
    mZxid = 0x10000001f
    mtime = Wed Oct 19 04:03:31 UTC 2022
    pZxid = 0x10000001f
    cversion = 0
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 2
    numChildren = 0
    [zk: zookeeper-node1(CONNECTED) 71] 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    创建永久序列节点

    [zk: zookeeper-node1(CONNECTED) 74] create /node5 
    Created /node5
    [zk: zookeeper-node1(CONNECTED) 75] create /node5/s1 s1
    Created /node5/s1
    [zk: zookeeper-node1(CONNECTED) 76] create -s /node5/s2 s2
    Created /node5/s20000000001
    [zk: zookeeper-node1(CONNECTED) 77] create -s /node5/s3 s3
    Created /node5/s30000000002
    [zk: zookeeper-node1(CONNECTED) 78] get -s /node5/s2
    org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /node5/s2
    [zk: zookeeper-node1(CONNECTED) 79] get /node5
    null
    [zk: zookeeper-node1(CONNECTED) 80] get /node5/s2
    org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /node5/s2
    [zk: zookeeper-node1(CONNECTED) 81] ls node5
    Path must start with / character
    [zk: zookeeper-node1(CONNECTED) 82] ls /node5
    [s1, s20000000001, s30000000002]
    [zk: zookeeper-node1(CONNECTED) 83] get /node5/s20000000001
    s2
    [zk: zookeeper-node1(CONNECTED) 84] get -s  /node5/s20000000001
    s2
    cZxid = 0x100000025
    ctime = Wed Oct 19 04:07:16 UTC 2022
    mZxid = 0x100000025
    mtime = Wed Oct 19 04:07:16 UTC 2022
    pZxid = 0x100000025
    cversion = 0
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 2
    numChildren = 0
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    永久节点注意事项:永久节点即使我们断开连接后再次连接后也不会消失

    创建临时节点

    [zk: zookeeper-node1(CONNECTED) 85] create /node6
    Created /node6
    [zk: zookeeper-node1(CONNECTED) 86] create -e /node6/node6 6
    Created /node6/node6
    [zk: zookeeper-node1(CONNECTED) 87] get /node6/node6
    6
    [zk: zookeeper-node1(CONNECTED) 88] 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    创建临时序列节点

    [zk: zookeeper-node1(CONNECTED) 88] create /node7
    Created /node7
    [zk: zookeeper-node1(CONNECTED) 89] create -s -e /node7/node7 7
    Created /node7/node70000000000
    [zk: zookeeper-node1(CONNECTED) 90] get /node7/node70000000000
    7
    [zk: zookeeper-node1(CONNECTED) 91] 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    临时节点注意事项:短暂节点不能创建子节点/创建短暂节点的客户端断开连接后数据会被自动删除

    短暂节点不能创建子节点
    [zk: zookeeper-node1(CONNECTED) 91] create /node7/node7/node
    Node does not exist: /node7/node7/node
    [zk: zookeeper-node1(CONNECTED) 92] 
    
    
    • 1
    • 2
    • 3
    • 4
    创建短暂节点的客户端断开连接后数据会被自动删除
    客户端连接之前:
    [zk: zookeeper-node1(CONNECTED) 89] create -s -e /node7/node7 7
    Created /node7/node70000000000
    [zk: zookeeper-node1(CONNECTED) 90] get /node7/node70000000000
    7
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    客户端连接之后:
    [zk: zookeeper-node1(CONNECTED) 94] ls /
    [node1, node2, node3, node4, node5, node6, node7, zookeeper]
    [zk: zookeeper-node1(CONNECTED) 95] ls /node7
    []
    [zk: zookeeper-node1(CONNECTED) 96] 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    set命令:用来修改节点存储的信息
    [zk: zookeeper-node1(CONNECTED) 97] ls /
    [node1, node2, node3, node4, node5, node6, node7, zookeeper]
    [zk: zookeeper-node1(CONNECTED) 98] get /node1
    hellozk
    [zk: zookeeper-node1(CONNECTED) 99] set /node1 zk
    [zk: zookeeper-node1(CONNECTED) 100] get /node1
    zk
    [zk: zookeeper-node1(CONNECTED) 101] 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    delete命令:用来删除节点,但是不能删除非空的节点
    [zk: zookeeper-node1(CONNECTED) 102] delete /node7
    [zk: zookeeper-node1(CONNECTED) 103] ls /
    [node1, node2, node3, node4, node5, node6, zookeeper]
    [zk: zookeeper-node1(CONNECTED) 104] 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    deteleall命令:也是用来删除节点的,而且deteleall命令可以删除非空的节点
    [zk: zookeeper-node1(CONNECTED) 112] deleteall /node5
    [zk: zookeeper-node1(CONNECTED) 113] ls /
    [node1, node2, node3, node4, zookeeper]
    [zk: zookeeper-node1(CONNECTED) 114] 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    stat命令:命令查看节点的状态信息
    [zk: zookeeper-node1(CONNECTED) 114] stat /node3
    cZxid = 0x10000000b
    ctime = Wed Oct 19 02:39:30 UTC 2022
    mZxid = 0x10000000b
    mtime = Wed Oct 19 02:39:30 UTC 2022
    pZxid = 0x10000000d
    cversion = 2
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 0
    numChildren = 2
    [zk: zookeeper-node1(CONNECTED) 115] 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    close命令:关闭和服务器的连接

    在这里插入图片描述

    connect:再次连接服务器

    在这里插入图片描述

    quit命令:退出客户端连接

    在这里插入图片描述

    好了,到这里,zookeeper核心功能之数据存储已经学习完成了,还有另外一个核心功能就是监控–watch,下面文章我们将来学习zookeeper的另外一个核心功能之监控。

  • 相关阅读:
    版本控制工具Git集成IDEA的学习笔记(第三篇Git私服)
    redis下载与安装(Linux环境下)
    10、内网安全-横向移动&域控提权&NetLogon&ADCS&PAC&KDC&永恒之蓝
    C语言之文件的使用(下)
    如何抓取AJAX请求
    通过Go实现AES加密和解密工具
    数据分发服务DDS
    Code For Better 谷歌开发者之声——开发者必备神器
    数字化安全方案建设
    使用 Amazon Bedrock 和 RAG 构建 Text2SQL 行业数据查询助手
  • 原文地址:https://blog.csdn.net/Coder_ljw/article/details/127403818