博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zookeeper 选举和同步
阅读量:4317 次
发布时间:2019-06-06

本文共 1185 字,大约阅读时间需要 3 分钟。

节点状态:

// org.apache.zookeeper.server.quorum.QuorumPeer.ServerStatepublic enum ServerState {    LOOKING, FOLLOWING, LEADING, OBSERVING;}

测试环境可以用 2 个节点组成集群。2 个节点的集群中,节点需要得到 2 票,才能当选为 leader。

假定 2 个节点的 id 分别为 1 和 2,以 FastLeaderElection 为例,描述选举过程:

开始, 2 个节点均处于 LOOKING 状态,投票进行选举,2 个节点分别为自己投票,这样均只得 1 票,无法选举出 leader。
开始下一轮选举,节点 1 发现节点 2 的 id 比自己大,于是给节点 2 投票,随之节点 2 成为 leader。

投票信息

FastLeaderElection.Notification
选举 leader
FastLeaderElection.lookForLeader
比较 epoch,zxid,id。判断是否要更新当前节点的投票信息
FastLeaderElection.totalOrderPredicate
计票,判断选举是否结束
FastLeaderElection.termPredicate

 

选举完成后的同步

QuorumPeer.run() 代码片段:

case FOLLOWING:    try {        LOG.info("FOLLOWING");        setFollower(makeFollower(logFactory));        follower.followLeader();    } catch (Exception e) {        LOG.warn("Unexpected exception",e);    } finally {        follower.shutdown();        setFollower(null);        setPeerState(ServerState.LOOKING);    }    break;

Follower.followLeader() 代码片段:

syncWithLeader(newEpochZxid);                QuorumPacket qp = new QuorumPacket();while (self.isRunning()) {    readPacket(qp);    processPacket(qp);}

follower 无限 while 循环。

转载于:https://www.cnblogs.com/allenwas3/p/9287996.html

你可能感兴趣的文章
常用C库简介
查看>>
Linux 上的常用文件传输方式介绍与比较
查看>>
[转载]电话销售技巧全面大攻略
查看>>
LZW压缩算法原理及其Java实现
查看>>
VNC-Server installation on CentOS 7
查看>>
Unity中用触摸控制物体旋转和放大
查看>>
hibernate
查看>>
appium环境安装
查看>>
uva 10859
查看>>
ssm整合-动态项目-day13
查看>>
Visual Studio Debug
查看>>
Souerce 之 图片格式
查看>>
PD 之 连接数据库并导出数据及生成PDM文件
查看>>
Java IO 操作
查看>>
SharePoint 2010 Warmup server script
查看>>
单变量微积分笔记6——线性近似和二阶近似
查看>>
补几天前的读书笔记
查看>>
HDU 1829/POJ 2492 A Bug's Life
查看>>
[UOJ UR#16]破坏发射台
查看>>
修改spring boot 启动logo
查看>>