zk-04-zookeeper客户端操作

1、zkCli客户端操作

1.1 连接服务器

通过 sh zkCli.sh 命令连接 zookeeper 客户端服务器。
当出现 WatchedEvent state:SyncConnected type:None path:null 表示成功连接上了zookeeper服务器

[root@k8smaster bin]# pwd
/opt/zookeeper-3.5.5/bin
[root@k8smaster bin]# sh zkCli.sh
...
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] 

上面默认是连接本地的2181端口的zookeeper服务器,如果希望连接指定的 zookeeper 服务器,可以通过如下方式实现:
sh zkCli.sh -server ip:port

1.2 创建节点 create

create [-s] [-e] path [data] [acl]

其中,-s表示顺序节点,-e表示临时节点,acl访问控制列表。默认情况下,即不添加-s 或- e 参数的,创建的是持久节点。

[zk: localhost:2181(CONNECTED) 0] create /firstNode 123
Created /firstNode
[zk: localhost:2181(CONNECTED) 1] 

执行完上面的命令,就在 zookeeper 的根节点下创建了一个叫作 /firstNode 的节点,并且节点的数据内容是“123”。另外,create 命令的最后一个参数是acl ,它是用来进行权限控制的,缺省情况下,不做任何权限控制。

1.3 读取子节点 ls

使用 ls 命令,可以列出ZooKeeper指定节点下的所有子节点。当然,这个命令只能看到指定节点下第一级的所有子节点。
ls [-s] [-w] [-R] path
-s表示获取节点信息,包括时间戳、版本号、数据大小等信息。
-w 设置 Watch监听器
-R 递归显示
path 表示的是指定数据节点的节点路径。
执行如下命令:

[zk: localhost:2181(CONNECTED) 1] ls /
[firstNode, zookeeper]
[zk: localhost:2181(CONNECTED) 2] 

第一次部署的 ZooKeeper 集群,默认在根节点“/”下面有一个叫作 /zookeeper 的保留节点。

1.4 读取数据内容 get

get [-s] [-w] path

-s表示获取节点信息,包括时间戳、版本号、数据大小等信息。
-w 设置 Watch监听器

读取 /firstNode 的数据内容,-s表示获取节点信息,可以看到数据版本 dataVersion 为0。

[zk: localhost:2181(CONNECTED) 3] get /firstNode
123
[zk: localhost:2181(CONNECTED) 4] get -s /firstNode
123
cZxid = 0x60000000c
ctime = Mon Dec 21 15:11:06 CST 2020
mZxid = 0x60000000c
mtime = Mon Dec 21 15:11:06 CST 2020
pZxid = 0x60000000c
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
[zk: localhost:2181(CONNECTED) 5] 

1.5 更新 set

set [-s] [-v version] path data
-s表示节点为顺序节点,-v 指定版本号,data 就是要更新的新内容。
在 zookeeper 中 ,节点的数据是有版本概念的,这个参数用于指定本次更新操作是基于 ZNode 的哪一个数据版本进行的。

设置 /firstNode 节点数据 456,再次通过 get -s 查看节点信息,看到数据内容由 123 变成了 456,数据版本 dataVersion 为1。

[zk: localhost:2181(CONNECTED) 5] set /firstNode 456
[zk: localhost:2181(CONNECTED) 6] get -s /firstNode
456
cZxid = 0x60000000c
ctime = Mon Dec 21 15:11:06 CST 2020
mZxid = 0x60000000f
mtime = Mon Dec 21 15:20:08 CST 2020
pZxid = 0x60000000c
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
[zk: localhost:2181(CONNECTED) 7] 

1.6 获取节点的访问控制列表 getAcl

getAcl [-s] [-w] path

-s表示获取节点信息,包括时间戳、版本号、数据大小等信息。
-w 设置 Watch监听器

