7

こんにちは、EC2 のクラスターで実行される 3 つの RabbitMQ サーバーを作成します

CPU 使用率に基づいて RabbitMQ クラスターをスケールアウトしたいのですが、メッセージを発行すると、1 つのサーバーのみが CPU を使用し、他の RabbitMQ サーバーは CPU を使用しません。

どうすればRabbitMQクラスター全体に負荷を分散できますか

4

2 に答える 2

9

RabbitMQ クラスターはスケーラビリティを向上させるように設計されていますが、システムは完全に自動化されているわけではありません。

クラスター内のノードでキューを宣言すると、キューはその 1 つのノードでのみ作成されます。したがって、キューが 1 つある場合、パブリッシュ先のノードに関係なく、メッセージはキューが存在するノードに到達します。

RabbitMQ クラスターを適切に使用するには、次のことを確認する必要があります。

  • 作業がある程度均等に分散されるように、複数のキューをノード全体に分散させます。
  • クライアントを異なるノードに接続します (そうしないと、すべてのメッセージが 1 つのノードを通過することになります)。
  • 可能であれば、パブリッシャー/コンシューマーが使用しているキューを保持するノードに接続するようにしてください (クラスター内のメッセージ転送を最小限に抑えるため)。

または、High Availability Queuesをご覧ください。これらは通常のキューに似ていますが、キューの内容は複数のノード間でミラーリングされます。したがって、あなたの場合、1 つのノードにパブリッシュすると、RabbitMQ はパブリッシュを他のノードにミラーリングし、コンシューマーは内部転送でクラスターが停止することを心配することなく、いずれかのノードに接続できます。

于 2012-05-05T13:02:34.253 に答える