2

3 つのノードを持つ RabbitMQ クラスター (バージョン 3.0.1) があります。使用可能な 3 つのノードすべてに常にキューが存在するようにします。
次のようにクラスターを作成します。

node1:
node2: rabbitmqctl join_cluster rabbit@node1
node3: rabbitmqctl join_cluster rabbit@node1

この後、次のポリシーを設定します。

パターン: ^(?!amq.).*
定義: ha-mode: all

ここで 3 つのノードを開始し、ノードの 1 に somethink を書き込むと、3 つすべてにそれがあり、動作します。ただし、ノードの 1 つへの接続が切断され、ノードがしばらくしてから復帰すると、このノードは他のノードと同期されなくなります。
どうすればこれを解決できますか? ダウンタイムの後でも、すべてのノードが常に同期されるようにしたいと考えています。

4

3 に答える 3

3

バージョン 3.1.x では、自動に設定できるオプション ha-sync-mode があり、問題を解決します。

ha-sync-mode ポリシー キーを自動に設定することで、キューを自動的に同期するように設定できます。ha-sync-mode は手動に設定することもできます。設定されていない場合は、手動と見なされます。

詳細については、 http://www.rabbitmq.com/ha.htmlを確認してください。

于 2013-06-06T12:48:52.750 に答える
1

この問題を解決するには、rabbitmq-server init.d スクリプト (/etc/init.d/rabbitmq-server) を編集することにしました。

( rabbitmq_start関数で) 開始が成功した後に次の行を追加すると、新しく参加したメンバーがすべてのキューを同期します。

$CONTROL list_queues | cut -f1 | tail -n +2 | head -n -1 | xargs -n 1 $CONTROL sync_queue > /dev/null

これは最もクリーンなソリューションではありませんが、それでも解決策です。配布ファイルを変更することはあまり好きではありません。

于 2013-05-26T11:52:06.820 に答える