[zk: localhost:2181(CONNECTED) 11] getAcl /firstNode
'world,'anyone
: cdrwa
[zk: localhost:2181(CONNECTED) 12] getAcl -s /firstNode
'world,'anyone
: cdrwa
cZxid = 0x60000000c
ctime = Mon Dec 21 15:11:06 CST 2020
mZxid = 0x60000000f
mtime = Mon Dec 21 15:20:08 CST 2020
pZxid = 0x60000000c
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
[zk: localhost:2181(CONNECTED) 13] 

上面 : cdrwa 表示权限控制列表

  • c(CREATE) : 创建子节点的权限。
  • r(READ) : 获取节点数据和子节点列表的权限。
  • w(WRITE) : 更新节点数据的权限。
  • d(DELETE) : 删除子节点的权限。
  • a(ADMIN) : 设置节点 ACL 的权限。

1.7 设置节点的访问控制列表 setAcl

setAcl [-s] [-v version] [-R] path acl

-s表述顺序节点,-v指定版本号,-R递归设置,acl权限列表。

1.8 删除节点 delete

delete [-v version] path

删除某一节点,只能删除无子节点的节点。-v 表示节点版本号

[zk: localhost:2181(CONNECTED) 40] create /firstNode1/nodeB cde
Created /firstNode1/nodeB
[zk: localhost:2181(CONNECTED) 41] create /firstNode1/nodeC fgh
Created /firstNode1/nodeC
[zk: localhost:2181(CONNECTED) 42] ls -R /firstNode1
/firstNode1
/firstNode1/nodeA
/firstNode1/nodeB
/firstNode1/nodeC
[zk: localhost:2181(CONNECTED) 43] 

删除 /firstNode1/nodeC

[zk: localhost:2181(CONNECTED) 43] delete /firstNode1/nodeC
[zk: localhost:2181(CONNECTED) 44] ls -R /firstNode1
/firstNode1
/firstNode1/nodeA
/firstNode1/nodeB
[zk: localhost:2181(CONNECTED) 45] 

1.9 删除所有 deleteall

deleteall path
递归的删除某一节点及其子节点

删除 /firstNode1 及其子节点

[zk: localhost:2181(CONNECTED) 47] ls -R /firstNode1
/firstNode1
/firstNode1/nodeA
/firstNode1/nodeB
[zk: localhost:2181(CONNECTED) 48] deleteall /firstNode1
[zk: localhost:2181(CONNECTED) 49] ls -R /firstNode1
Node does not exist: /firstNode1
[zk: localhost:2181(CONNECTED) 50] 

2、Java客户端API使用

引入 zookeeper Java客户端maven依赖

			<dependency>
				<groupId>org.apache.zookeeper</groupId>
				<artifactId>zookeeper</artifactId>
				<version>3.5.5</version>
			</dependency>

2.1 创建会话

通过创建ZooKeeper实例连接 zookeeper 服务器。

ZooKeeper的4种构造器源码


    public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher) throws IOException {
        this(connectString, sessionTimeout, watcher, false);
    }

    public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, ZKClientConfig conf) throws IOException {
        this(connectString, sessionTimeout, watcher, false, conf);
    }

    public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, boolean canBeReadOnly, HostProvider aHostProvider) throws IOException {
        this(connectString, sessionTimeout, watcher, canBeReadOnly, aHostProvider, (ZKClientConfig)null);
    }

    public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, boolean canBeReadOnly, HostProvider aHostProvider, ZKClientConfig clientConfig) throws IOException {
...
    }

参数说明

  • connectString:指 ZooKeeper 服务器列表,由英文状态逗号分开的 host:port 字符串组成。

  • sessionTimeout:指会话的超时时间,是一个以“毫秒”为单位的整型值。

  • watcher:ZooKeeper允许客户端在构造方法中传入一个接口 Watcher 的实现类对象来作为默认的W atcher事件通知处理器。当然,该参数可以设置为 null 以表明不需要设置默认的 Watcher 处理器。

  • canBeReadOnly:这是一个boolean类型的参数,用于标识当前会话是否支持“read-only (只读) ” 模式。默认情况下,在ZooK eeper集群中,一个机器如果和集群中过半及以上机器失去了网络连接,

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值