Windows 2008 R2でErlang OTP 17.1を使用してRabbitMQ v3.3.5を実行しています。開発環境とQA環境はスタンドアロンです。ステージング環境と運用環境はクラスター化されています。
RabbitMQサービスが実行されている場合、RabbitMQ管理コンソールがすべてを表示しているときにこの問題が頻繁に発生することがわかりましたが、コマンドラインからrabbitmqctlを実行しようとすると、ノードがダウンしている(ローカルおよびリモートサーバー)。
この問題は、Windowsサービスを再起動すると解決します。
RabbitMQエラーログにエラーメッセージが表示されません。最後のメッセージは、ノードが稼働していることを示しました。
以下は、ステージングウィンドウクラスターのノード2で最近発生した問題の出力例です。
PS C:\Program Files (x86)\RabbitMQ Server\rabbitmq_server-3.3.5\sbin> .\rabbitmqctl.bat status
Status of node rabbit@MYSERVER2 ...
Error: unable to connect to node rabbit@MYSERVER2: nodedown
DIAGNOSTICS
===========
attempted to contact: [rabbit@MYSERVER2]
rabbit@MYSERVER2:
* connected to epmd (port 4369) on MYSERVER2
* epmd reports: node 'rabbit' not running at all
no other nodes on MYSERVER2
* suggestion: start the node
current node details:
- node name: rabbitmqctl2199771@MYSERVER2
- home dir: C:\Users\RabbitMQ
- cookie hash: mn6OaTX9mS4DnZaiOzg8pA==
この時点で、RabbitMQサービスを再起動してから再試行します
PS C:\Program Files (x86)\RabbitMQ Server\rabbitmq_server-3.3.5\sbin> .\rabbitmqctl.bat status
Status of node rabbit@MYSERVER2...
[{pid,3784},
{running_applications,
[{rabbitmq_management_agent,"RabbitMQ Management Agent","3.3.5"},
{rabbit,"RabbitMQ","3.3.5"},
{os_mon,"CPO CXC 138 46","2.2.15"},
{mnesia,"MNESIA CXC 138 12","4.12.1"},
{xmerl,"XML parser","1.3.7"},
{sasl,"SASL CXC 138 11","2.4"},
{stdlib,"ERTS CXC 138 10","2.1"},
{kernel,"ERTS CXC 138 10","3.0.1"}]},
{os,{win32,nt}},
{erlang_version,
"Erlang/OTP 17 [erts-6.1] [64-bit] [smp:4:4] [async-threads:30]\n"},
{memory,
[{total,35960208},
{connection_procs,2704},
{queue_procs,5408},
{plugins,111936},
{other_proc,13695792},
{mnesia,102296},
{mgmt_db,0},
{msg_index,21816},
{other_ets,884704},
{binary,25776},
{code,16672826},
{atom,602729},
{other_system,3834221}]},
{alarms,[]},
{listeners,[{clustering,25672,"::"},{amqp,5672,"::"},{amqp,5672,"0.0.0.0"}]},
{vm_memory_high_watermark,0.4},
{vm_memory_limit,3435787059},
{disk_free_limit,50000000},
{disk_free,74911649792},
{file_descriptors,
[{total_limit,8092},
{total_used,4},
{sockets_limit,7280},
{sockets_used,2}]},
{processes,[{limit,1048576},{used,139}]},
{run_queue,0},
{uptime,5}]
...done.
これの原因と状況を自動的に検出する方法に関するアイデアはありますか?
これは特に、WindowsでRabbitMQを実行する際の問題ですか?
ホスト名は、解決しようとするときに大文字と小文字を区別しません。たとえば、LOCALHOST
とlocalhost
は同じホストです。
ただし、Erlangがノードの名前を作成するとき(例:rabbit@<hostname>
(RabbitMQの場合)、この名前は大文字と小文字が区別されます。そう rabbit@LOCALHOST
およびrabbit@localhost
は、同じホスト上で実行される場合でも、2つの異なるノード名です。
最近、私たち(RabbitMQチーム)は、 Windowsでは、RabbitMQ用に構築されたノード名が一貫していない であることを発見しました。そのため、RabbitMQはWindowsサービスとして開始されることがあり、rabbit@MYHOST
しかしrabbitmqctl
はrabbit@myhost
および失敗。
RabbitMQ 3.6.0以降、ノード名は一貫している必要があります。
このエラーが発生する他の人には、これが私の修正でした。 Erlangをインストールしましたが、環境変数の設定に関する指示を見落としていました。
手動インストールページを読んでいた: https://www.rabbitmq.com/install-windows-manual.html
ERLANG_HOMEを、実際にErlangインストールを配置した場所に設定します。 C:\ Program Files\erlx.x.x(フルパス)。 RabbitMQバッチファイルは、%ERLANG_HOME%\ bin\erl.exeの実行を想定しています。
[スタート]> [設定]> [コントロールパネル]> [システム]> [詳細設定]> [環境変数]に移動します。システム環境変数ERLANG_HOMEを作成し、bin\erl.exeを含むディレクトリの完全パスに設定します。
何らかの理由で、自動インストールが間違ったパス名をERLANG_HOME変数に割り当てました-以下の画像を参照してください。最後に\ binを追加しました。
私は私のlinuxボックスで同様の問題を抱えており、Windowsのrabbitmqでも同様に処理できるため、ここに答えを投稿しています。
私の投稿と解決策: rabbtimqadmin-接続できませんでした:[Errno -2]名前またはサービスが不明です
中心的な問題は、rabbitmqの構成後にサーバー名を変更することでした。 rabbitmqをインストールすると、サーバー名が参照され、構成の一部になります。これはWindowsでも同様の問題であることがわかります。
つまり、rabbitmqを最初にインストールしたときの名前にサーバーの名前を戻すか、rabbitmq-env.conf
ファイル、Windowsのどこに行くかわかりませんが、Linuxの詳細は次のとおりです。 https://www.rabbitmq.com/man/rabbitmq-env.conf.5.man。 html
Linuxでは、サーバーの名前はCaSe SENiTivEでした。したがって、Windowsで同様の問題が発生する場合と発生しない場合があります。
これがお役に立てば幸いです!
Linuxを使用している場合は、/ var/lib/rabbitmq/mnesiaフォルダーの許可を変更してください。