ZooKeeper 原理解析

ZooKeeper 整体架构

1,角色描述

在这里插入图片描述

server.id=主机名:2888:3888:observer

2,架构图

在这里插入图片描述

(1)每个Server在内存中存储了一份数据;
(2)ZooKeeper启动时,从中选举一个Leader(Paxos协议);
(3)Leader负责处理数据更新等操作(Zab协议);
(4)一个更新操作成功,当且仅当大多数Server在内存中成功修改数据。

ZooKeeper 工作原理

1,Zab 协议

1,概念

ZooKeeper 的核心是原子广播,这个机制保证了各个 Server 之间的同步。实现这个机制的协议叫做 Zab 协议。

2,两种模式

  • 1,恢复模式
    在这里插入图片描述
  • 2,广播模式
    在这里插入图片描述

2,选主机制

1,选主算法

算法采用
Basic PaxosGoogle Chubby 采用
Fast PaxosZooKeeper 默认

2,选主流程

  • (1)每个 Server 启动以后都询问其它的 Server 它要投票给谁。
  • (2)对于其它 Server 的询问,Server 每次根据自己的状态都回复自己推荐的 Leader 的 myid 和上一次处理事务的 zxid。(系统启动时每个 Server 都会推荐自己)
  • (3)收到所有 Server 回复以后,就计算出 zxid 最大的那个 Server,若是 zxid 相同,则比较 myid。并将这个 Server 相关信息设置成下一次要投票的 Server。
  • (4)计算的过程中获得票数最多的 Server 为获胜者,如果获胜者的票数超过半数,则此 Server 被选为 Leader。否则,继续这个过程,直到 Leader 被选举出来。

3,思考题

假设有五台服务器组成的 ZooKeeper 集群,它们的 id 从 1-5,同时它们都是最新启动的,也就是没有历史数据,存放的数据量都是一样的。假设这些服务器依序启动,来看看会发生什么?

  • 服务器 1 启动,此时只有它一台服务器启动了,它发出去的消息没有任何响应,所以它的选举状态一直是 LOOKING 状态;
  • 服务器 2 启动,它与最开始启动的服务器 1 进行通信,互相交换自己的选举结果,由于两者都没有历史数据,所以 id 值较大的服务器 2 胜出,但是由于没有达到超过半数以上的服务器都同意选举它(这个例子中的半数以上是 3 ),所以服务器 1、2 还是继续保持 LOOKING 状态。
  • 服务器 3 启动,根据前面的理论分析,服务器 3 成为服务器 1、2、3 中的老大,而与上面不同的是,此时有三台服务器选举了它,所以它成为了这次选举的 Leader;
  • 服务器 4 启动,根据前面的分析,理论上服务器 4 应该是服务器 1、2、3、4 中最大的,但是由于前面已经有半数以上的服务器选举了服务器 3,所以它只能接收当小弟的命了。
  • 服务器 5 启动,同 4 一样,当小弟。

4,ZooKeeper Server 四种工作状态

  • (1)LOOKING:当前 Server 不知道 Leader 是谁,正在搜寻,正在选举。
  • (2)LEADING:当前 Server 即为选举出来的 Leader,负责协调事务。
  • (3)FOLLOWING: Leader 已经选举出来,当前 Server 与之同步,服从 Leader 的命令。
  • (4)OBSERVING:观察者状态。表明当前服务器角色是 Observer。

3,同步流程 (选完 Leader 之后)

  • (1)Leader 就会开始等待 Server 连接。
  • (2)Follower 连接 Leader,将最大的 zxid 发送给 Leader。
  • (3)Leader 根据 Follower 的 zxid 确定同步点。
  • (4)完成同步后通知 Follower 已经成为 UpToDate(现时)状态。
  • (5)Follower 收到 UpToDate 消息后,又可以重新接受 Client 的请求进行服务了。

4,工作流程

1,Leader 工作流程

1,功能
  • (1)恢复数据;
  • (2)维持与 Learner 的心跳,接收 Learner 请求并判断 Learner 的请求消息类型;
  • (3)Learner 的消息类型主要有 PING 消息、REQUEST 消息、ACK 消息、REVALIDATE 消息,根据不同的消息类型,进行不同的处理。
2,消息类型
PINGLearner 的心跳信息
REQUESTFollower 发送的提议信息,包括写请求及同步请求
ACKFollower 对提议的回复,超过半数的 Follower 通过,则 commit 该提议
REVALIDATE用来延长 SESSION 有效时间

2,Follower 工作流程

1,功能
  • (1)向 Leader 发送请求(PING 消息、REQUEST 消息、ACK 消息、REVALIDATE 消息);
  • (2)接收 Leader 消息并进行处理;
  • (3)接收 Client 的请求,如果为写请求,发送给 Leader 进行处理;
  • (4)返回 Client 结果。
2,消息类型
PROPOSALLeader 发起的提案,要求 Follower 投票
COMMIT服务器端最新一次提案的信息
UPTODATE表明同步完成
REVALIDATE根据 Leader 的 REVALIDATE 结果,关闭待 REVALIDATE 的 Session 还是允许其接受消息。
SYNC返回 SYNC 结果到客户端,这个消息最初由客户端发起,用来强制得到最新的更新。

3,Observer 工作流程

  • 和 Follower 唯一不同的地方就是 Observer 不会参加 Leader 发起的投票,其他一样
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值