2016-05-09 1 views
2

私の理解から、RabbitMQクラスタリングはスケーラビリティのためのものではありませんが、ミラーリングされたキューを使用することで、最新のスレーブをマスタに昇格させることができます。ドキュメントから 高可用性のためのRabbitMQクラスタリングキューミラーリング:時間tのキューのマスターノードのIPを取得

:キューにパブリッシュ

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

(私は何かを誤解していない限り)、これは常にキューのマスターノードに接触ノードから余分な旅行を追加しますしたがって、ロードバランシング、指定されたキューのためのノード間では意味がありません。 。したがって、どのノードが特定のキューのマスターであるかを常に知りたいと考えています。

私は本当にRabbitMQを使っていませんでしたので、おそらく私はドキュメントでそれを見逃していますが、マスターの障害があった場合、ミラーキューのマスターのIPを特定する方法はないようですスレーブはマスターに昇進しました。私が見ているすべての情報源は、最初のマスターノードを設定する能力については言及していませんが、これはあまり役に立ちません。任意の時間tに対して、どのようにして特定のキューのマスタノードIPを見つけることができますか?

PS:ロードバランサの後ろにノードを置くことは、同じLAN内のノードでも発生する可能性のあるネットワークパーティションがあるため、待ち行列のためにマスターとコミュニケーションを取るか、悪化すれば、もしあなたが進化していくと分裂する脳があるかもしれません。

答えて

1

キューをミラーリングするトポロジを維持するスマートクライアントを作成できます。 Management PluginとそのREST APIを使用することができます。

例えば、HOPを最小限に抑えるためにnode2への接続(MYQUEUEマスターノード)を好むだろうMYQUEUEあなたのクライアントのために

{ 
    "messages": 0, 
    "slave_nodes": [ 
    "[email protected]", 
    "[email protected]" 
    ], 
    "synchronised_slave_nodes": [ 
    "[email protected]", 
    "[email protected]" 
    ], 
    "recoverable_slaves": [ 
    "[email protected]" 
    ], 
    "state": "running", 
    "name": "myQueue", 
=>"node": "[email protected]" 
} 

:キューのために、curl -i -u guest:guest http://[HOST]:[PORT]/api/queues/[VHOST]/[QUEUE]は以下のペイロードを返します。

費用がかかりますか分かりません。接続数とクライアントの複雑さが増します。私はあなたが何かを実装する場合、返済を受け取ることを嬉しく思っています。

+1

それについてもっと考えた後、余分なホップはおそらく、ホップをスキップしようとする複雑さが導入するほど大きなものではないでしょう。 –

1

マスタノードのIPは必要ありません。ミラーリングするキューが必要です。キュー内のすべてのメッセージはすべてのノードにあります。古い マスターが何らかの理由で消えた場合は、引用符で囲まれた1上の段落では、新しいマスターに昇格さ

各ミラーリングされたキューは、1つのマスタと1つのまたは複数のスレーブ、最古のスレーブとの で構成され、この文であります。

そう言葉マスタースレーブは、キュー、ないRabbitMQのノードに関連し、私はここで推測しているの混乱です。私が何を質問し、再度ドキュメントを読んでたら、それはしばらく考えて私を得たが、我々は、ミラーリングされたキューがマスターとRabbitMQのノードのスレーブで構成されていることを言うことはできません。)の負荷分散については


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

関連する問題