一、集群角色:默认只有Leader和Follower;
•Leader:决策者,可以理解为主muster,选举产生,为客户端提供读写服务;
•Follower:跟随者,可以理解为从,只提供读的服务;
•Observer:观察者,只提供读服务,为提升集群读性能而配置,与Follower的区别在于Obserber不参与选举;
•一个 ZooKeeper 集群同一时刻只会有一个 Leader,其他都是 Follower 或 Observer。
二、会话
Session 是指客户端会话,一个客户端连接是指客户端和 ZooKeeper 服务器之间的TCP长连接;从第一次连接建立开始,客户端会话的生命周期也开始了,通过这个连接,客户端能够通过心跳检测和服务器保持有效的会话,也能够向 ZooKeeper 服务器发送请求并接受响应,同时还能通过该连接接收来自服务器的 Watch 事件通知。
•会话有一个TimeOut(超时时间),是一个设定的时间范围,在此范围内断开重连的会话依然有效。
三、数据节点
ZooKeeper 中的数据节点是指数据模型中的数据单元,称为 ZNode。ZooKeeper 将所有数据存储在内存中,数据模型是一棵树(ZNode Tree),由斜杠(/)进行分割的路径,就是一个ZNode,如 /hbase/master,其中 hbase 和 master 都是 ZNode。每个 ZNode 上都会保存自己的数据内容,同时会保存一系列属性信息。
•节点类型
1.持久节点:一旦被创建,数据节点会一直保存在Zookeeper中,除非手动删除;
2.临时节点:生命周期与客户端会话绑定,一旦会话失效那么客户端绑定的临时节点即失效。
四、版本
ZooKeeper 的每个 ZNode 上都会存储数据,对应于每个 ZNode,ZooKeeper 都会为其维护一个叫作 Stat 的数据结构,Stat 中记录了这个 ZNode 的三个数据版本,分别是 version(当前ZNode的版本)、cversion(当前ZNode子节点的版本)和 aversion(当前 ZNode 的 ACL 版本);
五、状态信息
每个 ZNode 除了存储数据内容之外,还存储了 ZNode 本身的一些状态信息。用 get 命令可以同时获得某个 ZNode 的内容和状态信息。
六、事务操作
在ZooKeeper中,能改变ZooKeeper服务器状态的操作称为事务操作。一般包括数据节点创建与删除、数据内容更新和客户端会话创建与失效等操作。对应每一个事务请求,ZooKeeper 都会为其分配一个全局唯一的事务ID,用 ZXID 表示,通常是一个64位的数字。每一个 ZXID 对应一次更新操作,从这些 ZXID 中可以间接地识别出 ZooKeeper 处理这些事务操作请求的全局顺序;
七、Watcher
Watcher(事件监听器),是 ZooKeeper 中一个很重要的特性。ZooKeeper允许用户在指定节点上注册一些 Watcher,并且在一些特定事件触发的时候,ZooKeeper 服务端会将事件通知到感兴趣的客户端上去。该机制是 ZooKeeper 实现分布式协调服务的重要特性。
八、Acl(访问控制列表)
ZooKeeper 采用 ACL(Access Control Lists)策略来进行权限控制。ZooKeeper 定义了如下5种权限:
1. CREATE: 创建子节点的权限
2. READ: 获取节点数据和子节点列表的权限
3. WRITE:更新节点数据的权限
4. DELETE: 删除子节点的权限
5. ADMIN: 设置节点ACL的权限