Zookeeper

内容概要:关于Zookeeper, Zookeeper安装和运行, Zookeeper基本操作, 基于Zookeeper的分布式配置文件, 基于Zookeeper的分布式锁
参考文档

1. 关于Zookeeper

ZooKeeper是Yahoo开发并开源的一套可扩展高吞吐分布式协调系统, 参考其他的类似服务google的Chubby.
A Distributed Coordination Service for Distributed Applications.
ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services.

1.1 ZooKeeper的特点
- Zookeeper is simple
- Zookeeper is replicated
- Zookeeper is ordered
- Zookeeper is fast: 更适合读多写少的业务

1.2 ZooKeeper体系结构
Zookeeper Service

ZooKeeper是一个高吞吐的分布式协调服务, 同一时刻可以同时响应上万客户端请求. Zookeeper由若干台服务器构成, 其中一台通过ZAB原子广播协议选举作为主控服务器, 其他作为从属服务器.

  1. 如果客户端是读操作, 则任意一个服务器都可以直接响应. 这是它吞吐量高的原因. Chubby在这点上面与zookeeper不同, 所有的读写操作都由主控服务器完成, 从属服务器只是为了提高整个系统的可用性.
  2. 如果是写操作,则只能由主控服务器来协调写操作. 如果客户端连接从属服务器, 则从属服务器将写操作请求转发到主控服务器, 由它完成操作. 主控服务器将所有的写操作序列化, 利用ZAB协议将写操作通知所有的从属服务器, ZAB保证写操作的一致性和顺序性.

1.3 ZooKeeper数据模型
ZooKeeper内存数据模型类似于传统的UNIX文件系统, 由树型的层级目录结构构成, 其中的节点被成为znode. Znode有两种类型: 持久znode和临时znode. 临时znode随着客户端会话结束时,ZooKeeper会将该临时znode删除, 并且临时znode不可以有子znode.
虽然每个临时znode都会绑定到一个客户端会话, 但它们对所有的客户端还是可见的(当然, 还是得符合ACL定义)

1.4 ZooKeeper操作
zookeeper可被看做一个文件系统, 但它的znode文件较小, 并且总是被整体读写.

1
2
3
4
5
6
7
8
9
10
11
12
13
create : 创建znode(必须要有父znode)

delete : 删除一个znode(不能有子znode)

exists : 测试一个znode是否存在

getACL/setACL : 获取/设置一个znode的ACL

getChildren : 获取znode的子节点列表

getData/setData : 设置一个znode所保存的数据

sync : 获取znode的最新状态, 将客户端的znode视图与zookeeper同步

1.5 ZooKeeper的典型应用场景

    1. 领导者选举
    1. 配置管理
    1. 组成员管理
    1. 任务分配
    1. 分布式锁
    1. 双向路障同步(Double Barrier)

2. Zookeeper安装和运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#官网下载安装包, 解压到相应的文件夹. 例如:
$ /opt/hadoop/zookeeper-3.4.10

#配置环境变量
export ZOOKEEPER_INSTALL=/opt/hadoop/zookeeper-3.4.10
export PATH=$PATH:$ZOOKEEPER_INSTALL/bin

#conf/zoo.cfg文件为配置文件, 可以配置相应的tickTime, dataDir, clientPort等参数

#启动一个本地的zookeeper服务
$ zkServer.sh start

#检查是否正常运行, 返回imok说明正常.
$ echo ruok|nc localhost 2181
imok

3. Zookeeper基本操作


4. 基于Zookeeper的分布式配置文件


5. 基于Zookeeper的分布式锁