【问题标题】:machines in different data centers not able to pass message using jgroups不同数据中心的机器无法使用 jgroups 传递消息
【发布时间】:2016-04-14 15:09:24
【问题描述】:

我有一个 13 台机器,但它们位于不同的数据中心,因此将位于不同的网络中。我正在使用 jgroups 来保持 13 个框的状态一致性。我使用 TCP_PING 进行初始发现,因为否则它们不会连接。虽然这样做了。当其中一个框发送目的地为 NULL(多播)的消息时,该消息不会到达所有 13 个框,导致 13 个框之间的状态不一致。我猜它只能到达与源位于同一数据中心的那些盒子。

你能帮我解决这个问题吗?在配置 xml 文件中是否有特定的事情要做。此外,消息传递不应该独立于盒子所在的位置吗?

【问题讨论】:

    标签: java cluster-computing message-passing jgroups


    【解决方案1】:

    是由 13 个成员组成的集群,还是从 2 个独立的集群开始? 使用 TCPPING,您必须列出所有比特数据中心的成员。或者,您可以使用动态发现协议,例如 TCPGOSSIP、S3_PING、JDBC_PING 等。 请注意 - 根据您的应用程序的要求 - 您可以使用数据中心中继 [1]。

    [1]http://www.jgroups.org/manual/index.html#Relay2Advanced

    【讨论】:

    • 此外,我不知道我的盒子分配到多少个不同的站点/数据中心,我可以猜测它们是 2-3,但我不确定,所以我该怎么做使用下面提到的中继配置(选择的站点是 LON、NYC、SFO)..<RelayConfiguration xmlns="urn:jgroups:relay:1.0"> <sites> <site name="lon" id="0"> <bridges> <bridge config="/home/bela/global.xml" name="global"/> </bridges> </site> </RelayConfiguration>
    • 理论上我可以假设每个主机名形成一个仅包含自身的集群,然后所有这些单独的集群桥接在一起。因此,如果我有 13 个盒子/主机,每个都是一个集群(一个盒子/本身),然后这 13 个被桥接在一起。使用 jgroups 进行这样的配置是否明智且可以实现?这样,当我的应用程序的负载增加并添加了新的盒子/主机时,我不必担心 jgroups,它还可以在添加新盒子时水平扩展?
    • 嗨,贝拉,我也没有关于给定主机属于哪个数据中心的信息。我有主机名,所以我将主机名粘贴到标签<TCPPING async_discovery="true" initial_hosts="${jgroups.tcpping.initial_hosts:HOSTNAMES_HERE}" port_range="2"/> 但请注意我的配置没有bind_addr 标签,我认为不添加它将采用默认值,这没关系。
    • 您能否发布一个适用于本地机器的设置(包括示例可编译代码和配置),以便我可以尝试一下?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 2021-10-20
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多