文章目录
- 前言
- 一、zk节点和节点类型
- 节点类型
- 二、常用命令
- 1.客户端连接
- 2.常用命令
- help 帮助命令
- 创建节点
- get
- set
- delete
- deleteall path
- stat查看节点的状态
- setquota增加配额
- listquota /frame 查看配额
- delquota删除配额
- 三、ACL权限控制:
- 1、ZooKeeper权限特性:
- 2、Permission:授予的权限 CRWDA
- world:
- ip
- auth
- digest
- 测试
前言
提示:以下是本篇文章正文内容,下面案例可供参考
一、zk节点和节点类型
znode数据存储图的讲解
节点类型
- PERSISTENT --持久化目录节点
客户端与zookeeper断开连接后,该节点依旧存在 - PERSISTENT_SEQUENTIAL-持久化顺序编号节点
客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号 - EPHEMERAL -临时节点
客户端与zookeeper断开连接后,该节点被删除,临时节点不可以创建子节点 - EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点
客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号
二、常用命令
1.客户端连接
保证集群启动
-
使用zkCli.sh默认链接本机
quit
退出 会话
close
关闭与服务端的连接 -
或者使用 zkCli -server ip或者主机名:端口号 链接相应服务器
我的主机名已经配ip了
zkCli.sh -server cluster1:2181
- 或者是在zk命令行: connect ip地址或者主机名称:端口号, 链接相应服务器
2.常用命令
help 帮助命令
ls / 查看跟目录 后面必须
ls 存储路径 查看路径下的信息(路径必须是绝对路径)
ls [-s] [-w] [-R] path
列出子节点 -s状态 -R 递归查看所有子节点 -w 添加监听
递归查询跟节点的所有子节点 ls -R /
ls -w / 查看监听根目录 ,如果根下的子节点发生变化都会被监听,只监听一次 (为了少占资源)提高效率
改变状态 都会被ls -w 监控到但是只监听一次
创建节点
create [-s] [-e] [-c] [-t ttl] path [data] [acl]
- -s 创建有序节点
- -e 创建临时节点
- data 节点内容 老版本必须有内容
- acl(Access contro list)访问控制权限
创建普通节点
创建持久节点
创建持久有序
创建临时节点
create -e /fram/spring/aop 'aop'
持久化节点都是0X0 临时的ephemeralOwner和这次会话放id一样 说明这个东西是属于这个会话的 当会话消失 临时文件消失
临时的不能有子节点(临时持久都不能有)
创建临时有序节点
create -e -s /fram/spring/mvc ‘mvc1’
create -e -s /fram/spring/mvc ‘mvc2’
create -e -s /fram/spring/mvc ‘mvc3’
你会发现所有的顺序都是有序的
当退出后临时节点都消失了
get
get [-s] [-w] path
get /frame/spring
get -s /frame/spring
set /frame/spring ‘spirng1’
get -s /frame/spring
set /frame/spring ‘spirng111’
get -s /frame/spring
create /frame/spring/boot ‘boot’
get -s /frame/spring
delete /frame/spring/boot
get -s /frame/spring
get -w /frame/spring 查看节点内容并监控 但是也是只监控一次
在另外一个会话中,改变/frame/spring的内容
set /frame/spring ‘spirng4’
set /frame/spring ‘spirng5’ 发现只有一次可以触发监控
zxid:节点创建时的zxid
ctime:节点创建时间
mZxid:节点最近一次更新时的zxid
mtime:节点最近一次更新的时间
pZxid: 表示该节点的子节点列表最后一次修改的事务ID,添加子节点或删除子节点就会影响子节点列表,但是修改子节点的数据内容则不影响该ID
cversion:子节点更新次数
dataVersion:本节点数据更新次数
aclVersion:节点ACL(授权信息)的更新次数
ephemeralOwner:如果该节点为临时节点,ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是临时节点,ephemeralOwner值为0
dataLength:节点数据长度,本例中为hello world的长度
numChildren:子节点个数
set
set [-s] [-v version] path data
更新节点内容:
set /frame/spring ‘spring1’ 更新节点内容
delete
delete [-v version] path 删除单个节点
删除节点,(不能存在子节点)
delete /frame/spring/mvc0000000008
create /frame/spring/boot ‘boot’
create /frame/spring/boot/sarun ‘SpringApplicationrun’
delete /frame/spring/boot 错误
deleteall path
删除路径及所有子节点
deleteall /frame/spring/boot
stat查看节点的状态
stat /frame/spring
setquota增加配额
setquota -n|-b val path
-n 设置子节点的配额数量
-b 设置节点内容的长度
setquota -n 3 /frame 为/frame路径设置子节点数量限制 包含自己在内,最多3个子节点
listquota /frame 查看配额
ls /frame 查看子节点
在另外一个会话中打开日志:
tail -f /usr/zookeeper/logs/zookeeper-root-server-cluster1.out
create /frame/mybatis ‘ORM’
create /frame/hibernate ‘ORM’ 第二次创建目录时就会提示
listquota查询配额
listquota path
-1 表示无限, 即没有限制
listquota /frame
delquota删除配额
delquota [-n|-b] path
delquota /frame 删除所有配额
删除配额好 配额米有了
三、ACL权限控制:
ACL:Access Control List 访问控制列表
相关命令:
getAcl 获取某个节点的acl权限信息
setAcl 设置某个节点的acl权限信息
addauth 输入认证授权信息,注册时输入明文密码(登录),但是在zk的系统里,密码是以加密后的形式存在的
1、ZooKeeper权限特性:
ZooKeeper的权限控制是基于每个znode节点的,需要对每个节点设置权限
- 每个znode支持设置多种权限控制方案和多个权限
- 子节点不会继承父节点的权限,客户端无权访问某节点,但可能可以访问它的子节点
授权格式:
授权策略:授权对象: 权限
scheme: id: Permission
Scheme:(计划)授权的策略 包含下面:
-
world:默认方式,相当于全部都能访问 代表所有人
-
ip:使用客户端的主机IP作为ACL ID 。这个ACL表达式的格式为addr/bits ,此时addr中的有效位与客户端addr中的有效位进行比对。
-
auth:使用已添加认证的用户认证(cli中可以通过addauth digest user:pwd 来添加当前上下文中的授权用户)
-
digest:即用户名:密码这种方式认证,这也是业务系统中最常用的。用username:password 字符串来产生一个MD5串,然后该串被用来作为ACL ID。认证是通过明文发送username:password 来进行的,当用在ACL时,表达式为username:base64 ,base64是password的SHA1摘要的编码。
ID:授权的对象
权限赋予的用户或者一个实体,例如:IP 地址 或者是用户(授权) 或者是 anyone
2、Permission:授予的权限 CRWDA
- zookeeper支持的权限
- CREATE©: 创建权限,可以在在当前node下创建child node
- READ®: 读权限,可以获内容及子节点
- WRITE(w): 写权限,可以向当前node写数据
- DELETE(d): 删除权限,可以删除当前的child nodes
- ADMIN(a): 管理权限,可以设置当前node的permission
world:
setAcl /aaa world:anyone:crwa
设置权限 米有删除权限getAcl /aaa
查看权限delete /aaa/a
不能删除setAcl /aaa world:anyone:crwd
设置米有acl权限delete /aaa/a
可以删除ls /aaa
查询setAcl /aaa world:anyone:crwda
在设置回去发现不成功delete /aaa
直接删除节点
ip
setAcl /bbb ip:192.168.106.130:crwa
设置权限 和ip
当设置后只能这个ip的访问
非ip下会显示无访问权限
不过可以在 重新编写ip 重新设置
可以同时设置多个
auth
addauth digest scott:tiger
setAcl /ccc auth:scott:crwda
重新连接后需要重新再次添加授权用户才可以查看
不过可以删除
设置正确的认证信息后可以重新访问 名字:密码
digest
create /eee
555
setAcl /eee
digest:user:6DY5WhzOfGsWQ1XFuIyzxkpwdPo=:crwda
创建摘要
addauth digest user:123456
添加用户
成功后可以查看
父节点的权限不会限制到子节点