2011-05-19 123 views
2

我正在運行一個小型系統,它依靠Hazelcast以多播模式進行集羣,分佈式計算和消息傳遞(標準配置可在下載中找到)。我有許多作爲「核心」Hazelcast實例運行的服務器模塊,以及作爲Hazelcast「本機客戶端」實施的Java Swing應用程序。這一切都運行良好,我現在想要在生產中調試系統,因此需要運行兩個獨立的集羣(dev + prod),這就是我遇到問題的地方。多集羣的Java Hazelcast問題

根據documentation所有你需要的是使用單獨的組名+密碼的兩個集羣,我覺得這兩個集羣應該自動排序!這似乎適用於服務器模塊,但是當我試圖將「客戶端」 - 實例連接到prod環境時,我可以從prod中的某個服務器模塊的日誌中看到客戶端似乎成功連接:

INFO: [prod] received auth from Connection [/192.168.0.2:55863 -> null] live=true, 
client=true, type=JAVA_CLIENT, this group name:prod, auth group name:prod, 
successfully authenticated 

但是,客戶端永遠不會顯示爲prod的成員。相反,我發現客戶已經成爲開發環境的成員,即使認證是針對產品進行的!

對於我來說,兩個羣集的非自然混合對我來說顯然是一個巨大的問題,也是一個不爭的事實。有沒有人知道我是否有任何問題,或者是否有任何配置更改可以解決問題?

回答

5

當客戶端連接到羣集時,它永遠不會成爲羣集的成員。

所以我懷疑你的客戶端是否連接到了prod,但是在你的代碼中有一些類似於Hazelcat.getMap()的地方,它導致在該JVM中啓動一個成員,並且由於這個成員將使用默認配置將與開發者相同,這個新成員將加入你的開發集羣。

所以實際上你有一個客戶端,它連接到prod和另一個連接到dev羣集的成員。

嘗試通過客戶端,並看看哪些集羣中的條目出現?

我有道理嗎?

+0

絕對如此。說得通。現在我的時間有點短了,但我會在下週初嘗試你的建議並恢復。非常感謝你爲快速回答Fuad。 – hgus1294 2011-05-20 14:17:43

+0

你是對的。我在我的客戶端中使用默認配置「dev」啓動成員的代碼。我最終將客戶切換到超級客戶端,因爲這對我來說似乎更容易。我的核心模塊(成員)需要知道已連接的客戶端,並且本地客戶端「對於成員來說不太明顯」。無論哪種方式,超級客戶端實施都能很好地滿足我的需求。非常感謝你的幫助。 – hgus1294 2011-05-23 16:58:59

+0

http://docs.hazelcast.org/docs/1.9/manual/html/ch05s03.html酷 – 2017-09-21 18:55:42