1、概述
选举的父接口为Election,其定义了lookForLeader和shutdown两个方法,lookForLeader表示寻找Leader,shutdown则表示关闭,如关闭服务端之间的连接。
AuthFastLeaderElection,同FastLeaderElection算法基本一致,只是在消息中加入了认证信息,其在3.4.0之后的版本中已经不建议使用。
FastLeaderElection,其是标准的fast paxos算法的实现,基于TCP协议进行选举。
LeaderElection,也表示一种选举算法,其在3.4.0之后的版本中已经不建议使用。
public interface Election {
public Vote lookForLeader() throws InterruptedException;
public void shutdown();
}
2、FastLeaderElection实现
核心类:Notification(其他服务器发来的选举投票信息)、ToSend(发送给其他服务器的选举投票信息)、Messenger(包含了WorkerReceiver和WorkerSender两个内部类)
通过启动两个线程:WorkerSending(sendqueue获取ToSend对象)、WorkerReceiver(recvQueue获取Notification对象)
选举过程:
paxos选举,广播当前实例的myid和ZXID(事务id)
优先检查ZXID。ZXID比较大的服务器优先作为Leader。
如果ZXID相同,那么就比较myid。myid较大的服务器作为Leader服务器。