【发布时间】:2017-07-11 15:24:04
【问题描述】:
只是想知道是否有任何 API 可以使用 Curator Framework 中的 CuratorFramework 类来知道特定节点是领导者。我正在使用 LeaderLatch,但即使节点是领导者(由 Zookeeper 框架选举)也无法工作。
注意:集群设置中配置了 3 个节点。
Zookeeper 框架将负责选举节点。我需要知道选定的 Curator 客户端是否指向领导者。
String zkConnString = "172.18.54.211:2181";
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
CuratorFramework client1 = CuratorFrameworkFactory.newClient(zkConnString, retryPolicy);
client1.start();
LeaderLatch leaderLatch = new LeaderLatch(client1, "/FirstNode");
try {
leaderLatch.start();
} catch (Exception e1) {
e1.printStackTrace();
}
System.out.println("has leader ship ? "+leaderLatch.hasLeadership());
输出是
has leader ship ? false
如果LEADER对应的微服务宕机了,那么需要再选择一个leader。每个微服务都可以被视为一个 Z-NODE。如果删除 Z-NODE,则会触发并监听 NODEREMOVED 事件。
LEADER 不应该是微服务宕机节点。
【问题讨论】:
-
我认为大部分已经在基础 zookeper 算法中实现。任何节点都可以监视其他 z-node,并且一旦领导者宕机,该 z-node 的观察者将成为领导者。我不清楚什么“领导者不应该是微服务宕机节点”,如果一个节点宕机,如果系统有法定人数,领导者将被选举。
标签: java load-balancing apache-zookeeper apache-curator