zookeeper 学习
zookeeper的数据模型
一种分布式协调服务
树是有节点组成,zookeeper的数据存储也是基于节点,这些节点叫做znode
Znode
znode的引用方式是路径引用,类似于文件路径
Znode包含了数据,子节点引用,访问权限等
data Znode存储的数据
ACL Znode的访问权限
stat Znode的各种元数据,如事务ID,版本号,时间戳,大小等
child 当前节点的子节点引用,类似二叉树的左右孩子
zookeeper适用于读多写少的场景,Znode并不用于存储大量数据,而是少量的状态和配置信息。
Zookeeper的基本操作和事件通知
create 创建节点
delete 删除节点
exists 判断节点存在
getData 获取节点数据
setData 设置节点数据
getChildren 获取节点下所有子节点
watch操作-----节点数据等发生变化的时候,会收到异步通知。
zookeeper集群
ZAB协议
zab崩溃恢复
- leader election 选举
- discovery 寻找最新事务
- Synchronization 同步
zab写入数据 - follower=>leader=> other follower 单调一致性
一致性
zookeeper适用场景
- 分布式锁=>同一时间一台leader
- 名字服务=>所有服务提供统一入口
- 配置管理=>共享配置
- 集群管理=>节点的加入和退出
Zookeeper 目录结构
- bin:放置运行脚本和工具脚本,如果是 Linux 环境还会有有 zookeeper 的运 行日志 zookeeper.out
- conf:zookeeper 默认读取配置的目录,里面会有默认的配置文件
- contrib:zookeeper 的拓展功能
- dist-maven:zookeeper的 maven 打包目录
- docs:zookeeper 相关的文档
- lib:zookeeper 核心的 jar
- recipes:zookeeper 分布式相关的 jar 包
- src:zookeeper 源码