背景
ZooKeeper 是目前使用较多的分布式协调手段,通过安装和简单使用 ZooKeeper, 为接下来的研究做准备.
安装
HomeBrew 安装
1 | brew install zookeeper |
安装完成的 ZK 并不是集群模式, 仅提供 zkCli, 接下来介绍安装 ZK 集群.
Docker安装
推荐使用 Docker for Mac, 基于HyperKit的本地应用
Docker Compose配置集群
参考: 来自Docker Store
编辑配置
以 Visual Studio Code 为例, 执行以下代码
1 | code docker-compose.yml |
输入内容:
1 | version: '2' |
启动集群
执行
1 | docker-compose up |
连接
执行
1 | # 默认参数 |
简介
常用 API
1 | # 帮助 |
znode类型
持久节点和临时节点
- 持久节点只能通过delete删除
- 临时节点除主动删除外,当创建该 znode 的客户端的会话超时或主动关闭而中止时也会删除
有序节点
当创建有序(sequential)节点创建时,唯一一个单调递增的证书会被追加到路径后,如 /task/task-,追加后/task/task-1。
监视与通知
为了代替客户端轮询,Zookeeper 使用了基于通知(notification)的机制:客户端向 ZooKeeper 注册需要接收到通知的 znode,通过对 znode 设置监视点(watch)来接收通知。
接收通知为单次操作,接收多个通知需要每次接收后设置一个新的监视点。
另外一个重要保障是,ZooKeeper 先向客户端传送通知,再对节点进行变更。
版本
每一个 znode 都有一个版本号,随着每次数据变化递增,setData 和 delete 会以版本号作为传入参数,一致时才能成功。
架构
ZooKeeper 服务端运行于两种模式下
- 独立模式(standalone)
- 仲裁/集群模式(quorum)
ZooKeeper 仲裁
法定人数是指保存了数据的最小客户端数量,为了避免脑裂,法定人数需要超过半数。
服务器个数一般是奇数,偶数会使系统变脆弱,如4个服务器就需要3个可用。
会话
ZooKeeper 所有操作均在关联的会话上,基于 TCP 协议进行通信。
会话提供顺序保证,同一个会话请求中以 FIFO 进行执行,但不保证多个会话。