2017-02-21 40 views
0

最近我嘗試使用JGroup創建一個集羣,以便連接到同一個集羣的不同機器能夠在彼此之間交換消息。跨兩個子網的JGroup集羣

我試過我的本地主機(2個Java應用程序)之間的簡單聊天應用程序,它的工作原理沒有問題,即它們能夠在彼此之間接收和發送消息。

這裏是場景 PC 1:由一java的模塊(接收器) 服務器2(模塊使用jgroup駐留在此服務器)的:發件人

我的下一步驟是移動所述發送者(的創建者羣集)到另一個子網,但仍然在同一個網絡中,因爲我能夠從我的PC 1上ping私人IP地址。理想情況下,服務器1將創建羣集(首先加入),當我在本地啓動接收器時它應該加入由服務器1創建的羣集。

這兩個子網之間有一個防火牆。

我試過這個使用默認的JChannel設置,但它不工作。已創建羣集,但PC1無法連接到羣集,而是形成了自己的羣集。它們具有相同的羣集名稱。

我已經做了進一步的研究,是否必須在服務器上設置UDP多播作爲發送者和接收者,TCP單播到服務器中創建的集羣中?如果是這樣,我讀我必須配置一個協議棧,無論是XML或編程,並將它們傳遞到JChannel實例化。用TCPPING進行發現?

任何人都可以點亮一下嗎?其次,由於它們之間有防火牆,我需要設置TCPGOSSIP嗎?

最好的問候,

回答

0

我使用mod_cluster和JGroups的與Apache的駱駝面臨着同樣的問題,在我的環境。爲了實現兩個數據中心(子網)的集成要求,我使用JGroups和mod_cluster over TCP,而不是默認的UDP與多播。使用JGroups,您需要設置一個包含協議堆棧整個配置的文件,包括tcpping。在JGroups的.jar中,您可以找到示例文件,如tcp.xml和tcp-nio.xml。我失去了一些時間使用JGroups 3.4.1面臨配置問題,直到我升級到版本3.6.13.Final時才起作用。

如果您使用的是JChannel類,只是使用構造函數,該構造函數接收包含該配置的XML文件的路徑的字符串。不要忘記,是由TCP配置中使用的關鍵參數

-Djgroups.bind_addr -Djgroups.tcpping.initial_hosts=NODE1[7800],NODE2[7800]

的。在你的情況下,你還需要配置防火牆中的JGroups使用的端口。

希望有所幫助。