一. 服务注册中心zookeeper
文章目录
1.1:ZooKeeper数据模型
一.zk数据模型简介
二.zk数据模型特性
zookeeper的数据模型类似于linux下的文件目录
/usr/local /usr/local/tomcat
- 每一个节点都叫做zNode,可以有子节点,也可以有数据
- 每个节点都能设置相应的权限控制用户的访问
- 每个节点存储的数据不宜过大
- 每个节点都带有一个版本号,数据变更时,版本号变更(乐观锁)
- 节点分永久节点跟临时节点
1.2:zookeeper常用命令-zkCli
一.分类
1.创建
- 创建节点
create [-s] [-e] path data acl -s
-s表示创建顺序节点
-e表示创建临时节点
data表示创建的节点的数据内容
2.查看
- 获取节点的子节点
ls path
- 获取节点的子节点
get path
- 查看节点状态 stat path
stat path
结果
cZxid = 0x3 --事务id
ctime = Tue Dec 04 10:37:58 EST 2018 --节点创建的时候的时间
mZxid = 0x3 --最后一次更新时的事务id
mtime = Tue Dec 04 10:37:58 EST 2018 --最后一次更新的时间
pZxid = 0x3 --该节点的子节点列表最后一次被修改的事务id
cversion = 0 --子节点列表的版本
dataVersion = 0 --数据内容的版本
aclVersion = 0 --acl版本
ephemeralOwner = 0x0 --用于临时节点,表示创建该临时节点的事务id,如果当前的节点不是临时节点,该字段值为0
dataLength = 8 --数据内容的长度
numChildren = 0 --子节点的数量
- 获取节点的子节点以及当前节点的状态
ls2 path
3.修改
- 修改节点数据
set path data [version]
4.删除
- 删除节点数据
delete path [version]
如果此时该节点有子节点,则不允许删除
- 递归删除整个节点
rmr path
1.3:ZooKeeper session机制
一.简介
- 简介:用于客户端与服务端之间的连接
- 特点:
- 可以设置超时时间
- 通过心跳包机制(客户端向服务端ping包请求)检查心跳结束,则session过期
- session过期的时候,该session创建的所有临时节点都会被抛弃
二.图示
1.4:ZooKeeper watch机制
一.简介
- 简介:针对zk每一个节点,都可以有一个监控者,当节点发生变化会触发watcher事件, 触发后立即销毁 所有有监控者的节点的变更操作都能触发watcher事件这个就是watch机制
- 实现:
- 两个命令:
get [节点名]
stat [节点名]
- 两个命令:
- 特点:
- 一次性的,触发后立即销毁
- 子节点的watcher操作(监控父节点,当父节点对应的子节点发生变更的时候,父节点上的watcher事件会被触发)
ls ls2
增删会触发、修改不会。如果子节点再去新增子节点,不会触发(也就是说,触发watcher事件一定是直系子节点)
二.图示
1.5:ZooKeeper的acl权限控制
一.简介
- 简介:针对节点可以设置相关的读写等权限,目的是为了保证数据的安全性; 权限permissions可以指定不同的权限范围及角色
- 作用:
- 分离开发与测试环境,开发者无权操作测试的节点
- 生产火警上控制指定ip的服务可以访问相关的节点
二.acl的组成与解析
acl组成:[ scheme : id : permissions ]
- scheme分类
- world: world下只有一个id,也就是anyone,表示所有人
world:anyone:permissions
- auth 代表认证登录,需要注册用户有权限才可以
auth:user:password:permissions
- digest 需要密码加密才能访问
digest:user:password:permissions
- ip 针对ip进行认证登录
ip:localhost:psermissions
- super 代表超管,拥有所有的权限
-
id:允许访问的用户
-
permissions: 权限组合字符串 – cdrwa
- c create 创建子节点
- d delete 删除子节点
- r read 读取节点的数据
- w write 写入数据
- a admin 可管理的权限
- 可选则使用,例:cdrwa cdr cdw
三.常用命令
- 获取节点权限:
getAcl [节点名]
- 设置节点权限:
setAcl [节点名] [acl]
- 输入认证授权信息:
- 密码加密访问:
addauth digest [节点名] : [密码]
- 密码不加密访问:
addauth auth [节点名] : [密码]
- 密码加密访问: