Curator高级API - Master选举
在分布式系统中,经常会碰到这样的场景:对于一个复杂的任务,仅需要从集群中选举出一台进行处理即可。称为’Master选举’问题。借助Zookeeper,可以比较简单的实现Master选举的功能,大体思路如下:
选择一个根节点,例如/master_select,多台机器同事向该节点创建一个子节点/master_select/lock,利用Zookeeper的特性,最终只有一台机器能够创建成功,成功的哪台机器就作为Master。
Curator也是基于这个思路,但是它将节点创建,事件监听和自动选举过程进行了封装,开发人员只需要条用简单的API就可以实现Master选举
Curator实现了两套选举API,分别是LeaderSelector和LeaderLatch。
LeaderSelector
LeaderSelector支持任务执行完成之后自动重新竞选。针对单个任务在集群中竞争执行,只允许一台服务器执行场景。
示例代码
打印结果
观察结果之后发现在相同的秒数内只有一个Server执行了打印输出。
LeaderLatch
LeaderLatch支持针对竞选失败情况下的操作。并且选出的Master将为长期保持Master状态,在Master节点挂掉之后,会马上在集群中选出新的Master节点。
示例代码
连续启动三次之后输出结果如下
打印结果
观察结果之后发现在Master节点挂掉之后,会马上重新选举一个新的Master出来。
参考资料
《从PAXOS到ZOOKEEPER分布式一致性原理与实践》 - 倪超
Curator官网 : http://curator.apache.org/