leader选举前提:
- 有新的服务器加入到集群当中(有处于Looking状态的服务器)
- 集群leader宕机
有新的服务器加入到集群当中(有处于Looking状态的服务器)情形:
当集群中有新的机器加入或者存在服务器处于Looking状态时,该服务器会向集群中的每个机器发送一个通知消息,该消息中含有该服务器的投票信息,投票信息中包含两部分,服务器标识(sid)以及最近处理事务的id(zxid),当集群中服务器收到投票信息时,服务器会根据收到的zxid来更改自己将要投出的票,若zxid大于自己本身的zxid,那么该服务器会将票投给zxid最大的那个服务器,简而言之,zxid最大的也就是事务id最新的服务器会当选leader,若集群中多台机器zxid想等,那么此时sid大的当选leader,
集群leader宕机的情形:
当leader挂了,所有的follower会失去与leader的通信,那么此时follow服务器状态会有Following -> Looking,那么这个时候leader的选举就如上述情形一样进行。