ZAB的架构 - ZooKeeper原子广播协议

背景

ZooKeeper支持客户端读取和更新具有高可用性的键值对。通过将数据复制到多个节点并让客户端从任何节点读取来实现高可用性。对Zookeeper的设计至关重要的是每个状态变化相对于以前的状态是增量的观察,所以对状态变化的顺序有隐含的依赖性。Zookeeper Atomic Broadcast(ZAB)是驱动ZooKeeper复制订单保证的协议。它还处理选举领导和恢复失败的领导和节点。这篇文章是关于ZAB的。

定义

领导者和追随者 - 在ZooKeeper群集中,其中一个节点具有领导角色,其余的则具有追随者角色。领导者负责接受来自客户端的所有进入状态更改,并将其复制到自己和跟随者。读请求在所有跟随者和领导者之间进行负载平衡。

交易 - 领导传播给其追随者的客户状态更改。

'e' - 领导者的时代。时代是一个领导者在他开始领导时产生的整数,应该大于以前领导人的时代。

'c' - 由领导者生成的序列号,从0开始并增加。它与历元一起使用以对传入的客户端状态更改进行排序。

“史前” - 追随者的历史排队。用于按照到达的顺序提交进入的交易。

未完成的交易 - F.History中具有小于当前COMMIT序列号的序列号的事务集。

ZAB要求

复制保证

可靠的交付 -如果事务M由一个服务器提交,则最终将由所有服务器执行。

总订单 -如果事务A在一个服务器之前在事务B之前提交,则A将由所有服务器在B之前提交。如果A和B是提交消息,则在B或B将在A之前提交时,A将被提交。

因果订单 -如果在B的发件人提交交易A之后发送交易B,则必须在B之前订购A。如果发送方在发送B之后发送C,则C必须在B之后订购。

只要大多数(法定人数)的节点上升,就会复制事务。

当节点发生故障并且稍后重新启动时 - 它应该赶上在关闭时被复制的事务。

ZAB实施

客户端从任何ZooKeeper节点读取。

客户端向任何ZooKeeper节点写入状态更改,并且此状态更改将转发到前导节点。

ZooKeeper使用两阶段提交协议的变体将事务复制到关注者。当领导者从客户端收到更改更新时,会使用续集号c和领导者的纪元e(见定义)生成交易,并将交易发送给所有关注者。追随者将事务添加到其历史队列,并向领导者发送ACK。当领导者从法定人数收到确认信息时,会发送该交易的法定人数COMMIT。接受COMMIT的跟随者将提交此事务,除非c高于其历史队列中的任何序列号。在提交之前,将等待收到COMMIT的所有早期交易(未偿还交易)。

参考文献[4]

在领导崩溃时,节点执行恢复协议,以便在恢复常规操作之前达成共同的一致状态,并建立新的领导者来广播状态更改。

为了执行领导角色,节点必须具有一定数量的节点的支持。由于节点可能会崩溃和恢复,因此可能会有一段时间的多个领导者,实际上相同的节点可能多次执行节点角色。

节点的生命周期:每个节点一次执行该协议的一次迭代,并且在任何时间,进程可以通过进行到阶段0来删除当前迭代并开始一个新的迭代。

第0期 - 未来的领导人选举

阶段1 -发现

阶段2 - 同步

阶段3 - 广播

第1和第2阶段对于使集合处于相互一致的状态,特别是在从碰撞中恢复时尤其重要。

第一阶段 - 发现

在这个阶段,追随者与潜在的领导者进行沟通,以便领导者收集关于其追随者接受的最近交易的信息。这个阶段的目的是发现法定人数中接受交易的最新序列,并建立一个新的时期,以便以前的领导人不能提交新的提案。因为追随者的法定人数已经被前任领导人所接受了所有的改变 - 那么它承诺,目前法定人数中的至少一个追随者在其历史中排队了前任领导人接受的所有改变,这意味着新的领导人将把他们当作好。第1阶段精确算法可用。

阶段2 - 同步

同步阶段总结了协议的恢复部分,使用发现阶段中领导者更新的历史记录同步集群中的副本。领导人与追随者沟通,提出历史上的交易。如果自己的历史落后于领导者的历史,追随者就承认这些建议。当领导人从法定人数中得到确认时,会向他们发出提交信息。在这一点上,据说领导人已经建立起来了,而不是再有前途了。第2阶段精确算法可用。

阶段3 - 广播

如果没有发生崩溃,对等体将无限期地停留在此阶段,一旦ZooKeeper客户端发出写请求,就执行广播事务。第3阶段精确算法可用。

为了检测故障,Zab在追随者及其领导者之间采取周期性的心跳信息。如果领导者在给定的超时期间没有收到来自法定人数的心跳,则放弃其领导,并转向州选和阶段0.如果在超时期间没有从其领导层收到心跳,追随者也将参加领导选举阶段。

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

推荐阅读更多精彩内容