1. 相关命令2. Zooker数据模型2.0 数据模型2.1 znode的类型2.1.1 持久节点2.1.2 持久序号节点:2.1.3 临时节点2.1.4 临时序号节点2.1.5 容器节点2.1.6 TTL节点2.2 ZK中的Znode是什么样的结构3. 查询节点3.1 递归查询3.2 查询信息4. 删除节点5. 权限设置
1. 相关命令
# 查看当前节点 root@redis01:~/zookeeper/apache-zookeeper-3.7.0-bin/bin# ./zkServer.sh status # 关闭节点,默认是找conf下的zoo.cfg文件 root@redis01:~/zookeeper/apache-zookeeper-3.7.0-bin/bin# ./zkServer.sh stop
2. Zooker数据模型
2.0 数据模型
ZooKeeper 的层次模型称作 data tree。Data tree 的每个节点叫做 znode。不同于文件系统,每个节点都可以保存数据。每个节点都有一个版本(version),版本从 0 开始计数。必须以
/
为路径。每一个ZNode默认能够存储1MB的数据,每个Zode都可以通过其路径唯一标识。使用
zkCli.sh
连接zk的本地server,使用ls /
查看数据root@redis01:~/zookeeper/apache-zookeeper-3.7.0-bin/bin# ./zkCli.sh
# 创建节点test1 [zk: localhost:2181(CONNECTED) 1] create /test1 Created /test1 [zk: localhost:2181(CONNECTED) 2] ls / [test1, zookeeper] # 创建子节点sub1 [zk: localhost:2181(CONNECTED) 3] create /test1/sub1 Created /test1/sub1 [zk: localhost:2181(CONNECTED) 4] ls / [test1, zookeeper] # 创建节点test2,并存入数据henggao [zk: localhost:2181(CONNECTED) 5] create /test2 henggao Created /test2 # 查看节点数据 [zk: localhost:2181(CONNECTED) 6] get /test2 henggao
2.1 znode的类型
2.1.1 持久节点
- 创建出的节点,在会话结束后依然存在,保存数据
[zk: localhost:2181(CONNECTED) 7] create /test2
2.1.2 持久序号节点:
- 创建出的节点,根据先后顺序,会在节点之后带上一个数值,越后执行数值越大,适用于分布式锁的应用场景,单调递增
[zk: localhost:2181(CONNECTED) 9] create -s /test2
2.1.3 临时节点
- :是在会话结束后,自动被删除的,通过这个特性,zk可以实现服务注册与发现的效果。那么临时节点是如何维持心跳呢
# -e 随着会话的结束,等待10一小会儿左右就会删除 [zk: localhost:2181(CONNECTED) 11] create -e /test3
2.1.4 临时序号节点
- 临时的分布式锁
create -e -s /test3
2.1.5 容器节点
- 当容器中没有子节点,会定期自动删除(默认是60s)
create -c /mycontainer
2.1.6 TTL节点
- 新的方法,目前还不稳定
2.2 ZK中的Znode是什么样的结构
zk中的znode,包含了四个部分
- data:保存数据
- acl:权限
- c:create创建权限,允许在该节点下创建子节点
- w:write更新权限,允许更新该节点的数据
- r:read读取权限,允许读取该节点的内容以及子节点的列表信息
- d:delete删除权限,允许删除该节点的子节点
- a:admin管理者权限,允许对该节点进行acl权限设置
- stat:描述当前znode的元数据
- child:当前节点的子节点
3. 查询节点
3.1 递归查询
ls -R /test3
3.2 查询信息
get -s /test2
- cZxid:创建节点的事务ID
- mzxid:修改节点的事务ID
- pzxid:添加和删除子节点的事务ID
- ctime:节点创建的时间
- mtime:节点最近修改的时间
- odataVersion:节点内数据的版本,每更新一次数据,版本会+1
- aclversion:此节点的权限版本
- ephemeralOwner:如果当前节点是临时节点,该值是当前节点所有者的sessionid。如果节点不是临时节点,则该值为零。
- dataLength:节点内数据的长度
- numchildren:该节点的子节点个数
4. 删除节点
- 普通删除
- 乐观锁删除
# 删除空节点 delete /test1 # 删除节点 deleteall /test1 delete -v 1 /test1
5. 权限设置
- 注册当前会话的账号和密码
addauth digest xiaoming:12345
- 创建节点并设置权限
create /test-node abc auth:xiaoming:123456:cdrwa
另一个窗口,没设置权限,无法获取,可以设置密码权限,可以读到。
addauth digest xiaoming:12345