web-dev-qa-db-ja.com

RabbitMQでロードバランサーが機能するしくみ

私はRabbitMQを初めて使用するので、ささいな質問で失礼します。

1)RabbitMQでのクラスタリングの場合、ノードに障害が発生したら、(他のノードを停止することなく)別のノードにシフトをロードします。同様に、クラスター内の既存のノードを停止せずに、新しいクラスターを既存のクラスターに追加することもできます。あれは正しいですか?

2)単一のrabbitMQノードから始めて、その上に100個のキューを作成するとします。現在、プロデューサーはより速い速度でメッセージを送信し始めました。この負荷を処理するために、ノードを追加してクラスターを作成します。ただし、キューは最初のノードにのみ存在します。現在、ノード間でどのように負荷分散されていますか?さらにキューを追加する必要がある場合、どのノードに追加する必要がありますか?または、ロードバランサーを使用して追加できますか。

前もって感謝します

17
Pragmatic

1)RabbitMQでのクラスタリングの場合、ノードに障害が発生したら、(他のノードを停止せずに)別のノードにロードシフトします。同様に、クラスター内の既存のノードを停止せずに、新しいクラスターを既存のクラスターに追加することもできます。あれは正しいですか?

キューが作成されたノードに障害が発生した場合、rabbitmqは、キューのミラーリングが有効になっている限り、クラスター内のそのキューの新しいマスターを選択します。クラスタリングは、定義可能なポリシーに基づいてHAを提供します。

2)単一のrabbitMQノードから始めて、その上に100個のキューを作成するとします。現在、プロデューサーはより速い速度でメッセージを送信し始めました。この負荷を処理するために、ノードをさらに追加してクラスターを作成します。ただし、キューは最初のノードにのみ存在します。現在、ノード間でどのように負荷分散されていますか?

負荷が分散されていません。分散クラスターは、負荷分散ではなくHAを提供します。リクエストは、キューが存在するクラスター内のノードにリダイレクトされます。

さらにキューを追加する必要がある場合、どのノードに追加する必要がありますか?または、ロードバランサーを使用して追加できますか。

それはユースケースに依存します。一部の人々はラウンドロビンを使用して、別々のノードにキューを作成します。

要約すれば

  • HAの場合は、クラスターで mirroring を使用します。
  • ノード間で負荷を分散するには、 キュー間で分散するためのLB を使用します。
  • キュー自体の負荷を分散したい場合は、 Federated Queues を見てください。これらを使用すると、ダウンストリームキューのメッセージをアップストリームキューからフェッチできます。
19
Deepak Bala