Zookeeper 从入门到入土⑨:ZAB 协议
Zookeeper 从入门到入土⑧:集群
1. 事务 Id
概述:
- 变更状态: 事务是指能够改变 ZooKeeper 服务器状态的操作,我们也称之为事务操作或更新操作。⼀般包括数据节点创建与删除、数据节点内容更新等操作。
- ZXID: 对于每⼀个事务请求(proposal 提议),ZooKeeper 都会为其分配⼀个全局唯⼀(zk 中唯一)且有序的事务 ID,用 ZXID 来表示,通常是⼀个 64 位的数字。
- 高 32 位是 epoch(投票轮次),用来标识 Leader 是否发生改变。从 1 开始,如果有新的 Leader 产生出来,epoch 会自增。
- 低 32 位用来递增计数。每次 epoch 变化,都将低 32 位的序号重置。
作用: 标识节点同步状态。
Zookeeper 从入门到入土⑦:应用场景
1. 数据发布 / 订阅
1.1. 概述
即所谓的配置中⼼,顾名思义就是发布者将数据发布到 ZooKeeper 的⼀个或⼀系列节点上,供订阅者进⾏数据订阅,进⽽达到动态获取数据的目的,实现配置信息的集中式管理和数据的动态更新。
两种设计模式:
- 推(Push)模式:服务端主动将数据更新发送给所有订阅的客户端
- 拉(Pull)模式:由客户端主动发起请求来获取最新数据,通常客户端都采⽤定时进⾏轮询拉取的⽅式
- ZooKeeper 采⽤的是推拉相结合的⽅式:
- 客户端向服务端注册⾃⼰需要关注的节点,⼀旦该节点的数据 发⽣变更,那么服务端就会向相应的客户端发送 Watcher 事件通知。
- 客户端接收到这个消息通知之后, 需要主动到服务端获取最新的数据。
Zookeeper 从入门到入土⑥:API
zk 有 Session,没有线程池的概念
1. 原生 API
Zookeeper API 共包含五个包:
- org.apache.zookeeper
- org.apache.zookeeper.data
- org.apache.zookeeper.server
- org.apache.zookeeper.server.quorum
- org.apache.zookeeper.server.upgrade
依赖:
1 | <dependency> <groupId>org.apache.zookeeper</groupId> |
Zookeeper 从入门到入土⑤:四字命令(Four Letter Words)
安装 nc: yum install nc
命令格式: echo [commond] | nc [ip] [port]
stat: 查看 zk 的状态信息
1 | [root@izbp101vzs716yznuegsljz bin]# echo stat | nc localhost 2181 |
Zookeeper 从入门到入土④:ACL 权限
1. ACL 构成
概述: 针对节点可以设置相关读写权限,保障数据安全
通过 scheme:id:permissions
来构成权限列表
- scheme: 代表采用的某种权限机制
- id: 代表允许访问的用户
- permissions: 代表允许的操作权限
例: setAcl path world:anyone:d 代表为 path 下的节点设置权限为所有人都只能删除该节点
1.1. scheme 类型
- world(world:anyone:[permissions]): 默认权限。只有一个用户 —— anyone
- auth(auth:user:password:[permissions]): 代表认证登录,需要注册用户拥有权限
- digest(digest:username:BASE64(SHA1(password)):[permissions]): 需要对密码加密才能访问
- ip(ip:192.168.1.1:[permissions]): 限制 ip 进行访问
- super: 超级管理员,拥有所有权限
1.2. permissions
crdwa 代表的权限含义:
- CREATE: 创建 子节点
- READ: 读取节点数据
- WRITE: 往节点写入数据
- DELETE: 删除 子节点,对于 delete 权限,要谨慎规划
- ADMIN: 可以使用 setAcl 命令设置权限
Zookeeper 从入门到入土③:Watcher
Zookeeper 从入门到入土②:常用命令
Zookeeper 从入门到入土①:概述
1. 概述
ZooKeeper 是一个分布式协调中间件,是 Google 的 Chubby 一个开源的实现。它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
特性:
- 顺序一致性: 客户端的更新将按顺序执行。因其写操作完全由单一 Leader 节点来执行(事务 id)
- 原子性: 操作要么成功要么失败(事务)
- 单一视图: 无论连接到哪个节点,客户端都能看到相同的视图。(恢复模式 + 广播模式)
- 及时性: 在特定时间范围内的数据是最新的。由最终一致性保证,同步需一定时间(数据同步)
- 可靠性:
- 数据不会丢失。zk 是将数据存储到内存中的,所以肯定会有持久化(日志 + 快照)
- 快速恢复 Leader。恢复模式(选主 + 数据同步)