如何使用zookeeper实现高可用服务(2个节点)
how to implement high availability service (2 nodes) using zookeeper
我需要提供一个H/A机制。
我知道 zookeeper 可以被选为领导者选举
我正在为这个流程寻找合适的模式:
我需要实现调用流的服务。
当它启动流[流是循环流]时,它必须验证它是领导者。 (通过它的 ip 地址说)。
我知道我可以将一个值放入定义进入的动物园管理员
instance,并在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 项服务读取为空
并且第二个覆盖了第一个签名,并且它们都 运行 任务。
你能帮忙吗?
谢谢
正确使用 ZooKeeper 可能很困难,需要对其 API 和语义进行一些研究。有一些不错的高级库,例如 Curator,它们已经实现了常见的算法,例如 leader election. The ZooKeeper documentation also has a recipe for leader election.
我需要提供一个H/A机制。
我知道 zookeeper 可以被选为领导者选举
我正在为这个流程寻找合适的模式:
我需要实现调用流的服务。 当它启动流[流是循环流]时,它必须验证它是领导者。 (通过它的 ip 地址说)。
我知道我可以将一个值放入定义进入的动物园管理员 instance,并在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 项服务读取为空 并且第二个覆盖了第一个签名,并且它们都 运行 任务。
你能帮忙吗?
谢谢
正确使用 ZooKeeper 可能很困难,需要对其 API 和语义进行一些研究。有一些不错的高级库,例如 Curator,它们已经实现了常见的算法,例如 leader election. The ZooKeeper documentation also has a recipe for leader election.