zookeeper入门

Zookeeper入门

使用docker安装zk,单机模式运行

zk3.6.1

zk

zkCli.sh

在docker下使用zkCli.sh进入容器.

docker exec -it zk01 zkCli.sh

create、get

创建节点和获取节点数据

#创建一个持久节点/hi,数据为hello world
[zk: localhost:2181(CONNECTED) 15] create /hi "hello world"
Created /hi

#获取节点数据
[zk: localhost:2181(CONNECTED) 16] get /hi
hello world

#创建顺序节点-s,参数为-e则是临时节点,会话结束后节点被销毁
[zk: localhost:2181(CONNECTED) 34] create -s /hi/name "Jim"
Created /hi/name0000000002 #生成带序号的节点名
#这个特性,我们可以利用一下,生成在分布式环境下的主键生成器
#通过节点名获取数据
[zk: localhost:2181(CONNECTED) 37] get /hi/name0000000002
Jim

#非节点名
[zk: localhost:2181(CONNECTED) 35] get /hi/name
org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /hi/name
[zk: localhost:2181(CONNECTED) 36] get /hi/name2
org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /hi/name2


ls、stat

返回下面的节点信息

#ls只返回节点,节点数据使用get获取
[zk: localhost:2181(CONNECTED) 10] ls /
[home, zookeeper]
[zk: localhost:2181(CONNECTED) 11] ls /home
[a, b]
[zk: localhost:2181(CONNECTED) 12] ls /home/a
[]

#返回节点详细信息、等同stat
[zk: localhost:2181(CONNECTED) 17] ls -s /
[hi, home, zookeeper]
cZxid = 0x0 #事务id,下同
ctime = Thu Jan 01 00:00:00 UTC 1970 #节点创建时间
mZxid = 0x0
mtime = Thu Jan 01 00:00:00 UTC 1970 #节点最后一次修改时间
pZxid = 0x9
cversion = 1  #子节点版本
dataVersion = 0  #数据版本
aclVersion = 0 #权限版本
ephemeralOwner = 0x0  #此处代表持久节点
dataLength = 0
numChildren = 3 #子节点数量

set

#修改节点信息
[zk: localhost:2181(CONNECTED) 7] set /home/a hello
[zk: localhost:2181(CONNECTED) 8] get /home/a
hello

delete、deleteall

#delete删除节点、不能删除非空节点(母亲节点)
[zk: localhost:2181(CONNECTED) 33] delete /hi/name

#deleteall删除所有节点(递归删除)
[zk: localhost:2181(CONNECTED) 48] deleteall /home
[zk: localhost:2181(CONNECTED) 50] ls /
[hi, ok, zookeeper]


acl权限

ACL 权限控制,使用:schema🆔permission 来标识,主要涵盖 3 个方面:

  1. 权限模式(Schema):鉴权的策略
  2. 授权对象(ID)
  3. 权限(Permission)

其特性如下:

  1. ZooKeeper的权限控制是基于每个znode节点的,需要对每个节点设置权限
  2. 每个znode支持设置多种权限控制方案和多个权限
  3. 子节点不会继承父节点的权限,客户端无权访问某节点,但可能可以访问它的子节点

1、schema:

ZooKeeper内置了一些权限控制方案,可以用以下方案为每个节点设置权限:

方案 描述
world 只有一个用户:anyone,代表所有人(默认)
ip 使用IP地址认证
auth 使用已添加认证的用户认证
digest 使用“用户名:密码”方式认证

2、id:

授权对象ID是指,权限赋予的用户或者一个实体,例如:IP 地址或者机器。授权模式 schema 与 授权对象 ID 之间关系:

img

3、权限permission:

权限 ACL简写 描述
CREATE c 可以创建子节点
DELETE d 可以删除子节点(仅下一级节点)
READ r 可以读取节点数据及显示子节点列表
WRITE w 可以设置节点数据
ADMIN a 可以设置节点访问控制列表权限

二、权限相关命令:

命令 使用方式 描述
getAcl getAcl 读取ACL权限
setAcl setAcl 设置ACL权限
addauth addauth 添加认证用户
[zk: localhost:2181(CONNECTED) 0] create /node2 1
Created /node2

[zk: localhost:2181(CONNECTED) 1] setAcl /node2 ip:192.168.100.1:cdrwa #设置IP:192.168.100.1 拥有所有权限

全部客户端命令

	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] 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 val path
	stat [-w] path
	sync path
	version 

  • 服务注册与订阅(共用节点)
  • 分布式通知(监听znode)
  • 服务命名(znode特性)
  • 数据订阅、发布(watcher)
  • 分布式锁(临时节点)

Java客户端工具

zkClient、curator、zookeeper

<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-framework</artifactId>
    <version>5.1.0</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes -->
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>5.1.0</version>
</dependency>


<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-client -->
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-client</artifactId>
    <version>5.1.0</version>
</dependency>



<!--原生客户端工具,curator客户端中也包括该工具 -->
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.6.1</version>
</dependency>

posted @ 2020-10-15 15:27  cgl_dong  阅读(101)  评论(0编辑  收藏  举报