zk集群运行过程中,服务器选举的源码剖析
上面说过QuorumPeer检测到当前服务器的状态是LOOKING的时候,就会进行新一轮的选举,通过setCurrentVote(makeLEStrategy().lookForLeader());也就是FastLeaderElection的lookForLeader来进行初始选择,实现的方式也很简单,主要的逻辑在FastLeaderElection.lookForLeader中实现: 基本流程先说明一下:
LOOKING: 都处于无Leader态,比较一下选票的优劣,看是否更新自己的选票,如果更新了就同时通知给其他服务器 FOLLOWING、LEADING:说明集群中已经有Leader存在,更新一下自己的状态,结束本轮投票 OBSERVING:这票没什么卵用,直接舍弃(OBSERVER是不参与投票的) 根据上面的流程,可以大概说明一下FasterLeaderElection确定选票更优的策略:
总结: 以上就是zk的默认选票流程,按照ZAB协议的两种状态分析:
Leader服务器挂了,那么经历的和初始化流程类似的过程,选择Leader Follower服务器挂了,那么自己在执行选举的过程中,会收到其他服务器给的Leader选票信息,也可以确定Leader所属 【编辑推荐】
点赞 0 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |