zookeeper的数据结构优点类似linux系统中的文件系统,例如/opt/mysql,/usr/local,都是可以有树形结构的,但是又有些不同,因为他的节点也是可以存储信息的,例如在linux中/usr/local 本来是个文件夹,文件夹里面存储的是文件,但是如果/usr/local在zookeeper中 /usr/local也可以存数据,所以zookeeper的每个节点我们称做ZNODE。
在学习zookeeper之前的环境准备
Windows 安装 Zookeeper (图文解说详细版)
我们先启动zkServer脚本,然后启动zkCli脚本就可以连接zookeeper进行命令行操作了。
ZNODE的增删改查
增
create [-s] [-e] path data #其中-s 为有序节点,-e 临时节点
创建节点
create /testnode
创建节点并且添加数据
create /testnode3 test
创建临时节点
create -e /testnode4
临时节点:重启zookeeper或者断开连接则消失
创建顺序节点
create -s /testnode4
这个顺序节点是zookeeper自动生成10位数,依次递增
创建临时顺序节点
create -es /testnode5
删
delete path [version]
删除节点
delete /testnode2
递归删除节点
如果节点里面还有节点会提示Node not empty: /testnode4
这个时候可以使用deleteall
deleteall /testnode4
改
set /testnode test
查
get path
get /testnode
可以查看znode节点存储的信息
查看节点列表
ls path
类似于linux中查看文件夹里面的文件一样
ls /
查看节点状态
stat /testnode
watch监听
监听器能够在节点内容发生改变的时候,向客户端发出通知,但是如果在命令行只能监听一次。其实ls get stat命令都可以添加watch命令,例如
stat path [watch]
get path [watch]
ls path [watch]
这里要注意的是只要有修改事件,就会触发监听,查询不会
设置ACL权限
权限模式有几种模式,我们在设置权限的时候使用
setAcl <path> 模式:对象:权限
来设置模式,一般有下面四种模式:
world
world 只有一个用户:anyone,代表登录zokeeper所有人(默认)
setAcl <path> world:anyone:<acl>
可以使用 setAcl
命令配合 world:anyone:cdrwa
权限。这里的 cdrwa
分别代表:
- c: create 创建权限
- d: delete 删除权限
- r: read 读取权限
- w: write 写入权限
- a: admin 管理权限
例如我们需要将/your/znode/path
这个路径下的所有节点对所有人开放权限:
setAcl /your/znode/path world:anyone:cdrwa
ip
ip 对客户端使用IP地址认证
setAcl <path> ip:<ip>:<acl>
auth
auth 使用已添加认证的用户认证
先添加一个用户,否则setacl不会成功
addauth digest <user>:<password>
setAcl <path> auth:<user>:<acl>
digest
digest 使用“用户名:密码”方式认证
首先通过一个命令在linux执行得到密文
echo -n <user>:<password> | openssl dgst -binary -sha1 | openssl base64
之后在使用
setAcl <path> digest:<user>:<密文password>:cdrwa
查看ACL权限
如果我们要查看/dubbo/mapping
的 ACL
getAcl /dubbo/mapping
addauth
这个命令是添加用户,如果我们前面只授权了对应的用户,例如masiyi,这个时候我们如果不使用addauth登录masiyi这个用户就不能访问。
addauth digest masiyi:123456
超管用户
如果我们前面忘记了我们的用户密码,zookeeper中也有超管的概念。
我们更改/bin/zkServer.sh脚本,在
nohup $JAVA
后面添加下面的命令:
"-Dzookeeper.DigestAuthenticationProvider.superDigest=<user>:<密文password>"
注意 <密文password>也是和上面一样加密过的密文,大家可以自己设置
之后就可以用
addauth digest super:admin #添加认证用户
命令登录之后就是超管用户,可以操作任何的数据了。