【ZooKeeper】 (一)了解ZooKeeper
ZooKeeper 是一个分布式协调服务的开源框架。主要用来解决分布式集群中应用系统的一致性的问题。其本质上是一个分布式的小文件存储系统。提供基于类似于文件系统的目录树方式的数据存储,并且可以对树中 的节点进行有效管理。从而来维护和监控你存储的数据的状态变化。将通过监控这些数据状态的变化,从而可以达到基于数据的集群管理。
- Paxos算法:
- 虚拟同步技术(virtual synchrony):
1.1 Zookeeper 基础
- znode : 类似于文件系统的层级树状结构

在这个文件系统里面,是一个主-从结构的示例
-
ZooKeeper API暴露的方法:
- create/path data : 创建一个名为 /path 的 znode 节点,并包含数据 data
- delete/path : 删除 /path 的 znode
- exist/path : 检查是否存在名为 /path 的节点
- setData/path data : 设置名为 /path 的 znode 的数据为 data
- getData/path : 返回名为 /path 节点的数据信息
- getChildren/path : 返回所有 /path 节点的所有子节点列表
ZooKeeper 不允许局部写入或读取znode节点的数据
-
znode 的不同类型
当新建znode时,还需要指定该节点的类型(mode),不同的类型 决定了znode节点的行为方式。
-
持久节点和临时节点 : 持久的znode,如/path,只能通过调用delete来进行 删除。临时的znode与之相反,当创建该节点的客户端崩溃或关闭了与 ZooKeeper的连接时,这个节点就会被删除。
一个临时znode,在以下两种情况下将会被删除: 1.当创建该znode的客户端的会话因超时或主动关闭而中止时。 2.当某个客户端(不一定是创建者)主动删除该节点时。
-
有序节点 : 一个有序znode节 点被分配唯一个单调递增的整数。当创建有序节点时,一个序号会被追加到路径之后。有序znode通过 提供了创建具有唯一名称的znode的简单方式。同时也通过这种方式可以直观地查看znode的创建顺序。
综上,znode一共有4种类型:持久的(persistent)、临时的 (ephemeral)、持久有序的(persistent_sequential)和临时有序的 (ephemeral_sequential)。
-
-
监视与通知
ZooKeeper通常以远程服务的方式被访问,如果每次访问znode时, 客户端都需要获得节点中的内容,这样的代价就非常大。因为这样会导致更高的延迟,而且ZooKeeper需要做更多的操作。
为此,基于通知的机制 : 客户端向ZooKeeper注册需要接收通知的 znode,通过对znode设置监视点(watch)来接收通知。

-
版本
每一个znode都有一个版本号,它随着每次数据变化而自增。使用版本来阻止并行操作的不一致性。

1.2 Zookeeper 架构
-
ZooKeeper服务器端运行于两种模式下:独立模式(standalone)和 仲裁模式(quorum)。独立模式几乎与其术语所描述的一样:有一个单独的服务器,ZooKeeper状态无法复制。在仲裁模式下,具有一组 ZooKeeper服务器,我们称为ZooKeeper集合(ZooKeeper ensemble),它们之前可以进行状态的复制,并同时为服务于客户端的请求。
这里重点介绍下 仲裁模式 : 在仲裁模式下,ZooKeeper复制集群中的所有服务器的数据树。但如果让一个客户端等待每个服务器完成数据保存后再继续,延迟问题将无法接受。例如有5台机器,必须有3台进行操作确认;4台机器,必须有3台进行操作确认;可以看出,奇数台的性价比高些。
-
会话
在对ZooKeeper集合执行任何请求前,一个客户端必须先与服务建立会话。会话的概念非常重要,对ZooKeeper的运行也非常关键。客户端提交给ZooKeeper的所有操作均关联在一个会话上。当一个会话因某种原因而中止时,在这个会话期间创建的临时节点将会消失。
客户端通过TCP协议与服务器进行连接并通信, 但当会话无法与当前连接的服务器继续通信时,会话就可能转移到另一个服务器上。会话提供了顺序保障,这就意味着同一个会话中的请求会以FIFO(先进先出)顺序执行
2.3 开始使用ZooKeeper(MAC OS)
-
首先从官网下载zookeeper压缩包 https://zookeeper.apache.org/releases.html
-
找到需要下载的包 Apache ZooKeeper 3.7.0 Source Release(asc, sha512)
-
得到压缩包 apache-zookeeper-3.7.0-bin.tar.gz
-
进入相应文件夹,解压压缩包
tar -zxvf ./apache-zookeeper-3.7.0-bin.tar.gz
-
进入解压后的文件目录,修改配置文件,位于conf文件夹下, 重命名为 zoo.cfg
-
修改 zoo.cfg, 可以修改 DataDir 文件夹位置,用来zookeeper建目录用的
-
启动
./bin/zkServer.sh start
上面这个命令是后台运行
如果想在前台运行并输出命令,可以用
./bin/zkServer.sh start-foreground
-
暂停
./bin/zkServer.sh stop
-
会话建立
./bin/zkCli.sh
-
建立节点,删除并退出会话