Zookeeper数据模型
一、zookeeper基本数据模型
1.zk存储的数据是树形结构,可以理解为类似Linux文件目录
2.每一个节点都称为znode,它可以有自己的节点,也可以有数据
3.每个节点可以分为永久节点和临时节点,临时节点在客户端断开后(并且超过心跳机制设置的时间以后)会消失。session失效后,临时节点中的数据也会消失。
4.每个zk节点都有自己的版本号,可以通过命令来显示节点信息
5.每当节点数据发生变化以后,该节点版本号会累加(乐观锁)
6.删除或者修改节点时,如果版本号不匹配会报错
7.每个节点的数据不易过大
8.节点可以设置操作权限
二、zk客数据模型基本操作
1.启动zk服务 ./zkServer.sh start
2.打开客户端连接 ./zkCli.sh
3.进行znode节点操作
4.关闭连接(ctrl+c)
三、详细操作
打开连接后,输入help命令

1.ls 和ls2命令
ls:查看每个节点

输入ls2 path:会显示当前节点的信息

dataVersion:数据版本号
aclVersion:权限版本号
ephemeralOwner:是永久节点还是临时节点
2.创建节点 create
create 路径 数据内容 (acl是权限,这里先不使用)

create -e 路径 数据 (是创建临时节点),根据ephemeralOener可以判断出

create -s 路径 数据 (创建顺序节点)


3.获取数据
get 路径

4.修改
set 路径 数据
set /zookeeper/zk abc

dataVersion版本号发生变化
set 路径 数据 版本号(修改的时候可以带上版本号),如果版本号不是当前版本号,则会报错

5.删除节点
可以带版本号,可以不带,如果带版本号,需要跟当前数据匹配度的版本号,否则报错

6.节点权限
getAcl 路径 (查看这个节点的权限)

acl构成 [scheme:id:permissions]
①scheme:采用哪种权限机制
world:只有一个id,就是anyone
auth:认证登录 auth:user:password:[permissions]
digest:需要对密码进行加密才可以访问
digest:user:BASE64(SHA1(password)):[permissions]
ip:限制ip
super:拥有所有权限
② permissions:权限 cdrwa是权限字符串缩写
create 创建节点权限
delete 删除节点权限
read 获取节点权限
write 设置节点权限
admin 设置权限
二、watch机制
1.针对每一个节点操作,都会有一个监督者,watcher是一个时间
2.当监督的某个对象(znode)发生变化,就会触发watcher时间
3.zookeeper中的watcher是一次性的。出发后会立即销毁。
4.父节点,子节点增删改都会触发watcher时间
三、watch事件类型
1.父节点
创建父节点触发:NodeCreated
修改父节点触发:nodeCreateChanged事件
删除父节点触发:NodeDeleted事件

2.子节点
创建子节点/删除子节点,都会是NodeChildrenChanged

修改子节点,不会触发任何事件