2016-12-23 3 views
1

私は、ドッキングされたRabbitMQクラスタを設定することについて少し読んできました。そしてgoogleは、同じマシンでこれを行うためのあらゆる種類の結果を示しています。簡単なドッキングRabbitMQクラスタを設定するにはどうすればよいですか?

複数のマシンにまたがってRabbitMQクラスタを設定しようとしています。私は最初のマシン(dockerswarmmodemaster1)には3台の名前dockerswarmmodemaster1を持つマシン、dockerswarmmodemaster2dockerswarmmodemaster3

を持って

、私は、次のコマンドを発行します。

docker run -d -p 4369:4369 -p 5671:5671 -p 5672:5672 -p 15671:15671 -p 15672:15672 \ 
    -p 25672:25672 --hostname dockerswarmmodemaster1 --name roger_rabbit \ 
    -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management 

は今、これはうまくのRabbitMQを起動し、私は15672の管理ページに行き、それが期待どおりに働いていることを確認することができます。

私は2番目のマシン(dockerswarmmodemaster2)にSSHしていますが、これは私が立ち往生しているビットです。私は、次のコマンドでバリエーションをしようとされていない:

docker run -d -p 4369:4369 -p 5671:5671 -p 5672:5672 -p 15671:15671 \ 
    -p 15672:15672 -p 25672:25672 --name jessica_rabbit -e CLUSTERED=true \ 
    -e [email protected] \ 
    -e RABBITMQ_ERLANG_COOKIE='secret cookie here' \ 
    rabbitmq:3-management 

をどんなに私がしようとするもの、両方のRabbitMQのマシン上のWebページには、「クラスタへのリンク」セクション下には、クラスタが存在しないことを言います。私は第3のマシンをまだ試していません。

So-some more info:
1.マシン名はDNSで解決できます。
2.両方のマシンでdocuker runコマンドで--net = hostスイッチを使用しようとしました。変化なし。
3.ドッカー集団または集団モードを使用していません。
4.私はドッカーの作成をしていません。可能であれば、私はそれを使用したくないと思う。

docker runコマンドでこれを行う方法はありますか、またはrabbit admin cliをダウンロードして手動でクラスタに参加する必要がありますか?

答えて

2

このプラグインhttps://github.com/aweber/rabbitmq-autoclusterを使用すると、RabbitMQドッカークラスタを作成できます。

プラグインはetcd2またはconsulをサービス検出として使用します。この方法では、rabbitmqctlコマンドラインを使用する必要はありません。

私はそれをドッカー集団とともに使用しましたが、必ずしも必要ではありません。

Hereは結果

1

公式コンテナは、環境変数に未対応のようですCLUSTEREDCLUSTER_WITHです。 RabbitMQ Configurationで指定されたリスト変数のみをサポートします。 公式Clustering Guideによると、可能な解決策の1つは設定ファイル経由です。したがって、コンテナに独自の設定を提供することができます。例えば、/home/user/rmq/rabbitmq.config、このスニペット

[ 
    { rabbit, [ 
    { loopback_users, [ ] }, 
    { cluster_nodes, {['[email protected]'], disc }} 
    ]} 
]. 

割引:あなたのケースで 変更されたデフォルトの設定は次のようになります。 ヒント:管理コンソールでノードを表示したい場合は、あなただけの文字列とそれ以降

[rabbitmq_management]. 

を別のファイル/home/user/rmq/enabled_pluginsを追加する必要があり、あなたのコマンドは、あなたがまた必要になることがあり

docker run -d -p 4369:4369 -p 5671:5671 -p 5672:5672 -p 15671:15671 \ 
-p 15672:15672 -p 25672:25672 --name jessica_rabbit \ 
-v /home/user/rmq:/etc/rabbmitmq \ 
-e RABBITMQ_ERLANG_COOKIE='secret cookie here' \ 
rabbitmq:3-management 

PSのようになります。環境変数RABBITMQ_USE_LONGNAMEの設定を検討してください。

1

クラスタを作成するには、クラスタを構成するすべてのrabbitmqノードに、ノード名(ホスト名)でアクセス可能である必要があります。 それぞれのドッカーコンテナのホスト名を--hostnameオプションで指定し、他のすべてのコンテナの/ etc/hostエントリを追加する必要があります。これは--add-hostオプションで行うことも、/ etc/hostsファイルを手動で編集することによって行うこともできます。 したがって、ドッカーコンテナを持つ3つのrabbitmqノードクラスタ(rabbitmq:3管理イメージ)の例を次に示します。

まず、IPを割り当てることができるようにネットワークを作成します。docker network create --subnet=172.18.0.0/16 mynet1。我々は、次を持ってしようとしている。それぞれのIP rab1con、rab2conとrab3con

  • という名前

    • 3ドッキングウィンドウコンテナは172.18.0.11、-12および-13
    • になり、それらのそれぞれは、ホスト名を持っています同じErlangのクッキーを共有する必要があります

    スピンのすべての最初の1

    アップ
  • RAB2とRAB3それぞれRAB1、 contanerのrab2conに比べ

    秒1

    docker run -d --net mynet1 --ip 172.18.0.12 --hostname rab2 --add-host rab1:172.18.0.11 --add-host rab3:172.18.0.13 --name rab2con -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management 
    

    最後の1

    docker run -d --net mynet1 --ip 172.18.0.13 --hostname rab3 --add-host rab2:172.18.0.12 --add-host rab1:172.18.0.11 --name rab3con -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management 
    

    rab3conに

    rabbitmqctl stop_app 
    rabbitmqctl join_cluster [email protected] 
    rabbitmqctl start_app 
    

    と同じことを行うと、それはそれです。

    関連する問題