跨2个子网的JGroup集群

时间:2017-02-21 15:22:48

标签: java networking cluster-computing jgroups

最近我正在尝试使用JGroup创建一个集群,以便连接到同一集群的不同计算机能够在彼此之间交换消息。

我已经在我的localhost上尝试了简单的聊天应用程序(在两个java应用程序之间),它没有任何问题,即它们能够在彼此之间接收和发送消息。

以下是该方案 PC 1:由java模块组成(接收器) 服务器2(使用jgroup的模块驻留在此服务器中):发件人

我的下一步是将发件人(群集的创建者)移动到另一个子网,但仍然在同一网络中,因为我能够从我的PC上ping私有IP地址1.理想情况下,服务器1将创建群集(第一次加入)当我在我的本地机器上启动接收器时,它应该加入由服务器1创建的集群。

这两个子网之间有一个防火墙。

我已尝试使用默认的JChannel设置,但它不起作用。已创建群集,但PC1无法连接到群集,而是形成自己的群集。它们具有相同的群集名称。

我做了进一步的研究,我是否必须在服务器上设置UDP多播作为发送方和接收方,TCP单播到服务器中创建的集群?如果是这样,我读到我必须以xml或编程方式配置协议栈,并将它们传递给JChannel实例化。使用TCPPING进行发现?

任何人都能解开一些光明吗?其次,因为它们之间有防火墙,我是否需要设置TCPGOSSIP?

最诚挚的问候,

1 个答案:

答案 0 :(得分:0)

我在环境中使用mod_cluster和带有apache-camel的JGroups遇到了同样的问题。为了实现两个数据中心(子网)集成的要求,我在TCP上使用了JGroups和mod_cluster,而不是使用多播的默认UDP。使用JGroups,您需要设置一个文件,其中包含协议堆栈的整个配置,包括tcpping。在JGroups的.jar中,您可以找到tcp.xml和tcp-nio.xml等示例文件。我失去了一些时间使用JGroups 3.4.1面临的问题,在我升级到版本3.6.13.Final之前,tcpping配置无效。

如果您正在使用JChannel类,请使用接收String的构造函数,该String包含包含配置的XML文件的路径。不要忘记关键参数

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

TCP配置使用的

。在您的情况下,您还需要配置防火墙中JGroups使用的端口。

希望有所帮助。