目录

一、zoo.cfg参数

二、集群角色

三、节点结构

四、节点类型

五、Stat数据结构

六、Watcher机制


Zookeeper是具有高可用、高性能、一致性的开源协调服务框架,它提供了一些基本服务:统一命名服务、布式协调、存储数据、监听与通知等功能。

官网http://zookeeper.apache.org/

源码https://github.com/apache/zookeeper

一、zoo.cfg参数

参数

意义

tickTime

2000

syncLimit

Leader和follower之间的通讯时长 最长不能超过initLimt*ticktime

initLimt

接受客户端链接zk初始化的最长等待心跳时长 initLimt*ticktime

dataDir

数据目录

dataLogDir

日志文件

clientPort

客户端链接服务端端口号

Server.A=B:C:D

A:第几号服务器 B服务IP C代表Leader和follower通讯端口 D备用选leader端口

二、集群角色

ZooKeeper有3种集群角色:Leader、Follower、Observer 。

Leader

Leader作为整个ZooKeeper集群的主节点,负责响应所有对ZooKeeper状态变更的请求。它会将每个状态更新请求进行排序和编号,以便保证整个集群内部消息处理的FIFO,写操作都走leaderzk里面leader只有一个

Follower 
Follower的逻辑就比较简单了。除了响应本服务器上的读请求外,follower还要处理leader的提议,并在leader提交该提议时在本地也进行提交。另外需要注意的是,leader和follower构成ZooKeeper集群的法定人数,也就是说,只有他们才参与新leader的选举、响应leader的提议。 帮助leader处理读请求,没有写请求,有投票权

Observer :
如果ZooKeeper集群的读取负载很高,或者客户端多到跨机房,可以设置一些observer服务器,以提高读取的吞吐量。Observer和Follower比较相似,只有一些小区别:首先observer不属于法定人数,即不参加选举也不响应提议;其次是observer不需要将事务持久化到磁盘,一旦observer被重启,需要从leader重新同步整个名字空间。 可以处理读请求,没有写请求,没有投票权利

三、节点结构

ZooKeeper操作和维护的为一个个数据节点,称为 znode,采用类似文件系统的层级树状结构进行管理。如果 znode 节点包含数据则存储为字节数组(byte array)。节点名称不能重复。

Zookeeper重要知识点梳理

四、节点类型

ZooKeeper 共有 4 种节点类型默认是PERSISTENT类型,对应的源码:org.apache.zookeeper.CreateMode

PERSISTENT:持久类型,如果不手动删除节点一直存在

Zookeeper重要知识点梳理

EPHEMERAL:临时类型,客户端session失效就会随着删除节点,临时节点不能有子节点

Zookeeper重要知识点梳理

PERSISTENT_SEQUENTIAL:持久有序类型,如果不手动删除节点一直存在,节点名称有序自增

Zookeeper重要知识点梳理

EPHEMERAL_SEQUENTIAL:临时有序类型,客户端session失效就会随着删除节点,临时节点不能有子节点,节点名称有序自增

Zookeeper重要知识点梳理

五、Stat数据结构

Stats数据结构包括状态信息、版本、权限相关属性,记录 ZNode 的三个数据版本,分别是version(当前ZNode的版本)、cversion(当前ZNode子节点的版本)和aversion(当前ZNode的ACL版本)。对应源码:org.apache.zookeeper.data.Stat。

属性含义如下:

状态属性

说明

czxid

节点创建时的zxid

mzxid

节点最新一次更新发生时的zxid

ctime

节点创建时的时间戳.

mtime

节点最新一次更新发生时的时间戳.

dataVersion

 节点数据的更新次数.

cversion

其子节点的更新次数

aclVersion

节点ACL(授权信息)的更新次数.

 

ephemeralOwner

如果该节点为ephemeral节点, ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是ephemeral节点, ephemeralOwner值为0. 至于什么是ephemeral节点

 

dataLength

节点数据的字节数.

numChildren

子节点个数.

ls2、get、set命令会当前节点的Stats数据结构。

Zookeeper重要知识点梳理

Zookeeper重要知识点梳理

Zookeeper重要知识点梳理

六、Watcher机制

Watcher(事件监听器),是Zookeeper中的一个很重要的特性。Zookeeper允许用户在指定节点上注册一些Watcher,并且在一些特定事件触发的时候,ZooKeeper服务端会将事件通知到感兴趣的客户端上去,该机制是Zookeeper实现分布式协调服务的重要特性。对应的源码:org.apache.zookeeper.Watcher。

KeeperState

EventType

触发条件

说明

操作

SyncConnected(3)

None(-1)

客户端与服务端成功建立连接

此时客户端和服务器处于连接状态

 

NodeCreated(1)

Watcher监听的对应数据节点被创建

Create

NodeDeleted(2)

Watcher监听的对应数据节点被删除

Delete/znode

 

NodeDataChanged(3)

Watcher监听的对应数据节点的数据内容发生变更

setDate/znode

NodeChildChanged(4)

Wather监听的对应数据节点的子节点列表发生变更

Create/child

Disconnected(0)

None(-1)

客户端与ZooKeeper服务器断开连接

此时客户端和服务器处于断开连接状态

 

Expired(-112)

None(-1)

会话超时

此时客户端会话失效,通常同时也会受到SessionExpiredException异常

 

AuthFailed(4)

None(-1)

通常有两种情况,1:使用错误的schema进行权限检查 2:SASL权限检查失败

通常同时也会收到AuthFailedException异常

 

Zookeeper重要知识点梳理

Zookeeper重要知识点梳理

Zookeeper重要知识点梳理

 

 

相关文章: