Zookeeper的集群监视器

时间:2015-08-08 09:05:44

标签: apache-zookeeper apache-curator

我正在尝试使用CuratorFramework创建基于Zookeeper的应用程序。应用程序必须能够在更多节点上的仲裁中运行。 app的每个实例都嵌入了Zookeeper服务器和客户端的实例。节点在仲裁中成功完成。每个节点都将EPHEMERAL节点写入/ workers / active / node1(“active”是由leader创建的PERSISTENT znode)。因为当客户端连接到zookeeper服务器的localhost实例时,Zookeeper检测到节点和短暂节点的故障非常缓慢地失败,所以我决定将NodeA的客户端连接到具有连接字符串“NodeB,NodeC”的集群。 NodeB,连接字符串为“NodeA,Node C”,NodeC为“NodeA,NodeB”。这导致该群集在检测节点故障方面更快。我在每个节点上添加了watcher,以检测/ workers / active上的NodeChildren事件。这个观察者有一个连接到localhost zookeeper服务器的CuratorFramework客户端的特殊实例。我这样做了,因为回调只注册到客户端注册它的服务器。问题是,解决方案不稳定,我不知道为什么。有时一切都正常,但在那之后,我在/ workers / active中放松了znode,但是所有节点都在运行或/ workers / active中的状态是正确的,但NodeChildren回调在几秒钟前正常工作时不起作用。 ..我该怎么办?我已经尝试了一切......

1 个答案:

答案 0 :(得分:0)

我发现了一个问题。

在我的情况下,最好使用CuratorFramework配方中的 PersistentEphemeral 节点进行节点注册。

对于检测添加/删除节点的回调最好使用CuratorFramework配方中的 PathChildrenCache 并预备和回调