3.6.5 领导者选举相关属性设置

我们在前面小节已经基本了解了领导者选举的过程和应用,并学会配置了一个领导者候选者的Master/Slave的主备关系,当Master宕机或者网络故障时,可以不受影响切换到Slave上提供服务,这里我们补充一些关于领导者选举的属性设置,可以应用在不同的情形下。在config.xml的park部分配置里,我们可以看到:

  1. <SERVERS>localhost:1888,localhost:1889</SERVERS>
  2. <ALWAYSTRYLEADER>false</ALWAYSTRYLEADER>

ALWAYSTRYLEADER这个配置项默认值是false,代表是否一直进行领导者寻找,如果在集群中没有领导者,也没有候选者替补,应用程序会根据配置值一直寻找并等待下去,直到最后找到,还是寻找一轮后放弃,我们可以看看下面的简单例子。

LeaderTest是一个简单的ParkServer应用端,它只有一行代码“ParkLocal pl=BeanContext.getPark();”,如果我们不启动ParkServer的Master/Slave主备结构,而直接运行LeaderTest,代码如下,结果如图3-19所示。

  1. java -cp fourinone.jar; LeaderTest
  2.  
  3. import com.fourinone.BeanContext;
  4. import com.fourinone.ParkLocal;
  5.  
  6. public class LeaderTest
  7. {
  8. public static void main(String[] args)
  9. {
  10. ParkLocal pl = BeanContext.getPark();
  11. }
  12. }

3.6.5 领导者选举相关属性设置 - 图1

图3-19 LeaderTest-1

我们发现LeaderTest会一直反复地请求localhost:1888和localhost:1889,直到最后连接成功。如果我们不想这样无限制地寻找下去,可以将配置改为:

  1. <ALWAYSTRYLEADER>true</ALWAYSTRYLEADER>

我们再启动LeaderTest,如图3-20所示。

3.6.5 领导者选举相关属性设置 - 图2

图3-20 LeaderTest-2

我们发现LeaderTest按照“localhost:1888、localhost:1889、localhost:1888”寻找了一轮后,发现集群仍然没有可用的领导者,便停止寻找而退出。