paxos 实现本文主要介绍 zookeeper中 zookeeperServerleader的选举,zookeeper在选举 leader的时候采用了 paxos算法(主要是 fastpaxos),这里主要介绍其中两种:LeaderElection和FastLeaderElection
我们先要清楚以下几点• 一个 Server是如何知道其它的 Server在 zookeeper中,一个 zookeeper集群有多少个 Server是固定,每个 Server用于选举的 IP和 PORT都在配置文件中• 除了 IP和 PORT能标识一个 Server外,还有没有别的方法每一个 Server都有一个数字编号,而且是唯一的,我们根据配置文件中的配置来对每一个Server进行编号,这一步在部署时需要人工去做,需要在存储数据文件的目录中创建一个文件叫 myid的文件,并写入自己的编号,这个编号在处理我提交的 value相同很有用• 成为 Leader的必要条件获得 n/2+1个 Server同意(这里意思是 n/2+1个 Server要同意拥有 zxid是所有 Server最大的哪个 Server)• zookeeper中选举采用 UDP还是 TCPzookeeper中选举主要是采用 UDP,也一种实现是采用 TCP,在这里介绍的两种实现采用的是 UDP• zookeeper中有哪几种状态LOOKING初始化状态LEADING领导者状态FOLLOWING跟随者状态• 如果所有 zxid都相同(例如:刚初始化时),此时有可能不能形成 n/2+1个 Server,怎么办zookeeper中每一个 Server都有一个 ID,这个 ID是不重复的,而且按大小排序,如果遇到这样的情况时,zookeeper就推荐 ID最大的哪个 Server作为 Leader• zookeeper中 Lea