2016-11-18 6 views
0

異なるノードがリーダーまたはフォロワーのいずれかになる分散システムを構築しました。ほとんどのユースケースでは、リーダーとフォロワーが1人しかありません。リーダーは、通常、サーバー上では単一ですが、フォロワーは他のサーバー(同じJVM内のサーバーの一部)上で実行されています。リーダー/フォロワー関係のベストJGroupsスタック構成

フォロワーノードは、互いにメッセージを送信する必要はなく、リーダーノードとだけ通信します。現在、tcpgossipプロトコルを使用して、クラスタのメンバーを検出しています。私のGossipRouterはリーダーノードと同じJVMで動作します。実際にはうまくいきますが、私のクラスターは十分に安定しているようです。

tcpgossipプロトコルを理解している限り、各ノードはGossipRouterに到達し、そこから情報を取得します。したがって、私の場合、すべてのフォロワノードは、リーダーノードが動作しているサーバーに接続します。私はフォロワノードのいずれかをオフにしたときしかし、私は他のフォロワーからの警告メッセージを表示することができ、その状態をノード:

WARNING:スレッド= TransferQueueBundler、MYCLUSTER、ROCKET-21632金11月18日10時22分11秒CET 2016 VERIFY_SUSPECT:[VERIFY_SUSPECT:ARE_YOU_DEAD]、TP:[VERIFY_SUSPECT:TP:[VERIFY_SUSPECT:VERIFY_SUSPECT:TPM: CLUSTER_NAME = MYCLUSTER]

WARNING:スレッド= TransferQueueBundler、MYCLUSTER、ROCKET-21632金11月18日10時21分19秒CET 2016 org.jgroups.protocols.TP sendToMembers JGRP000034:ROCKET-21632:失敗銭ゼウス-10187への鼎メッセージ:java.net.SocketTimeoutException:ROCKET-21632zeus-10187は2人のフォロワーある

をタイムアウトして接続します。私はGossipRouterが使用されているのでフォロワーはお互いに話し合うことはないと予想されたが、それはそうではないようだ。

いくつかのノードが決して話すことのないクラスタを構築する方法はありますか?

答えて

0

TCPGOSSIPは、検出メカニズムとしてのみ使用します。したがって、別のノードでGossipRouterを実行し、すべてのノードを起動してからGossipRouterを終了した場合でも、まだ動作します(ただし、マージは除く)。発見のみ(したがって、新しいメンバーの参加)は機能しません。

TCPGOSSIPを使用しても、メンバーは直接お互いに話をします。あなたがそれを望まないなら、トランスポートとしてTCPをTUNNELに置き換えてください。すべてのメンバーはすべてのメッセージをGossipRouterに転送し、GossipRouterはそれらを他のメンバーに転送します。しかし、リーダーノードが多くのトラフィックを得るという欠点があります。対照的に、互いに話し合っているメンバーは、トラフィックモードをクラスタ全体に均等に分散します。

TUNNEL:TCPGOSSIPを使用する場合は、フォールトトレランスに複数のGossipRouterを使用することをお勧めします。

+0

迅速な回答ありがとうございます。私はそれを試して、それがどのように行くのかを教えてあげます。ありがとう! – Azeq

関連する問題