zxid,sid,epoch变量的含义
- zxid:事务id
- sid : 服务器id,和myid一致,用来唯一的标识服务器。
- epoch : 标识leader的任期。
什么情况下会进行leader选举
- 服务器刚刚启动时。
- 当某一台服务器无法和leader进行通信时。
当一台机器进入选举流程时,服务器的两种状态
- 集群中存在leader(leader没有挂掉),那么继续服从即可(重新建立因为某种原因断开的连接)。
- 集群中不存在leader(真的是leader挂掉了),进行投票选举。
集群在第一次启动时的投票算法。
只有半数以上结点上线时,zookeeper集群才会处于启动状态。
- 投票规则如下。
- 当前集群无leader节点时,统一将票数投给myid最大的节点,当被投票数大于节点总数的一半时,该节点成为leader节点。
- 当前节点有leader节点时,新启动的节点应该投票给leader节点。
集群不是在第一次启动时的投票算法。
投票优先级为 epoch > zxid > sid。
当epoch比较大时,可以优先的当leader,就是上一个时代的人可以优先掌权。
而后比较事物id
最后才是服务器id