如何使用zookeeper实现高可用性服务(2个节点)

时间:2017-02-23 11:00:15

标签: apache-zookeeper

我需要提供H / A机制。

据我所知,动物园管理员可以被选为领导人选举

我正在寻找适合此流程的模式:

我需要实现一个调用流的服务。 当它启动流程[流程是一个循环流程]时,它必须验证它是领导者。 (用它的IP地址说)。

我知道我可以将一个值放入动物园管理员中来定义进入 例如,在1个循环结束时或在一段时间内处理它。

这是正确的模式吗?

如果我使用类似的东西,似乎竞争条件也会出现:

...
...
List<String> names = zk.getChildren( path, false );
String id = null;
// See whether we have already run for election in this process
for ( String name : names ) {
{
   if ( name.startsWith( myIP ) ) {
      id = name;
      break;
   }
}
if ( id == null ) {
id = zk.create( path + "/" + myIP, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
}
boolean isLeader = id != null;

例如:

2个服务读取null 而第二个覆盖第一个签名,并且他们都执行任务。

你可以帮忙吗?

感谢

1 个答案:

答案 0 :(得分:1)

正确使用ZooKeeper可能很困难,需要对其API和语义进行一些研究。有一些不错的高级库,如Curator,已经实现了常见的算法,如leader election。 ZooKeeper文档还有一个recipe for leader election