2016-04-15 8 views
0

3つのノード(rabbit1、rabbit2、rabbit3)を持つRabbitMQクラスタをセットアップしました。これらはそれぞれドッカーコンテナで実行されています。RabbitMQクラスタで新しいマスターが選択されない

すべてのキューは3つのノード間でミラーリングされ、rabbit1はマスターです。私がウサギ2またはウサギ3の容器を止めると、残っている2つのノードは正常に動作します。キューに3つのメッセージがある場合、これらはまだウサギ1に存在し、他のノードはまだ上に存在しています。

しかし、私がウサギ1を停止すると、ウサギ2とウサギ3の待ち行列は、ウサギ1が再び始まるまで空になります。 rabbit2またはrabbit3にメッセージを送信すると、メッセージは受信されますがキューには保存されません。一方、ウサギ1がアップして、ウサギ2 /ウサギ3に何かを送ると、メッセージは保存され、正しく同期されます。

マスターがシャットダウンされたときにメッセージがスレーブから空にならないようにするために必要な方法や設定がありますか?スレーブが代わりに新しいマスターを選ぶか、少なくともメッセージを保存しますか? ありがとうございます。

答えて

0

クラスタを設定することも重要ですが、キューミラーリングも構成する必要があります。デフォルトでは、キューは他のノードに複製されません。ポリシーを使用して明示的にindicate which queue(s) must be replicated and howを必要とします。

上記のリンクされたRabbitMQのドキュメントは、いくつかのユースケースの例として挙げられています。私はRabbitMQのは、どちらも "で見ることができません彼らは管理下にあり、例えば表示されません。これらのキューを「カウント」んが、私のコード内のキューを宣言し、

+0

私は明確にすべきです:すべてのノート間でメッセージを複製し、自動的に同期させるための正しいポリシーを設定しました。だから私はなぜそれがうまくいかないのか混乱しているのです。私のポリシーは以下の通りです:rabbitmqctl set_policy ha-all "^ ha \"。 – KaffeeKaethe

+0

したがって、このように「ミラー化されたキューのマスターを含むRabbitMQノードを停止した場合は、他のノードの一部のスレーブがマスターに昇格されます。 "それはうまくいくはずです – KaffeeKaethe

+0

あなたのキューの名前は何ですか? –

0

は、だから私は、問題を見つけましたrabbitmqctl list_queues "と入力します。

UIを介して、またはrabbitmqadminを介してキューを宣言し、サービスを既存のキューに接続させるとうまく動作します。

私は、キューが管理ツールに表示されない理由は明らかですが(なぜなら、私は読み取り/プッシュできるので)明らかにどこかに存在しています。

関連する問題