收藏:
(书)从Paxos到Zookeeper
(博客)Zookeeper 3、Zookeeper工作原理(详细)

一、 概述:高效的分布式协调服务

它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

Zookeeper

Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。
为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的统治时期。低32位用于递增计数。
每个Server在工作过程中有三种状态:

  • LOOKING:当前Server不知道leader是谁,正在搜寻
  • LEADING:当前Server即为选举出来的leader
  • FOLLOWING:leader已经选举出来,当前Server与之同步

    角色

  • 领导者(leader):负责进行投票的发起和决议,更新系统状态

  • 学习者(learner):包括跟随者(follower)和观察者(observer),follower用于接受客户端请求并想客户端返回结果,在选主过程中参与投票Observer可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度
  • 客户端(client):请求发起方

Zookeeper 的读写机制

Zookeeper是一个由多个server组成的集群
一个leader,多个follower
每个server保存一份数据副本
全局数据一致
分布式读写
更新请求转发,由leader实施
**

Zookeeper节点数据操作流程

image.png
注:1.在Client向Follwer发出一个写的请求
  2.Follwer把请求发送给Leader
  3.Leader接收到以后开始发起投票并通知Follwer进行投票
  4.Follwer把投票结果发送给Leader
  5.Leader将结果汇总后如果需要写入,则开始写入同时把写入操作通知给Leader,然后commit;
  6.Follwer把请求结果返回给Client

Follower主要有四个功能:

    1. 向Leader发送请求(PING消息、REQUEST消息、ACK消息、REVALIDATE消息);
  • 2 .接收Leader消息并进行处理;
  • 3 .接收Client的请求,如果为写请求,发送给Leader进行投票;
  • 4 .返回Client结果。

Follower的消息循环处理如下几种来自Leader的消息:

  • PING消息: 心跳消息;
  • PROPOSAL消息:Leader发起的提案,要求Follower投票;
  • COMMIT消息:服务器端最新一次提案的信息;
  • UPTODATE消息:表明同步完成;
  • REVALIDATE消息:根据Leader的REVALIDATE结果,关闭待revalidate的session还是允许其接受消息;
  • SYNC消息:返回SYNC结果到客户端,这个消息最初由客户端发起,用来强制得到最新的更新。