叙述ZAB集群数据同步的过程

Zookeeper中的事务都是有一个全局唯一的ID成为zxid,zxid由两部分组成:一部分为leader周期epoch,另一部分为递增计数器。

从算法的角度描述数据同步的过程:

1.1.对于准leader,集群中的所有follower向准leader发送一个自己最后接受的事务的epoch值

1.2.然后当准leader收到集群中过半的follower发送的epoch值之后,在其中选出最大的epoch值,这边可以称为e值,并加1得到e1,并将这个e1发送到集群中过半的follower。

1.3.当follower收到准leader发送的epoch值后,与自己的epoch值比较。若小于,则将自己的epoch值更新为e1,并向准leader发送ACK消息,包括epoch值和历史事务集合。

1.4.当准leader收到ACK信息后会在所有的历史事务集合中选择其中的一个历史事务集合作为初始化事务集合,该历史事务集合满足其zxid最大。

正式同步:

2.1.然后就开始正式同步了,准leader会将epoch值与初始化事务集合发给集群中过半的follow.

2.2.当follower收到后,会接受初始化事务集合里的事务,并执行,随后反馈给准leader表明自己已处理

2.3.准leader收到后给follower发送commit消息,follower收到commit后提交事务,完成数据同步。

注:在Zookeeper选举中,通过投票(内部投票与外部投票)。同步过程与上相似,但是会简单一些,因为选举得到的leader就是zxid最大的机器。若zxid一致则选取的是myid最大的机器。

猜你喜欢

转载自my.oschina.net/134596/blog/1647807
ZAB