zab协议的全称是ZooKeeper Atomic Broadcast即zookeeper“原子”“广播”协议。它规定了两种模式:崩溃恢复和消息广播

恢复模式

什么时候进入? 当整个服务框架在启动过程中

当Leader服务器出现网络中断崩溃退出与重启等异常情况

当有新的服务器加入到集群中且集群处于正常状态(广播模式),新服会与leader进行数据同步,然后进入消息广播模式

这三种情况ZAB都会进入恢复模式

干了什么?

选举产生新的Leader服务器,同时集群中已有的过半的机器会与该Leader完成状态同步,这些工作完成后,ZAB协议就会退出崩溃恢复模式

广播模式

什么时候进入?

集群状态稳定,有了leader且过半机器状态同步完成,退出崩溃恢复模式后进入消息广播模式

干了什么?

正常的消息同步,把日常产生数据从leader同步到learner的过程

1

总结一下zab协议规定的两种模式在实际操作中经历了三个步骤,如上图,下面我再详细地说下这两个过程都干了些什么

1.崩溃恢复状态 - 即选主过程

进入崩溃恢复模式说明集群目前是存在问题的了,那么此时就需要开始一个选主的过程。

zookeeper使用的默认选主算法是FastLeaderElection,它是标准的Fast Paxos算法实现,可解决LeaderElection选举算法收敛速度慢的问题(上篇文章也有提到过)。

zab协议规定的状态

LOOKING 当前集群没有leader,准备选举

FOLLOWING 已经存在leader,当前服务器为跟随者

LEADING 唯一的领导,维护与Follower间的心跳

OBSERVING 观察者状态。表明当前服务器角色是Observer

投票流程

投票的依据

投票的依据就是下面的两个id,投票即是给所有服务器发送 (myid,zxid) 信息

myid:用户在配置文件中自己配置,每个节点都要配置的一个唯一值,从1开始往后累加。

zxid:zxid有64位,分成两部分:

高32位是Leader的epoch:选举时钟,每次选出新的Leader,epoch累加1

低32位是在这轮epoch内的事务id:对于用户的每一次更新操作集群都会累加1。

注意:zk把epoch和事务id合在一起,每次epoch变化,都将低32位的序号重置,这样做是为了方便对比出最新的数据,保证了zxid的全局递增性。(其实这样也会存在问题,虽然概率小,这里就先不说了后面的文章会详细讲)。

关于发送选票

第一轮投给自己,之后每个服把上述所有信息发送给其他所有服,票箱中只会记录每一投票者的最后一票

关于接收投票

服务器会尝试从其它服务器获取投票,并记入自己的投票箱内。如果无法获取任何外部投票,则会确认自己是否与集群中其它服务器保持着有效连接。如果是,则再次发送自己的投票;如果否,则马上与之建立连接。

关于选举轮次

由于所有有效的投票都必须在同一轮次中。每开始新一轮投票自身的logicClock自增1。

接收到的logicClock大于自己的。说明自己落后了,更新logicClock后正常。 接收到的logicClock小于自己的。忽略该票。 接收到的logickClock与自己的相等,正常判断。 关于选票判断

对比自身的和接收到的(myid,zxid)

首先对比zxid高32位的选举时钟epoch 一致则对比zxid低32的事务id 仍然一致则对比用户自己配置的myid 

选完后广播选出的(myid,zxid)

关于选举结束

过半服务器选了同一个,则投票结束,根据投票结果更新自身状态为leader或者follower

还有两个问题

上面说过zookeeper是一个原子广播协议,在这个崩溃恢复的过程就体现了它的原子性,zookeeper在选主过程保证了两个问题:

     commit过的数据不丢失

     未commit过的数据丢弃

(myid,zxid)的选票设计刚好解决了这两个问题。

commit过的数据半数以上参加选举的follwer都有,而且成为leader的条件是要有最高事务id即数据是最新的。

未commit过的数据只存在于leader,但是leader宕机无法参加首轮选举,epoch会小一轮,最终数据会丢弃。

2.消息广播状态 - 即数据同步

2

如上图,client端发起请求,读请求由follower和observer直接返回,写请求由它们转发给leader。

