一、集群角色

leader:领导者

可以接收client请求,也接受其他server转发的写请求,负责更新系统状态。

follower:

可以接收client请求,如果是写请求将转发给leader来更新系统状态。

observer:

同follower,不参与投票选举过程,也不参与写操作的过半写成功策略。

一、Session会话

一个客户端连接是指客户端和服务器之间的一个TCP长连接。一个会话,由zookeeper分配唯一的会话id
客户端以特定的时间间隔(tickTime)发送心跳以保持会话有效,也能够向Zookeeper发送请求并接收响应,同时还能够通过该连接接收服务器的Watch事件通知。
超过会话超时时间未收到客户端的心跳,则判定客户端死了(默认2倍tickTime)。在超时时间内连接上集群任意一台服务器,之前创建的会话依然有效。
会话中的请求按FIFO顺序执行。

二、数据模型

1.层次名称空间

类似unix文件系统,以/为根。
区别:节点可以包含与之关联的数据以及子节点(既是文件也是文件夹)
节点的路径总是表示为规范的、绝对的、斜杠分割的路径。

2.znode

名称唯一,命名规范
节点类型:持久、顺序、临时、临时顺序
节点数据构成

2.1znode-命名规范

image.png

2.2znode-节点类型

image.png

2.3 znode-数据结构

节点数据:存储的协调数据(状态信息、配置、位置信息等)
节点元数据:stat结构
数据量上限:1M

元数据stat数据结构

Stat中记录了这个Znode的三个数据版本,分别是version(当前Znode版本)、cversion(当前Znode子节点版本)、和aversion(当前Znode的ACL版本)
image.png

3.zookeeper中的时间

多种方式跟踪时间
image.png

三、watch监听机制

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

四、ACL

Zookeeper采用ACL(Access Control Lists)策略来进行权限控制。
1.CREATE:创建子节点的权限
2.READ:获取节点数据和子节点列表的权限
3.WRITE:更新节点数据的权限
4.DELETE:删除子节点的权限
当客户端对一个数据节点添加了权限信息后,对于删除操作而言,其作用范围使其子节点。
5.ADMIN:设置节点ACL的权限

五、zookeeper特性

1.顺序一致性:保证客户端操作是按顺序生效的
2.原子性:更新成功或失败,没有部分结果
3.单个系统映像:无论连接到哪个服务器,客户端都看到相同的内容
4.可靠性:数据变更不会丢失,除非被客户端覆盖修改
5.及时性:保证系统的客户端当时读取到的数据是最新的

六、zookeeper设计目标

1.简单的数据模型

Zookeeper使得分布式程序能够通过一个共享的、树型结构的名字空间进行相互协调

2.可以构建集群

3.顺序访问

对于来自客户端的每一个更新请求,Zookeeper都会分配一个全局唯一的递增编号,这个递增编号反映了所有事务操作的先后顺序

4.高性能

Zookeeper将全量数据存储在内存中,并直接服务于客户端的非事务请求,因此适用于以读操作为主的应用场景。