2 Star 1 Fork 54

boy / Java-Interview-Advanced

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
131.md 1.35 KB
一键复制 编辑 原始数据 按行查看 历史
leelovejava 提交于 2020-06-04 02:11 . update 中间件之Zookeeper

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都同步完毕了,就可以对外继续提供服务了

Java
1
https://gitee.com/adonggege/Java-Interview-Advanced.git
git@gitee.com:adonggege/Java-Interview-Advanced.git
adonggege
Java-Interview-Advanced
Java-Interview-Advanced
master

搜索帮助