标签:连接 服务器 osal obs 接收 服务 following 生成 准备
ZAB协议是Zookeeper Atomic Broacdcast的缩写,译为原子广播协议。解决了zookeeper中事务的最终一致性。
当集群启动时,或者leader节点挂掉,ZAB协议就会进入到恢复模式,然后会选举出新的leader,当leader服务器选举出来后,并且一半以上的节点与leader数据同步后,ZAB退出恢复模式。
当集群中有过半的Follower节点与Leader完成了状态同步,这时候就进入到了消息广播模式。
如果有新的节点加入集群,则会进入到数据恢复模式,与leader同步。
这里要说明一下,首先客户端连接随便一个服务器,如果不是leader会转发消息,最后都是leader与客户端连接。
消息广播是一个二次提交的过程。
崩溃回复包括两部分,第一个是leader选举,另一个是数据恢复。
假如在消息广播中,leader给所有follower复制提案后,挂掉了,怎么处理;或者
leader收到ack,发送commit后崩溃了,怎么处理。
针对这两个问题,zab规定了两个原则
选举出新leader后,新leader具有最高的zxid,leader服务器会首先确认事务日志中的所有proposal是否已经被集群过半的服务器commit。过半提交后,leader就认为数据同步了。leader会将这些follwer服务器加入到可用服务列表中。
ZAB中的事务编号zxid是一个64为的数字。高32位是epoch,用来标识leader是否改变,每一次新的leader选出来,就会从这个 Leader 服务器上取出本地事务日志充最大编号 Proposal 的 zxid,并从 zxid 中解析得到对应的 epoch 编号,然后再对其加1,之后该编号就作为新的 epoch 值,并将低32位数字归零,由0开始重新生成zxid。;低32位是一个递增的计数器,客户端每有一个事务请求,leader会有一个propoal并对计数器+1。高 32 位代表了每代 Leader 的唯一性,低 32 代表了每代 Leader 中事务的唯一性。
基于以上,当 Follower 链接上 Leader 之后,Leader 服务器会根据自己服务器上最后被提交的 ZXID 和 Follower 上的 ZXID 进行比对,比对结果要么回滚,要么和 Leader 同步。
标签:连接 服务器 osal obs 接收 服务 following 生成 准备
原文地址:https://www.cnblogs.com/hhachi/p/12786552.html