私の理解では、RabbitMQ クラスタリングは可用性ではなくスケーラビリティのためのものですが、ミラー化されたキューを使用すると、マスターに障害が発生した場合に最新のスレーブをマスターに昇格させることができるという点で、可用性も確保できます。
ドキュメントから:
キューに発行されたメッセージは、すべてのスレーブに複製されます。コンシューマーは、接続先のノードに関係なくマスターに接続され、スレーブはマスターで確認応答されたメッセージをドロップします。したがって、キューのミラーリングは可用性を向上させますが、ノード間で負荷を分散しません (参加しているすべてのノードがそれぞれすべての作業を行います)。
したがって、特定のキューのノード間での負荷分散は意味がありません。これにより、接続されたノードからキューのマスター ノードに余分なトリップが常に追加されるためです (私が何かを誤解していない限り)。したがって、どのノードが特定のキューのマスターであるかを常に把握できるようにする必要があります。
私は実際にはRabbitMQをあまり扱っていないので、ドキュメントに記載されていないだけかもしれませんが、マスターに障害が発生し、スレーブが昇格した場合、ミラーリングされたキューのマスターのIPを特定する方法はないようです.主人。私が目にするすべての情報源は、最初のマスター ノードを設定する能力について言及しているだけで、私にとってはあまり役に立ちません。任意の時間 t について、特定のキューのマスター ノード IP を見つけるにはどうすればよいですか?
PS: ネットワーク パーティション (同じ LAN 内のノードでも発生する可能性があります) がある場合、ノードと通信できないノードにヒットする可能性があるため、単純にノードをロード バランサーの背後に配置するのも良くないようです。キューのマスター、またはさらに悪いことに、私たちが進化しているスプリットブレインが存在する可能性があります.