Skip to content

Latest commit

 

History

History
40 lines (11 loc) · 1.35 KB

131.md

File metadata and controls

40 lines (11 loc) · 1.35 KB

131、崩溃恢复时选举出来的Leader是如何跟其他Follower进行同步的?

新选举出来一个leader之后,本身人家会挑选已经收到的事务zxid里最大的那个follower作为新的leader。

5个机器,1leader + 4个follower

1个leader把proposal发送给4个follower,其中3个folower(过半)都收到了proposal返回ack了,第四个follower没收到proposal

此时leader执行commit之后自己挂了,commit没法送给其他的follower,commit刚发送给一个follower

剩余的4个follower,只要3个人投票一个人当leader,就是leader

假设那3个收到proposal的follower都投票第四台没有收到proposal的follower当心的leader?这条数据一定永久性丢失了

选择一个拥有事务zxid最大的机器作为新Leader

其他的follower就会跟他进行同步,他给每个follower准备一个队列,然后把所有的proposal都发送给follower,只要过半follower都ack了,就会发送commit给那个follower

所谓的commit操作,就是把这条数据加入内存中的znode树形数据结构里去,然后就对外可以看到了,也会去通知一些监听这个znode的人

如果一个follower跟leader完全同步了,就会加入leader的同步follower列表中去,然后过半follower都同步完毕了,就可以对外继续提供服务了