私は RabbitMQ 分散 POC に取り組んでおり、ノードのクラスタリングの基本に行き詰まっています。クラスタリングに関するうさぎのチュートリアル
に従おうとしているので、これが参考になります。
erlang (R14B04) と rabbit (2.8.2-1) をインストールした後、ファイルの内容を 1 つのノードから他の 2 つのノードにコピーしました。
どうすれば erlang にこの変更を認識させることができるか確信が持てず、マシン自体を再起動する必要がありました (かなり強引ですが、erlang はまったく知りません)。
さらに、通信用に iptables 4369 と 5 つの追加ポートを開き、次の構成の 下に配置しました。.erlang.cookie
/usr/lib64/erlang/bin/sys.config
{kernel,[{inet_dist_listen_min, XX00},{inet_dist_listen_max,XX05}]}]
次に、erlang がこれらを考慮に入れていることを確認するための別の再起動 (私が知っているばかげた) を実行します。
rabbitmqctl cluster rabbit@HostName1
私は得る:
Clustering node rabbit@HostName2 with [rabbit@HostName1] ...
Error: {no_running_cluster_nodes,[rabbit@HostName1],
[rabbit@HostName1]}
erlang.cookie やポートのいじりがうまくいかなかった可能性がありますが、それらを確認する方法がわかりません。erl
cmd を入力してから、またはその他のコマンドを入力して詳細情報を取得しようとしましたerl_epmd:names()
が、おそらく erlang の土地から離れています。
本当に助けていただければ幸いです
更新:
2 つの erlang ノードを手動で ping してみましたが、pang
戻ってきました。
私は次のことを行いました:
2つのノードに接続し、rabbitmqを停止し(必要かどうかはわかりませんでしたが、念のために)、erlangコマンドラインが開始されたときに(erl -sname dilbert
および)のようにerlangを開始しました。それぞれで実行し、それぞれ取得しました。次に、両方のノードから一重引用符を付けて実行しようとし(もちろん名前を変更しました)、8つのケースすべてに乗りました。マシンの 1 つで
実行すると、空の配列が返されました。
また、ファイアウォール内のすべてのトラフィックを許可しようとしました (スクリプトerl -sname dilbert2
node().
dilbert@HostName1
dilbert2@HostName2
net_adm:ping('dilbert').
net_adm:ping('dilbert@HostName1').
pang
nodes().
)、上記のコマンドを実行してみてください(現在は元に戻っているので心配しないでください)、それでも戻ってきましたpang
.
Update2:
何らかの理由で、解決する必要がある Cookie の不一致がありました (@kjw0188 の提案に感謝します [ erlang:get_cookie().
erlang コマンド ラインで実行しました])。
これは役に立たず、iptables を完全に停止する必要があり (理由はわかりませんが、すぐにわかります) -name dilbert@my-ip
、ラックスペース サーバーに dns-name がないため、erlang ノードをロードする必要がありました。これにより、最終的にポンを取得し、ノードがお互いを認識できるようになりました(nodes().
pingの後に空でない配列を返します)。
私が今直面している問題は、erlang を開始するときに -sname の代わりに -name を使用するように RabbitMQ に指示する方法です。