0

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

4

1 回答 1

0

我找到了解决办法。

在我的情况下,使用来自 CuratorFramework 配方的PersistentEphemeral节点进行节点注册的最佳选择。

对于检测添加/删除节点的回调,最好使用CuratorFramework recipes 中的 PathChildrenCache 并准备回调它

于 2015-08-10T18:56:29.930 回答