3

私の理解では、RabbitMQ クラスタリングは可用性ではなくスケーラビリティのためのものですが、ミラー化されたキューを使用すると、マスターに障害が発生した場合に最新のスレーブをマスターに昇格させることができるという点で、可用性も確保できます。

ドキュメントから:

キューに発行されたメッセージは、すべてのスレーブに複製されます。コンシューマーは、接続先のノードに関係なくマスターに接続され、スレーブはマスターで確認応答されたメッセージをドロップします。したがって、キューのミラーリングは可用性を向上させますが、ノード間で負荷を分散しません (参加しているすべてのノードがそれぞれすべての作業を行います)。

したがって、特定のキューのノード間での負荷分散は意味がありません。これにより、接続されたノードからキューのマスター ノードに余分なトリップが常に追加されるためです (私が何かを誤解していない限り)。したがって、どのノードが特定のキューのマスターであるかを常に把握できるようにする必要があります。

私は実際にはRabbitMQをあまり扱っていないので、ドキュメントに記載されていないだけかもしれませんが、マスターに障害が発生し、スレーブが昇格した場合、ミラーリングされたキューのマスターのIPを特定する方法はないようです.主人。私が目にするすべての情報源は、最初のマスター ノードを設定する能力について言及しているだけで、私にとってはあまり役に立ちません。任意の時間 t について、特定のキューのマスター ノード IP を見つけるにはどうすればよいですか?

PS: ネットワーク パーティション (同じ LAN 内のノードでも発生する可能性があります) がある場合、ノードと通信できないノードにヒットする可能性があるため、単純にノードをロード バランサーの背後に配置するのも良くないようです。キューのマスター、またはさらに悪いことに、私たちが進化しているスプリットブレインが存在する可能性があります.

4

2 に答える 2

1

マスター ノードの IP は必要ありません。必要なのはキューをミラーリングすることだけです。これにより、キュー内のすべてのメッセージがすべてのノード上にあります。上記の段落で、あなたが引用したのはこの文です

ミラーリングされた各キューは、1 つのマスターと 1 つ以上のスレーブで構成され、古いマスターが何らかの理由で消失した場合、最も古いスレーブが新しい​​マスターに昇格します。

したがって、マスタースレーブという言葉は、rabbitmq ノードではなく、キューに関連しています。ここで混乱していると思います。質問とドキュメントを読んだら、しばらく考えましたが、ミラーリングされたキューがrabbitmqノードのマスターとスレーブで構成されているとは言えません;)


(の?)クラスターの負荷分散に関しては、実際のロードバランサーを使用するか、クライアントを「よりスマート」にすることで、クライアントが常に生きているrabbitmqノードに接続するようにすることができます-つまり、再接続する必要があります(元の) マスター ノードがダウンした場合、別のノードの IP に。最初のアプローチが推奨されます。ここでクライアントからクラスターへの接続を 探してください。

于 2016-05-10T05:08:22.310 に答える