本文目录
zookeeper 是什么?
zookeeper 一些基本概念
zookeeper 安装
下面部分在下一篇介绍:
2pc 3pc paxos zab
zookeeper 能做什么?
zookeeper 是什么?
ZooKeeper 是一个开源的分布式协调服务,ZooKeeper 框架最初是在“Yahoo!"上构建的,用于以简单而稳健的方式访问他们的应用程序。
后来,Apache ZooKeeper 成为 Hadoop,HBase 和其他分布式框架使用的有组织服务的标准。
ZooKeeper 是一个典型的分布式数据一致性解决方案,分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。
ZooKeeper 一个最常用的使用场景就是用于担任服务生产者和服务消费者的注册中心。
如下图所示,在 Dubbo 架构中 ZooKeeper 就担任了注册中心这一角色。
zookeeper 一些基本概念
会话(Session)
Session 指的是 ZooKeeper 服务器与客户端会话。在 ZooKeeper 中,一个客户端连接是指客户端和服务器之间的一个 TCP 长连接。
客户端启动的时候,首先会与服务器建立一个 TCP 连接,从第一次连接建立开始,客户端会话的生命周期也开始了。
通过这个连接,客户端能够通过心跳检测与服务器保持有效的会话,也能够向 Zookeeper 服务器发送请求并接受响应,同时还能够通过该连接接收来自服务器的 Watch 事件通知。
Session 的 sessionTimeout 值用来设置一个客户端会话的超时时间。
当由于服务器压力太大、网络故障或是客户端主动断开连接等各种原因导致客户端连接断开时,只要在 sessionTimeout 规定的时间内能够重新连接上集群中任意一台服务器,那么之前创建的会话仍然有效。
在为客户端创建会话之前,服务端首先会为每个客户端都分配一个 sessionID。
由于 sessionID 是 Zookeeper 会话的一个重要标识,许多与会话相关的运行机制都是基于这个 sessionID 的。
因此,无论是哪台服务器为客户端分配的 sessionID,都务必保证全局唯一。
数据结点 (Znode)
有四种类型的znode:
1、PERSISTENT-持久化目录节点
客户端与zookeeper断开连接后,该节点依旧存在
2、PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点
客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
3、EPHEMERAL-临时目录节点
客户端与zookeeper断开连接后,该节点被删除
4、EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点
客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号
版本
在前面我们已经提到,Zookeeper 的每个 ZNode 上都会存储数据,对应于每个 ZNode,Zookeeper 都会为其维护一个叫作 Stat 的数据结构。
Stat 中记录了这个 ZNode 的三个数据版本,分别是:
version(当前 ZNode 的版本)
cversion(当前 ZNode 子节点的版本)
aversion(当前 ZNode 的 ACL 版本)
Watcher
ZooKeeper 允许用户在指定节点上注册一些 Watcher,并且在一些特定事件触发的时候,ZooKeeper 服务端会将事件通知到感兴趣的客户端上去,该机制是 ZooKeeper 实现分布式协调服务的重要特性。
ACL
ZooKeeper 采用 ACL(AccessControlLists)策略来进行权限控制,类似于 UNIX 文件系统的权限控制。
ZooKeeper 定义了 5 种权限:
-CREATE: 创建子节点的权限。
-READ: 获取节点数据和子节点列表的权限。
-WRITE: 更新节点数据权限。
-DELETE: 删除子节点的权限。
-ADMIN: 设置结点 ACL 的权限。
其中尤其需要注意的是,CREATE 和 DELETE 这两种权限都是针对子节点的权限控制。
zookeeper 安装
1.安装 jdk
2.安装 Zookeeper. 在官网 http://zookeeper.apache.org/ 下载 zookeeper。 我下载的是 zookeeper-3.4.12 版本。
解压 zookeeper-3.4.6 至 D:\machine\zookeeper-3.4.12.
在 D:\machine 新建 data 及 log 目录。
3.ZooKeeper 的安装模式分为三种,分别为:单机模式(stand-alone)、集群模式和集群伪分布模式。ZooKeeper 单机模式的安装相对比较简单,如果第一次接触 ZooKeeper 的话,建议安装 ZooKeeper 单机模式或者集群伪分布模式。
安装单击模式。 至 D:\machine\zookeeper-3.4.12\conf 复制 zoo_sample.cfg 并粘贴到当前目录下,命名 zoo.cfg.
目录结构
bin 存放系统脚本
conf 存放配置文件
contrib zk附加功能支持
dist-maven maven仓库文件
docs zk文档
lib 依赖的第三方库
recipes 经典场景样例代码
src zk源码
其中 bin 和 conf 是非常重要的两个目录,平时也是经常使用的。
先看下bin目录
其中
zkServer 为服务器,启动后默认端口为 2181
zkCli 为命令行客户端
zoo.cfg 配置参数
Conf 目录为配置文件存放的目录,zoo.cfg 为核心的配置文件
这里面的配置很多,这配置是运维的工作,目前没必要,也没办法全部掌握。
clientPort:参数无默认值,必须配置,用于配置当前服务器对外的服务端口,客户端必须使用这端口才能进行连接
dataDir:用于存放内存数据库快照的文件夹,同时用于集群的 myid 文件也存在这个文件夹里(注意:一个配置文件只能包含一个 dataDir 字样,即使它被注释掉了。)
dataLogDir:用于单独设置 transaction log 的目录,transaction log 分离可以避免和普通 log 还有快照的竞争
dataDir:新安装 zk 这文件夹里面是没有文件的,可以通过 snapCount 参数配置产生快照的时机
tickTime:心跳时间,为了确保连接存在的,以毫秒为单位,最小超时时间为两个心跳时间
initLimit:多少个心跳时间内,允许其他 server 连接并初始化数据,如果 ZooKeeper 管理的数据较大,则应相应增大这个值
syncLimit:多少个 tickTime 内,允许 follower 同步,如果 follower 落后太多,则会被丢弃。