共计 1705 个字符,预计需要花费 5 分钟才能阅读完成。
1. 什么是 zookeeper?
zookeeper 是一个开源的分布式应用的协同服务
zookeeper 的设计指标是对简单易错的分布式应用的协同操作进行形象和封装:
- 简略的数据模型
- 集群
- 程序拜访
- 高性能
zookeeper 的个性:
- 程序一致性,zookeeper 的对于客户端的申请,严格依照发动程序进行解决
- 原子性,事务性申请的原子性,要么全副失败,要么全副胜利
- 可靠性,肯定事务申请胜利,集群所有节点对于该申请的后续响应都是一致性,除非有其余申请进行批改
- 实时性,从 zookeeper 集群节点获取的数据都是最新的
- 繁多视图,从 zookeeper 集群节点获取的数据始终是统一的
2. zookeeper 提供哪些服务?
应用程序要应用 zookeeper,须要引入 对应的 zookeeper 客户端
zookeeper 典型的利用场景:
- 对立配置管理
- 对立命名服务
- DNS 服务
- 组成员治理(主从治理、负载平衡)
- 分布式锁的实现
zookeeper 更实用来存储一些要害数据,如配置文件、利用状态等,不适用于较大的数据量的存储
理论示例:
- Hadoop:应用 zookeeper 做 Namenode 的高可用
- HBase:通过 zookeeper 保障集群中只有一个 master,保留集群中的 RegionServer 列表、保留 hbase:meta 表的地位
- Kafka:集群成员治理,controller 节点的选举
3. zookeeper 的数据模型
zookeeper 的数据模型是层次模型,相似于规范的文件系统
为什么应用层次模型而不是 K-V 模型:
- 层次模型的树形构造更容易表白数据之间的档次关系
- 层次模型的树形构造便于为不同的利用调配独立的命名空间
zookeeper 的层次模型的每个节点称为 znode,每个 znode 都能够保留数据(这是和文件系统的区别)
图示:
zookeeper 对外提给了一个简化的类文件系统的 API 来拜访 znode:
- znode 以 UNIX 格调的门路进行命名,以
/
进行分隔 - znode 除了保留的数据,还以 Key-Value 的模式保留了相干的版本信息等状态属性
- znode 的所有操作都是 wait-free,就是正执行的操作不影响其余 API
- znode 最多存储 1 MB 的数据
znode 的状态属性:
Key | — |
---|---|
cZxid | znode 创立时的事务 ID |
ctime | znode 创立的工夫 |
mZxid | 最初批改 znode 的事务 ID |
mtime | 最初批改 znode 的工夫 |
pZxid | 示意该节点的子节点列表最初一次批改的事务 ID |
cversion | 子节点版本号,子节点每次批改版本号加 1 |
dataversion | 数据版本号,数据每次批改该版本号加 1 |
aclversion | 权限版本号,权限每次批改该版本号加 1 |
ephemeralOwner | 创立该长期节点的会话的 sessionID |
dataLength | 该节点的数据长度 |
numChildren | 间接子节点的数量 |
pZxid
:只有子节点的创立或者删除才会变更该值
ephemeralOwner
:如果是持久性节点,这个值为 0
znode 的划分
znode 能够是永久性的,也能够是临时性的:
- 永久性的 znode(PERSISTENT)在创立后即时 zookeeper 宕机或者 client 会话完结也不会失落
- 临时性的 znode(EPHEMERAL)如果 zookeeper 或者 client 会话完结后就会失落
znode 也能够是程序性,程序性的 znode 关联一个惟一的 枯燥递增整数作为后缀或者命名:
- 永久性的程序 znode(PERSISTENT_SEQUENTIAL),具备程序性的永恒 znode
- 临时性的程序 znode(EPHEMERAL_SEQUENTIAL)
znode 次要划分为下面四种
4. znode 的简略 API
通过 zkCli 能够对 zookeeper 进行一些简略操作:
命令 | 作用 |
---|---|
help | 能够展现 zkCli 反对的命令 |
ls | 展现 zookeeper 下的 znode,参数 -R 示意向下递归 |
ls2 | 同 ls 命名,然而展现的数据更多 |
get | 获取 znode 的数据和状态信息 |
stat | 获取 znode 的状态信息数据 |
create | 创立 znode 并赋值,-e 示意创立的 znode 是临时性的,- s 示意是程序性的 |
set | 批改 znode 的数据 |
delete | 删除 znode |
正文完