zookeeper的数据结构优点类似linux系统中的文件系统,例如/opt/mysql,/usr/local,都是可以有树形结构的,但是又有些不同,因为他的节点也是可以存储信息的,例如在linux中/usr/local 本来是个文件夹,文件夹里面存储的是文件,但是如果/usr/local在zookeeper中 /usr/local也可以存数据,所以zookeeper的每个节点我们称做ZNODE。
在学习zookeeper之前的环境准备
Linux安装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>
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
addauth
这个命令是添加用户,如果我们前面只授权了对应的用户,例如masiyi,这个时候我们如果不使用addauth登录masiyi这个用户就不能访问。
addauth digest masiyi:123456
超管用户
如果我们前面忘记了我们的用户密码,zookeeper中也有超管的概念。
我们更改/bin/zkServer.sh脚本,在
nohup $JAVA
后面添加下面的命令:
"-Dzookeeper.DigestAuthenticationProvider.superDigest=<user>:<密文password>"
注意 <密文password>也是和上面一样加密过的密文,大家可以自己设置
之后就可以用
addauth digest super:admin #添加认证用户
命令登录之后就是超管用户,可以操作任何的数据了。