java - 跨 2 个子网的 JGroup 集群

标签 java networking cluster-computing jgroups

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

我已经在我的本地主机上尝试了简单的聊天应用程序(在2个java应用程序之间),它工作没有问题,即它们能够在彼此之间接收和发送消息。

这是场景 PC 1:由java模块(接收器)组成 服务器 2(使用 jgroup 的模块驻留在该服务器中):发件人

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

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

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

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

有人可以透露一些信息吗?其次,由于它们之间有防火墙,我需要设置 TCPGOSSIP 吗?

最诚挚的问候,

最佳答案

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

如果您使用 JChannel 类,只需使用构造函数来接收包含配置的 XML 文件路径的字符串。不要忘记关键参数

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

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

希望有帮助。

关于java - 跨 2 个子网的 JGroup 集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42371324/

相关文章:

java - 为什么我可以访问封闭类引用的私有(private)成员

iOS IP 故障转移(循环),具有多个 A 记录的 DNS

spring - 仅在一个 WebLogic 集群节点上运行 @Scheduled 任务?

java - Spring Data elasticsearch_search api

java - Android使电话号码可点击,自动检测

python - 如何确定非阻塞套接字是否真正连接?

user-interface - 具有集群支持的 Redis GUI 工具

classpath - Jar 适用于独立的 Hadoop,但不适用于实际的集群(java.lang.ClassNotFoundException : org. jfree.data.xy.XYDataset)

java - 在同一个包中导入类

c - 5 元组的哈希函数 - ipv4/6