Zookeeper —— 初识

什么是 Zookeeper

Zookeeper 是一个开放源代码的分布式协调服务,由雅虎建立,是 Google Chubby 的开源实现;node

Zookeeper 是典型的分布式数据一致性的解决方案,分布式应用程序能够基于它来实现:数据发布/订阅负载均衡命名服务分布式锁等;api

Zookeeper 基本概念

集群角色:

Zookeeper 中有 Leader、Follower 和 Observer 三种角色,Leader 为客户端提供读和写服务,Follower 和 Observer 只提供读服务;服务器

其中 Observer 不参与 Leader 过程,也不参与写操做的“过半写成功”的策略,因此增长 Observer 机器能够在不影响写性能的状况下增长读性能;app

Leader:

事务请求的惟一调度和处理者,保证集群事务处理的顺序性;负载均衡

集群内部各服务器的调度者;分布式

Follower:

Follower 服务器是 ZK 集群状态的跟随者。性能

处理客户端非事务请求,转发事务请求给 Leader 服务器;spa

参与事务请求 Proposal 的投票;开放源代码

参与 Leader 选举投票;日志

Observer:

ZK 3.3.0 引入的全新服务器角色;

观察 ZK 集群的最新状态变化并将这些状态变动同步过来。

对于非事务请求能够独立处理,但事务请求会转发给 Leader 服务器;

也不参与任何形式的投票,包括事务请求 Proposal 和 Leader 选举投票;

Observer 只提供非事务服务;

做用:在不伤害写性能的状况下扩展 ZK;

数据模型

文件系统

Zookeeper 也使用文件系统组织系统中存储的资源,结构以下所示:

  • /

  • /app1/c1

  • /app1/c2

  • /app1/c3

  • /app2/...

其并无文件和文件夹的概念,只有 Znode 概念,它既能够做为容器存储数据,也能够持有其余 Znode 造成父子关系;

ZNode(数据节点)

ZK 的视图结构和标准的 Unix 文件系统很是相似,如:/app1/c1

Znode 是 ZK 中数据的最小单元;

每一个 ZNode 上均可以保存数据;

同时还能够挂载子节点,构成一个层次化的命名空间,称之为

ZXID(事务ID)

数据节点建立、删除、节点内容更新和客户端会话建立与失效等操做,都是事务操做;

每个事务请求都会为其分配一个全局惟一的事务 ID,用 ZXID 表示,一般是 64 位数字;

ZNode 节点特性

节点类型

持久节点(persistent)

建立后一直存在于 ZK 服务器上,直到主动删除

持久顺序节点(persistent——sequential)

增长顺序的特性,每一个父节点都会维护它的第一级子节点的顺序;

ZK 自动会给节点名加上一个数字后缀,后缀的上限是整型的最大值;

临时节点(ephemeral)

临时节点的生命周期和客户端的会话绑定,会话结束则节点消失;

临时节点不能有子节点,即临时节点只能做为叶子节点;

临时顺序节点(ephemeral_sequential)

增长了顺序特性;

节点状态

looking:

  • 不肯定 leader 状态(选主中);

  • 对外不提供服务;

following:

  • 跟随者状态;

  • 做为系统的从节点,接收主节点的更新并写入本地日志;

leading:

  • 领导者状态;

  • 做为系统的主节点,接收客户端更新,写入本地日志,并通知从节点复制;

observing:

  • 观察者状态;

  • 表示当前角色是 Observer,与 Follower 不一样是不参与投票和选举;

相关文章
相关标签/搜索