2015-08-08 98 views
0

我想創建一個基於Zookeeper與CuratorFramework的應用程序。應用程序必須能夠在更多節點上以法定速度運行。每個應用程序實例都嵌入了Zookeeper服務器和客戶端的實例。節點成功地置於法定人數中。每個節點都將一個EPHEMERAL節點寫入/ workers/active/node1(「active」是由leader創建的PERSISTENT znode)。因爲當客戶端連接到zookeeper服務器的本地主機實例時,由於Zookeeper檢測到非常緩慢的節點故障並且會話過期後,臨時節點已經消失,所以我決定將NodeA的客戶端連接到具有連接字符串「NodeB,NodeC」的集羣。具有連接字符串「NodeA,Node C」的NodeB和具有「NodeA,NodeB」的NodeC。這導致,該集羣在檢測節點故障方面快得多。我在每個節點上添加了監視器,以檢測/ workers/active上的NodeChildren事件。該觀察者具有連接到本地主機zookeeper服務器的CuratorFramework客戶端的特殊實例。我這樣做了,因爲回調僅註冊到客戶端註冊它的服務器。問題是,解決方案不穩定,我不知道爲什麼。有時候一切正常,但之後,我在/ workers/active中釋放了znode,但所有節點都在運行,或者/ workers/active中的狀態正確,但即使數秒前它正常工作,NodeChildren回調也不起作用。 ..我能做什麼錯了?我已經嘗試了一切......Zookeeper集羣監視器

回答

0

我發現了一種溶液。

在我的情況是最好的選擇使用PersistenceEphemeral節點CuratorFramework食譜節點註冊。

對於檢測添加/刪除節點回調最好使用PathChildrenCache從CuratorFramework食譜和prepand回調它