Zookeeper的基本特性与命令行学习
文章目录
一、zookeeper是什么?
ZooKeeper是一个分布式服务协调框架,可以用来维护分布式配置信息、服务注册中心、实现分布式锁等,是Hadoop、Hbase、kafka、dubbo等重要组件
二、zookeeper特性详解
1.zookeeper作用
- master选举
- 统一配置文件管理
- 发布订阅;dubbo 发布者把数据存在节点上订阅者可获取数据
- 提供分布式锁
2.怎么判断是持久化节点还是临时节点:
get /节点名 查看ephemeralOwner如果是永久节点则其值为 0x0;
3.zookeeper常用命令
./zkServer.sh start ----启动服务
./zkCli.sh -----连接客户端
ls /zookeeper ----列出节点zookeeper节点的子节点及状态信息
stat /zookeeper ----节点zookeeper状态
get /zookeeper ----获取指定节点zookeeper的内容
create /zookeeper zkvalue ----创建持久化节点
create -e /zookeeper zkvalue ---- 创建临时节点
create -s /zookeeper zkvalue ---- 创建顺序节点
例如::create -s /node_1/node_1_1 234
结果为: Created /node_1/node_1_10000000001
get /zookeeper --节点详情
set /zookeeper zkvalue 当前dataVersion值 ----修改节点的值 并且dataVersion值递增
delete /zookeeper 当前dataVersion数据版本号值 ----删除节点
rmr /node_1 ---delete只能删除不包含子节点的节点,如果要删除的节点包含子节点,使用rmr命令
4.watcher机制
Zookeeper允许客户端向服务端的某个Znode 注册一个 Watcher 监听,当服务端的一些指定事件触发了这个 Watcher,服务端会向指定客户端发送一个事件通知来实现分布式的通知功能,然后客户端根据 Watcher 通知状态和事件类型做出业务上的改变。
工作机制:
(1)客户端注册 watcher
(2)服务端处理 watcher
(3)客户端回调 watcher
wtcher是一次性的触发之后立即被销毁;父节点,子节点增删改都能触发其watcher
-
为父节点创建事件:stat 或者 get /节点名 watch
-
为子节点创建事件:
新增和删除事件:ls /父节点名/子字节点名 watch
修改事件: get /父节点名/子字节点名 watch
使用ls命令为子节点设置watcher,子节点被修改时,不触发事件。需要使用get
watch类型:
事件类型:
针对父节点:
增 NodeCreated
改 NodeDataChanged
删 NodeDeleted
针对子字节:
增/删 NodeChildrenChanged
改 NodeDataChanged
4.ACL权限控制
zookeeper利用ACL策略控制节点的访问权限,如节点数据读写、节点创建、节点删除、读取子节点列表、设置节点权限等。
Acl构成:
[scheme :id :permissions]构成权限列表
scheme分类:
world : 对应只有一个id 即:anyone 任何人 world:anyone:【permissions】
auth : 认证登录。auth:user:password:[permissions] 明文密码
digest: 密码加密digest:user:BASE64(SHA1(password)) :[permissions]
ip : 指定ip访问 ip:192.168.30.1 : [permissions]
super : 拥有所有权限,代表超级管理员 修改zkServer.sh 并重启
permissions分类:
权限字符串缩写:CRDWA (默认)
C: create创建子节点
R: read 获取节点或者子字节
D: delete 删除子节点
W: write::设置节点
A:admin设置权限
命令行实例:
setAcl /imooc/ttt world:anyone:cdrwa(具体的权限字符串 )
setAcl /zookeeper/names/imooc auth:imooc:imooc:cdrwa //默认第一个设置的用户,之后在用其他未认证的用户也是可以的操作
setAcl /zookeeper/names/test digest:imooc:XwEDaL3J0JQGkRQzM0DpO6zMzZs=:cdra
setAcl /zookeeper/names/ip ip:192.168.30.1:cdrwa
配置zkServer.sh "-Dzookeeper.DigestAuthenticationProvider.superDigest=super:加密后的密码" 并重启./zkServer.sh restart