Zookeeper命令操作实践篇,包含创建节点,节点权限设置

本文讲解了zk的节点类型、zk的常用命令包含acl权限方面的。

Zookeeper节点类型

Zookeeper命令操作实践篇,包含创建节点,节点权限设置

1、Znode 有两种类型:

临时(ephemeral)(create -e /app1/test1 “test1” 客户端断开连接, zk 将删除 ephemeral 类型节点)

持久(persistent) (create -s /app1/test2 “test2” 客户端断开连接 zk 不删除 persistent 类型节点)

2、Znode 有四种形式的目录节点(默认是 persistent )

PERSISTENT持久、PERSISTENT_SEQUENTIAL(持久序列/test20000000001 )、EPHEMERAL临时、EPHEMERAL_SEQUENTIAL临时序列

3、创建 znode 时设置顺序标识,znode 名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护

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

Zookeeper命令操作实践篇,包含创建节点,节点权限设置

创建节点命令

注:app1节点必须是持久节点,临时节点无法创建子节点,临时节点创建子节点会报:<strong>Ephemerals cannot have children: /app1/test1


Zookeeper 节点状态属性

Zookeeper命令操作实践篇,包含创建节点,节点权限设置

Zookeeper命令操作实践篇,包含创建节点,节点权限设置

服务端常用命令

启动 ZK 服务: sh bin/zkServer.sh start

查看 ZK 服务状态: sh bin/zkServer.sh status

停止 ZK 服务: sh bin/zkServer.sh stop

重启 ZK 服务: sh bin/zkServer.sh restar

客户端常用命令

使用 zkCli.sh -server 127.0.0.1:2181 连接到 ZooKeeper 服务,连接成功后,系统会输出 ZooKeeper 的相关环境以及配置信息。 命令行工具的一些简单操作如下:

 显示根目录下、文件: ls / 使用 ls 命令来查看当前 ZooKeeper 中所包含的内容

 显示根目录下、文件: ls2 / 查看当前节点数据并能看到更新次数等数据

 创建文件,并设置初始内容: create /zk "test" 创建一个新的 znode 节点“ zk ”以及与它关联的字符串 [-e] [-s] 【-e 临时节点】 【-s 顺序节点】

 获取文件内容:get /zk 确认 znode 是否包含我们所创建的字符串 [watch] 【watch 监听】

 修改文件内容: set /zk "zkbak" 对 zk 所关联的字符串进行设置

 删除文件: delete /zk 将刚才创建的 znode 删除,如果存在子节点删除失败

 递归删除:rmr /zk 或者 deleteall /zk将刚才创建的 znode 删除,子节点同时删除,推荐使用deleteall

 退出客户端: quit

 帮助命令: help


Zookeeper命令操作实践篇,包含创建节点,节点权限设置

Zookeeper命令操作实践篇,包含创建节点,节点权限设置

help命令


ACL保障数据的安全(先了解本篇不做重点讲)

ACL 机制,表示为 scheme:id:permissions,第一个字段表示采用哪一种机制,第二个 id 表示用户,permissions 表示相关权限(如只读,读写,管理等)。

zookeeper 提供了如下几种机制(scheme):

world: 它下面只有一个 id, 叫 anyone, world:anyone 代表任何人,zookeeper 中对所有人有权限的结点就是属于 world:anyone 的

auth: 它不需要 id, 只要是通过 authentication 的 user 都有权限(zookeeper 支持通过 kerberos来进行 authencation, 也支持 username/password 形式的 authentication)

digest: 它对应的 id 为 username:BASE64(SHA1(password)),它需要先通过 username:password形式的 authentication

ip: 它对应的 id 为客户机的 IP 地址,设置的时候可以设置一个 ip 段,比如 ip:192.168.1.0/16,表示匹配前 16 个 bit 的 IP 段

ID是验证模式:

id 是验证模式,不同的 scheme,id 的值也不一样。

scheme 为 auth 时:username:password

scheme 为 digest 时:username:BASE64(SHA1(password))

scheme 为 ip 时:客户端的 ip 地址。

scheme 为 world 时anyone。

Permission:

CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、删、改、查、管理权限,这 5 种权限简写为 crwda(即:每个单词的首字符缩写)

CREATE(c):创建子节点的权限

DELETE(d):删除节点的权限

READ(r):读取节点数据的权限

WRITE(w):修改节点数据的权限

ADMIN(a):设置子节点权限的权限

ACL 命令

getAcl /app1/testAcl 获取节点acl权限信息

setAcl /app1/testAcl world:anyone:crwa # 设置该节点的 acl 权限

getAcl /app1/testAcl # 获取该节点的 acl 权限信息,成功后,该节点就少了 d 权限

create /app1/testAcl/xyz xyz-data # 创建子节点

delete /app1/testAcl/xyz # 由于没有 d 权限,所以提示无法删除

addauth digest user1:123456 # 需要先添加一个用户

setAcl /app1/testAcl auth:user1:123456:crwa # 然后才可以拿着这个用户去设置权限

getAcl /app1/testAcl # 密码是以密文的形式存储的

create /app1/testAcl/testa aaa

delete /app1/testAcl/testa # 由于没有 d 权限,所以提示无法删除

退出客户端后:

ls /app1/testAcl #没有权限无法访问

create /app1/testAcl/testb bbb #没有权限无法访问

addauth digest user1:123456 # 重新新增权限后可以访问了

auth 与 digest 的区别就是,前者使用明文密码进行登录,后者使用密文密码进行登录

create /app1/testDigest data

addauth digest user1:123456

setAcl /app1/testDigest digest:user1:HYGa7IZRm2PUBFiFFu8xY2pPP/s=:crwa # 使用 digest来设置权限

注意:这里如果使用明文,会导致该 znode 不可访问

通过明文获得密文

shell>

java -Djava.ext.dirs=/soft/zookeeper-3.4.12/lib -cp /soft/zookeeper-3.4.12/zookeeper-3.4.12.jar

org.apache.zookeeper.server.auth.DigestAuthenticationProvider deer:123456

deer:123456->deer:ACFm5rWnnKn9K9RN/Oc8qEYGYDs=


create /app1/testIp data

setAcl /app1/testIp ip:192.168.30.10:cdrwa

getAcl /app1/testIp


Zookeeper命令操作实践篇,包含创建节点,节点权限设置


分享到:


相關文章: