使用 Zookeeper 进行集群监控

Cluster Monitor with Zookeeper

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

我找到了解决方案。

在我的例子中,使用 CuratorFramework 配方中的 PersistentEphemeral 节点进行节点注册是最好的选择。

对于检测 added/removed 节点的回调,最好使用 CuratorFramework 配方中的 PathChildrenCache 并预先回调它