【问题标题】:Best JGroups stack configuration for leader/follower relationship领导者/跟随者关系的最佳 JGroups 堆栈配置
【发布时间】:2017-04-02 04:34:18
【问题描述】:

我构建了一个分布式系统,其中不同的节点可以是领导者或跟随者。在大多数用例中,我只有一个领导者和几个追随者。领导者通常在其服务器上是单一的,而追随者则在其他服务器上运行(其中一些在同一个 JVM 中)。

Follower 节点永远不必相互发送消息,它们只会与 Leader 节点通信。目前,我使用 tcpgossip 协议来发现集群的成员。我的 GossipRouter 在与领导节点相同的 JVM 中运行。它实际上运行得很好,我的集群似乎足够稳定。

据我了解 tcpgossip 协议,每个节点都会伸出 GossipRouter 并从中获取信息。所以在我的例子中,所有的追随者节点都会联系运行领导者节点的服务器。但是,当我关闭其中一个追随者节点时,我可以看到来自其他追随者节点的警告消息:

警告:thread=TransferQueueBundler,myCluster,ROCKET-21632 Fri Nov 18 10:22:11 CET 2016 org.jgroups.protocols.BaseBundler sendSingleMessage JGRP000029:ROCKET-21632:向 zeus-10187(102 字节)发送消息失败:java.net.SocketTimeoutException:连接超时,标头:VERIFY_SUSPECT:[VERIFY_SUSPECT:ARE_YOU_DEAD],TP:[cluster_name=myCluster]

警告:thread=TransferQueueBundler,myCluster,ROCKET-21632 Fri Nov 18 10:21:19 CET 2016 org.jgroups.protocols.TP sendToMembers JGRP000034:ROCKET-21632:向 zeus-10187 发送消息失败:java.net.SocketTimeoutException:连接超时

其中ROCKET-21632zeus-10187 是两个关注者。我预计追随者不会互相交谈,因为使用了 GossipRouter,但似乎并非如此。

有没有办法构建一些节点永远不会相互通信的集群?

【问题讨论】:

    标签: tcp jgroups gossip


    【解决方案1】:

    您只使用 TCPGOSSIP 作为发现机制。因此,如果您在一个单独的节点上运行 GossipRouter,启动所有节点,然后终止 GossipRouter,一切仍然有效(但合并除外)。只有发现(并因此加入新成员)是行不通的。

    即使您使用 TCPGOSSIP,成员之间也可以直接交谈。如果您不想这样,请将 TCP 作为传输替换为 TUNNEL。所有成员都会将他们的所有消息定向到 GossipRouter,后者将它们转发给其他成员。缺点是领导节点获得了大量流量。相比之下,成员相互交谈直接将流量模式均匀地分布在集群中。

    如果你想使用 TUNNEL:TCPGOSSIP,我建议使用多个 GossipRouter 来容错。

    【讨论】:

    • 感谢您的快速回答。我会试一试,让你知道它是怎么回事。谢谢!
    猜你喜欢
    • 2021-12-09
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    • 2018-03-29
    相关资源
    最近更新 更多