web-dev-qa-db-ja.com

f5のようなロードバランサーを備えたrabbitmqクラスターでフェイルオーバーをセットアップする方法

私は運が悪かった次のセットアップに関してf5開発者セントラルとインターネットに関する情報を見つけようとしていました。

3つのノードを持つrabbitmqクラスターが必要です。 1つのノードは、常にすべてのキューのプライマリ/マスターノードになります。 1.すべてのキューのすべての接続/トラフィックを現在のプライマリノード(A)に送信します。 2.ノードAが応答しない場合(アプリケーション層またはネットワーク層の問題のため)、ロードバランサーはノード(B)へのすべてのトラフィックを自動的にフェイルオーバーする必要があります。 3.ノードBに障害が発生した場合は、ノードCに移動します。

質問:ノードが応答せず、別のノードへのフェイルオーバーが発生したと判断するにはどうすればよいですか?この目的のために、ロードバランサーを介してamqpプロトコルを使用してrabbitmqへの呼び出しを呼び出す方法はありますか?十分に文書化されていることがわかりません。

F5でこれを実装する方法がわからない場合でも、別のロードバランサーまたはコードの観点から自由に答えてください。

質問への追加:このヘルスチェックがどのようなものであっても、LBスイッチオーバーが発生し、誤警報が発生しなかったときに、rabbitmqクラスターがマスターノードからノードBに既にフェイルオーバーしていることを十分に具体的にする必要があります。

読んで答えてくれてありがとう。

1
cdpnet

Stingrayロードバランサーを使用してクラスター化されたRabbitMQのL4ロードバランシングを実行しました。これは正常に機能し、特に問題なくRRを実行しました。

1つのRabbitノードがダウンした場合、TCP接続が失敗し、ロードバランサーが他のノードにトラフィックを送信します。

ノードAに送信されたレコードはノードBにも送信され、RabbitによってErlangのepmdを介して内部的に送信されるため、これは技術的に非効率的です。

1つ非常に重要な注意点は、ロードバランサーを保持するように設定する必要があることですTCP接続は無期限に開きます。これは一般的な問題です。rabbitMQは長時間実行されるtcp接続を使用しますが、ほとんどのロードバランサーはHTTP風の接続パラメーターを対象としています。一部のソフトウェア(nginx)には、非常に積極的なTCPクリーンアップウィンドウがあり、これらのTCP接続を閉じて、すべてのマシンが正常であるにもかかわらず、接続障害が発生します。

4
Brennen Smith

マスターのみをフォローしている場合はロードバランサーをスキップし、keepalivedとステータスチェックを使用して、自己がマスターであるかどうかを確認します。マスターである場合は、vipを使用します。

0
Jacob Evans