zookeeper 节点介绍及节点常用命令总结
本文为博主原创,未经允许不得转载:
目录:
1. znode 节点特性
2. zookeeper 的四种节点类型及适用场景分析
3. zookeeper 客户端常用操作命令
4. znode 数据增删改查
5. 节点属性查看
6. 节点的监听
7. acl权限设置
1. znode 节点特性
zookeeper 中节点叫znode存储结构上跟文件系统类似,以树级结构进行存储。不同之外在于znode没有目录的概念,不能执行类似cd之类的命令。
znode结点属性如下:
1 path:唯一路径
2 childNode:子节点
3 stat:状态属性
4 type:节点类型
2. zookeeper 的四种节点类型及适用场景分析:
类型 |
描述 |
命令 |
适用场景 |
PERSISTENT |
持久节点 |
create /test |
|
PERSISTENT_SEQUENTIAL |
持久顺序节点 |
create -s /test |
适合用于分布式锁、分布式选举等场景 |
EPHEMERAL |
临时节点(不可在拥有子节点) |
create -e /temp
|
适用于心跳,服务发现等场景 |
EPHEMERAL_SEQUENTIAL |
临时顺序节点(不可在拥有子节点) |
create -e -s /temp/seq
|
3. zookeeper 客户端常用操作命令:
#创建节点 create [-s] [-e] [-c] [-t ttl] path [data] [acl] #删除节点,(不能存在子节点) deleteall path #查看节点数据 -s 包含节点状态 -w 添加监听 get [-s] [-w] path #查看执行的历史记录 history #设置值 set [-s] [-v version] path data #为节点设置ACL权限 setAcl [-s] [-v version] [-R] path acl #查看节点状态 -w 添加监听 stat [-w] path
创建一个临时顺序节点,并查看:
临时节点在会话关闭的时候即会删除。
4. znode 数据增删改查:
# 列出子节点 ls / #创建节点 create /test "test is good man" # 查看节点 get /test # 创建子节点 create /test/sex "man"
# 设置节点值
set /test/sex "man"
# 删除节点 delete /test/sex # 删除所有节点 包括子节点 deleteall /test
5. 节点属性查看
# 查看节点属性
stat /test
其属性说明如下:
#创建节点的事物ID cZxid = 0x385 #创建时间 ctime = Wed Jul 21 22:37:01 CST 2021 #修改节点的事物ID mZxid = 0x385 #最后修改时间 mtime = Wed Jul 21 22:37:01 CST 2021 # 子节点变更的事物ID pZxid = 0x385 #这表示对此znode的子节点进行的更改次数(不包括子节点) cversion = 0 # 数据版本,变更次数 dataVersion = 0 #权限版本,变更次数 aclVersion = 0 #临时节点所属会话ID ephemeralOwner = 0x0 #数据长度 dataLength = 17 #子节点数(不包括子子节点) numChildren = 0
6. 节点的监听:
客户添加 -w 参数可实时监听节点与子节点的变化,并且实时收到通知。非常适用保障分布式情况下的数据一至性。其使用方式如下:
命令 |
描述 |
ls -w path |
监听子节点的变化(增,删) |
get -w path |
监听节点数据的变化 |
stat -w path |
监听节点属性的变化 |
printwatches on|off |
触发监听后,是否打印监听事件(默认on) |
7. acl权限设置
ACL全称为Access Control List(访问控制列表),用于控制资源的访问权限。ZooKeeper使用ACL来控制对其znode的防问。基于scheme:id:permission的方式
进行权限控制。scheme表示授权模式、id模式对应值、permission即具体的增删改权限位。
scheme:认证模型
方案 |
描述 |
world |
开放模式,world表示全世界都可以访问(这是默认设置) |
ip |
ip模式,限定客户端IP防问 |
auth |
用户密码认证模式,只有在会话中添加了认证才可以防问 |
digest |
与auth类似,区别在于auth用明文密码,而digest 用sha-1+base64加密后的密码。在实际使用中digest 更常见。 |
permission权限位
权限位 |
权限 |
描述 |
c |
CREATE |
可以创建子节点 |
d |
DELETE |
可以删除子节点(仅下一级节点) |
r |
READ |
可以读取节点数据及显示子节点列表 |
w |
WRITE |
可以设置节点数据 |
a |
ADMIN |
可以设置节点访问控制列表权限 |
acl 相关命令:
命令 |
使用方式 |
描述 |
getAcl |
getAcl <path> |
读取ACL权限 |
setAcl |
setAcl <path> <acl> |
设置ACL权限 |
addauth |
addauth <scheme> <auth> |
添加认证用户 |
查看所有跟节点,并查看controller 节点的acl 权限
设置 节点 acl 权限