ZAB 协议原理介绍

ZAB 协议原理介绍

标签:ZAB Leader选举


概述

在分布式系统中,对于数据一致性的问题,Paxos 算法是比较主流的解决思路,像谷歌的 Chubby 就是基于 Paxos 算法的思想实现的。但在目前使用比较广泛的开源分布式锁服务 ZooKeeper 中,并没有使用采用 Paxos 算法,而是基于 ZAB 协议实现的。

ZAB(ZooKeeper Atomic Broadcast)协议是专门为 ZooKeeper 设计的一种支持崩溃恢复的原子广播协议,与 Paxos 算法最大的区别就是增加了崩溃恢复的功能。

从整体上来看,ZAB 协议包括两种模式:崩溃恢复模式和消息广播模式,更进一步,可以划分为三个阶段:发现、同步和广播。

下面,依次对这三个阶段进行详细的介绍。

发现

该阶段对应于 ZooKeeper 中就是 Leader 的选举过程。

当整个服务框架在启动时,或者集群中的 Leader 出现网络中断、崩溃退出或异常重启时,就会进入该阶段,也就是进行 Leader 选举。

进行 Leader 选举时分两种情况:集群启动和 Leader 重新选举。

在介绍具体的选举过程之前,先对在选举过程中涉及到的一些基本术语进行简单的说明。

基本术语

zxid

ZooKeeper 的事务 id,全局唯一,每次 ZooKeeper 的状态进行更新的时候,zxid 都会增加。也就是说,zxid 的值越大,说明对应的 ZooKeeper 集群的数据是越新的。

zxid 的值有64位,其中高 32 位是 epoch 的值,低 32 位代表的是在同一个 Leader 周期内的事务 id。

epoch

zxid 的高 32 位的值,主要用来标识不同的 Leader 周期。

因为在 ZooKeeper 集群的运行过程中,每个服务器都有可能由于各种原因崩溃或下线,其中当然也会包括 Leader 服务器。因此肯定为经历多次的 Leader 选举,而 epoch 的值就是为了区分不同的 Leader 周期,以便于选举之后的数据同步。

有关同步的过程会在后面进行介绍。

server id

ZooKeeper 集群中每个服务器都有一个全局唯一的 server id,用来标识不同的服务器。

选举过程

在整个 ZooKeeper 集群启动或 Leader 崩溃需要重新选举时,需要选举出一个 Leader 服务器来对外提供服务。选举 Leader 的大体过程如下:

  • 每个 Follower 都向其他所有的节点发送投票信息,选举自己为 Leader。投票中主要包含的信息为 zxid 和 server id。
  • 同时,每个 Follower 都会在本地保存一个已收到的投票集合,保存了收到的投票信息。
  • Follower 收到其他节点的投票信息后,会跟自身进行相应的比较:首先比较 zxid 的大小,如果相等,再比较 server id 的大小。如果收到的投票的 zxid 或 server id 比自己的大,那么更新本地已收到的投票信息。
  • 如果本地收到的投票信息中已经有某个节点获得了半数以上的投票,发送投票,将该节点选为 Leader,然后停止本节点的选举过程。

同步

当集群中的 Leader 被选举出来之后,集群中其他的 Follower 节点需要跟 Leader 做数据同步,保证数据的一致性。

大体流程为:

  • 新选举出来的 Leader 向所有的 Follower 发送最新的 epoch。
  • 每个 Follower 接收到 Leader 发送的 epoch 值后,如果发现 epoch 和自己的值相同,则进行数据同步操作,实际上就是执行一系列的事务操作。
  • 当 Leader 收到超过半数的 Follower 的确认反馈后,向所有 Follower 发送 commit 消息。
  • 到 Follower 接收到 commit 消息后,会依次处理并提交所有未处理的事务。

广播

在 ZooKeeper 集群完成同步后,整个集群就可以对外提供服务,也就是可以接收客户端的事务请求了。此时就进入了广播阶段。

ZooKeeper 进行消息广播的流程如下:

  • 当 Leader 接收到来自客户端的事务请求时,会生成对应的事务,然后根据 zxid 的顺序将每个事务发送给所有的 Follower。
  • Follower 根据接收到的消息顺序,依次处理事务。事务处理完成后,将结果反馈给 Leader。
  • 当 Leader 收到超过半数的 Follower 的确认信息后,就会向所有的 Follower 发送 commit 消息。
  • Follower 接收到 Leader 的 commit 消息后,就会进行事务的提交。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 一个真正的写数据流程是怎么样的?一个真正的读数据流程是怎么样的?一个真正的同步数据流程是怎么样的?从哪里到哪里?什...
    时待吾阅读 4,001评论 0 14
  • Apache Zookeeper是由Apache Hadoop的子项目发展而来,于2010年11月正式成为Apac...
    olostin阅读 6,091评论 2 9
  • Zookeeper简介 Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用...
    技术学习阅读 13,153评论 3 34
  • ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于...
    Prize阅读 240评论 0 1
  • 简介 ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实...
    jiangmo阅读 818评论 0 2