2016-03-31 10 views
0

は私が質問を策定する前に私の現在のシナリオを説明してみましょう:別のユーザーと再起動のRabbitMQクラスタ

現在のシナリオ

私はルートで作成した2つのノードとのRabbitMQクラスタを持っていると私はまた、Web管理を持っています完全に機能したプラグインがインストールされています。

いくつかのキューのコンシューマが失敗し、何百万ものメッセージが蓄積されてしまったため、ウサギが崩壊してディスクにすべて書き込んだ(/ var/lib/rabbitmq/mnesia/name_of_the_node/queues/)、ファイルシステムがいっぱいになり、ノード全体がダウンしました。ディスク内のすべてのメッセージを削除した後

問題/質問

  1. (私はもはやそれを必要としなかったと は、ディスク領域を解放しなければならなかった)、そして rabbitmq-server -detachedでノードを再起動し、クラスタに保持 管理プラグインはもう応答がありませんでしたので、 を再起動せずにもう一度動作させる方法がありますか?
  2. 私はクラスタ全体を停止し、セキュリティの理由からrootの代わりに rabbitmqユーザを使用して再度起動する予定です。また、 は、私が念頭に置いておくべきことを知りたいと思います 問題を避ける。私の主な関心事は、クラスタが、rabbitmq ユーザで起動した後で、現在の設定(ユーザ、ポリシー、 の交換、キュー、およびバインディング)をすべて保持/保持することです。
  3. の問題を最小限に抑えるために再起動を行う方法がわかりません。再起動後にWeb管理プラグインが動作することを保証したいと考えています。

    オプション1:RabbitMQのルートで
    停止ノード2でスタート>ノード1 - : - ルートと
    停止ノード1ルートと
    停止すべてのノード> RabbitMQの

    オプション2ですべてのノードを起動します - > rabbitmqでノード2を開始してください

私はあなたに私のために持っている可能性のある他のアドバイスや提案も聞いています。

答えて

1
  1. 詳細情報なしであなたの質問に答えるのは難しいです。少なくとも、ログファイルを見て、どこかに投稿してください。

  2. ノードをルートとして実行して停止した後、/var/lib/rabbitmqの全所有権をrabbitmq:rabbitmqに変更します。 /var/log/rabbitmqと同じことをしてください。これは、RabbitMQが公式のパッケージとデフォルト設定でデータを書き込む唯一の場所です。

    以前はrootとして実行されていたため、Erlangはノード間通信を許可する共有秘密キー「key」を/root/.erlang.cookieに保存しました。それを/var/lib/rabbitmq/.erlang.cookieにコピーして所有権とアクセス権を修正する必要があります。所有者のみが読み取り可能である必要がありますので、許可は0400または0600です。 Erlangはグループや誰かが読むことができれば文句を言うでしょう。

  3. 一度に1つのノードにすることができます(その間にErlangまたはRabbitMQを更新した場合を除く)。上記のErlangのクッキーに注意してください。他の実行ノードと異なるCookieを持つノードを起動すると、通信できなくなります。他のRabbitMQのノードのホスト名とother-hostnameを置き換え、上記のコマンドラインで

    # Open a shell as the `rabbitmq` user and run: 
    erl -A0 -noinput -noshell -sname foobar \ 
    -eval "io:format(\"~p~n\", [net_adm:ping('[email protected]')]), halt()." 
    

    :クッキーを確保するため

    あなたがRabbitMQのを再起動する前に、あなたは他の実行中のRabbitMQのノードにpingを実行しようとすることができ、正しいです。すべてが正常であれば、このコマンドはpongを出力するはずです。 pangと表示されている場合は、何か問題があります。

関連する問題