Leader 首先为这个事务分配一个全局单调递增的唯一事务ID (即 ZXID )。

然后发起proposal给follower,Leader 会为每一个 Follower 都各自分配一个单独的队列,然后将需要广播的事务 Proposal 依次放入这些队列中去,并且根据 FIFO策略进行消息发送。

每一个 Follower 在接收到这个事务 Proposal 之后,都会首先将其以事务日志的形式写入到本地磁盘中去,并且在成功写入后反馈给 Leader 服务器一个 Ack 响应。

当 Leader 服务器接收到超过半数 Follower 的 Ack 响应后,就会广播一个Commit 消息给所有的 Follower 服务器以通知其进行事务提交,同时

Leader 自身也会完成对事务的提交。

相关阅读:

史上最全 Redis 高可用解决方案总结来了!

大数据可视化工具圈里的春秋战国

2018年值得拥有的十大大数据挖掘工具

关注中国IDC圈官方微信:idc-quan 我们将定期推送IDC产业最新资讯

查看心情排行你看到此篇文章的感受是:


  • 支持

  • 高兴

  • 震惊

  • 愤怒

  • 无聊

  • 无奈

  • 谎言

  • 枪稿

  • 不解

  • 标题党
2018-09-30 11:32:26
2018-09-30 11:14:43
大数据资讯 阿里云英国大区开服,大数据计算产品首期上线
作为阿里巴巴的旗舰级大数据计算平台,MaxCompute会向欧洲顾客提供有说服力的服务。为欧洲企业提供高性能、强安全、易操作的大数据计算服务。 <详情>
2018-09-30 11:08:44
大数据应用 大数据让国庆出行更智能:支持更多个性化选择
当前,科技手段的普遍运用给各行各业带来了深刻的变革,大数据等技术会给出行领域带来哪些变化? <详情>
2018-09-29 16:51:06
大数据资讯 阿里城市大脑架构全揭秘 打通城市数据管道
阿里巴巴达摩院官网正式上线,阿里城市大脑实验室相关内容随之付出水平。该实验室致力于通过互联网和人工智能,打通城市数据管道,发掘数据价值,构建城市新的基础设施。 <详情>
2018-09-29 16:51:00
互联网 第五届世界互联网大会将举行 5大亮点揭秘
9月28日,国务院新闻办举行第五届世界互联网大会首场新闻发布会,介绍第五届世界互联网大会有关情况及筹备工作进展。 <详情>
调查显示:中国企业率先采用对象存储
2018-12-13 19:17:40
IDCC2018|奥飞数据COO杨培峰:中国IDC企业转型与出海的思考
2018-12-13 18:26:43
IDCC2018|中软国际数据业务总裁贾丕星:差异化行业的数据资产管理特征思考
2018-12-13 17:34:48
医疗大数据行业分析: 三大利好因素迎来广阔发展前景
2018-12-13 17:25:48
央视聚焦贵阳 点赞大数据加速营商环境优化
2018-12-13 17:19:11
工信部:将规范手机号二次销售业务解绑问题
2018-12-13 17:12:31
室内大数据方案支撑打造智慧商场、开拓行业数字化运营新市场
2018-12-13 17:04:07
总价6.16亿美元:澳洲电讯等四家运营商赢得澳大利亚5G频谱拍卖
2018-12-13 16:55:15
云服务市场龙虎斗:入华或入欧,暗夺转明争
2018-12-13 16:47:44
IDCC2018|腾讯云高级架构师李晓辉:腾讯云助力政府、企业数字化转型案例分享
2018-12-13 16:37:49
环信即时通讯云助力智慧树打造最大幼教互动云平台
2018-12-13 16:33:16
大数据技术标准推进委员会常务副主席魏凯:《数据资产管理白皮书3.0》发布
2018-12-13 16:32:27
IDCC2018|华为企业BG企业技术服务部大数据服务总监陈飚:大数据资产管理-从传统到智能
2018-12-13 16:27:00
白盒服务器能否成为数据中心的一个未来趋势?
2018-12-13 16:25:03
IDCC2018|中国支付清算协会业务协调三部主任丁华明:《非银行支付机构数据资产管理调研报告(2018)》解读
2018-12-13 16:23:15