2)其次,判断服务器是不是已经收集到了所有服务器的选举状态:若是,根据选举结果设置自己的角色(FOLLOWING还是LEADER),退出选举过程就是了 。
最后,若没有收到没有收集到所有服务器的选举状态:也可以判断一下根据以上过程之后最新的选举leader是不是得到了超过半数以上服务器的支持,如果是,那么尝试在200ms内接收一下数据,如果没有新的数据到来,说明大家都已经默认了这个结果,同样也设置角色退出选举过程 。
2、 如果所接收服务器A处在其它状态(FOLLOWING或者LEADING) 。
a)逻辑时钟Epoch等于目前的逻辑时钟,将该数据保存到recvset 。此时Server已经处于LEADING状态,说明此时这个server已经投票选出结果 。若此时这个接收服务器宣称自己是leader, 那么将判断是不是有半数以上的服务器选举它,如果是则设置选举状态退出选举过程 。
b) 否则这是一条与当前逻辑时钟不符合的消息,那么说明在另一个选举过程中已经有了选举结果,于是将该选举结果加入到outofelection集合中,再根据outofelection来判断是否可以结束选举,如果可以也是保存逻辑时钟,设置选举状态,退出选举过程 。
【理解zookeeper选举机制】
推荐阅读
- 单工、半双工、全双工通信的基础知识,图解分析,看完就理解了
- 你如何区分和理解普洱茶的干藏和湿藏
- Java架构师-看完这篇,你还不能理解 ‘数据库架构’?趁早回家吧
- Dubbo+Zookeeper的RPC远程调用框架demo
- 彻底理解python中的yield函数
- 喝茶和品茶如何理解呢
- 深入理解JS引擎的执行机制
- JavaScript 运行原理解析
- 看了这么多篇红黑树文章,你理解了嘛?
- 谷歌面试问题50%需要用递归:理解递归算法的本质这篇够不够?
