一.概念(文件系统):
开源的分布式协调服务,是Google的chubbly一个开源的实现,他是一个分布式提供一致性的软件。
二.zookeeper提供的功能:
- 配置维护
- 域名服务
- 分布式锁
- 主服务
三.Zookeeper的特点:
- 简单
zookeeper的核心是一个精简的额文件系统,它支持一个简单的操作和一些抽象操作
- 丰富
可实现一些协调数据结构和协议,例如:分布式队列,分布式锁和一组统计别节点中的“领导者选举”
- 高可靠
支持集群模式,可以很容易解决单点故障问题
- 松耦合交互
不同进程之间交互不需要了解彼此,甚至可以不必同时存在,某进程在Zookeeper中留下消息后,该进程结束后其他进程可以读这条信息
- 资料库
Zookeeper实现了一个关于通用协调模式的开源共享存储库,能使开源编写这类通用协议。
四.Zookeeper的角色
- 领导者
负责进行投票的发起与决议,更新系统状态。
- 学习者 (跟随者 , 观察者)
follow用户接受客户请求,并向客户返回结果,在选举过程中参与投票
Observer可以接受客户端链接,将写请求给学习者,但观察者不参与投票,只是同步学习者的状态 , 目的是为了扩展系统,提高系统的读写速度。
- 客户端
请求发起方。
五. ZooKeeper数据模型
- - 层次化的目录结构,命名符合常规文件系统规范
- - 每个节点在zookeeper中叫做**znode**,并且其有一个唯一的路径标识
- - 节点znode可以包含数据和子节点,但是EPHEMERAL类型的节点不能有子节点
- - znode中的数据可以有多个版本,比如某一个路径下存有多个数据版本,那么查询这个路径下的数据就需要带上版本
- - 客户端应用可以在节点上设置监视器
- - 节点不支持部分读写,而是一次性完整读写
# 6. ZooKeeper的节点
- zookeeper中的节点包含下面两个类型的节点
- 临时节点(ephemeral)
- 持久节点(persistent)
**znode的类型在创建时确定并且之后不能再修改**
**znode默认不指定类型是持久节点**
- ephemeral类型的节点
- 在节点客户端会话结束时,会将zookeeper中的节点删除
- 不能有子节点,只能有数据
- persistent类型的节点
-节点不依赖与客户端会话,只有当客户端明确要删除该persistent节点时才会被删除
- ZooKeeper的客户端和服务器通信采用长连接方式 ,每个客户端和服务器通过心跳来保持连接,这个连接状态称之为session ,如果znode是临时节点,这个seesion失效,znode也就删除了
7. ZooKeeper中的选举机制
- 服务器的ID
- 分别1,2,3
- 编号越大在选择算法中的**权重**越大
- 数据的ID
- 服务器中存放的最大数据ID.
- 值越大说明数据越新,在选举算法中数据越新权重越大
- 编辑时钟
- 投票的次数
- 同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加,然后与接收到的其它服务器返回的投票信息中的数值相比,根据不同的值做出不同的判断
- 选举状态
- LOOKING,竞选状态。
- FOLLOWING,随从状态,同步leader状态,参与投票。
- OBSERVING,观察状态,同步leader状态,不参与投票。
- LEADING,领导者状态。
- 选举信息的内容
在投票完成后,需要将投票信息发送给集群中的所有服务器,它包含如下内容。
- 服务器ID
- 数据ID
- 逻辑时钟
- 选举状态
- 选举机制的结果
- zk启动之后通过选举机制,来选举出来一个leader
8.zookeeper写文件流程
客户端发出一个请求,服务器follower接收之后,会将数据发送个leader,当leader同步到超过一半的节点时,会给客户端返回一个结果,剩下 的节点,zookeeper会内部自己同步。
zookeeper 中每个节点都有完整的数据。