6

Erlangは、slave別のマシンのマスターノードに報告して調整されるさまざまなマシンのスレーブノードを生成するアプリケーションのモジュールで使用します。スレーブノードはマシンのポートを開いており、いくつかの外部プログラムを実行しています(基本的に、erlangスレーブノード(私たちはそれらをワーカーと呼びます)は外部プログラムの単なるラッパーです)。

しかし、私たちはいくつかの予期しない問題に遭遇しましたが、それに対して良い解決策は見つかりませんでした。

  1. コード配布。現在、Makefileはコンパイルされたerlangコード(フォルダー)をワーカーノードを実行しているマシンにrsyncし、ワーカーノードの起動時に引数をebin介してロードします。-pa実行時にErlangを介してコードを自動的に配布する方法は本当にあるはずですが、その方法はわかりません。

  2. ロギング。スレーブモジュールのドキュメントには、「スレーブで生成されたすべてのTTY出力がマスターノードに送り返される」と記載されています。ただし、lagerスレーブ(ワーカー)ノードで(芭蕉ロガー)を実行すると、その出力はマスターノードのttyにリダイレクトされません(マスターノードからのログ出力のみがあります)。現在、マスターノードで実行されているプロセスがあり、スレーブノードから取得したメッセージを(ラガーを介して)ログに記録します。したがって、スレーブノードに何かを記録するために、マスターノードにメッセージを送信します。

次のようにワーカーノードを起動しています。

slave:start(IP, NodeName, NodeArgs)

どこにNodeArgsありますか

 -setcookie thecookie -pa /home/dau/mapro/deps/nicedecimal/ebin/ /home/dau/mapro/deps/meck/ebin/ /home/dau/mapro/deps/lager/ebin/ /home/dau/mapro/deps/jsx/ebin/ /home/dau/mapro/apps/worker/ebin/ /home/dau/mapro/ebin/ -s worker_app

ここで、指定されたすべてのパスは、ワーカーノードを実行しているマシン上の絶対パスです。

4

1 に答える 1

2

項目 #1 までは正しいことをしています: OTP/Erlang 自体のインストールと同様に、Erlang ソース モジュールまたはプリコンパイル済みビーム ファイルのリモート ホスト マシンへのインストールは、ユーザーの責任です。それらがリモート マシンのコード パスに入ると、心ゆくまでロード、アンロード、およびホットスワップできます :)

書き込み項目 #2: スレーブ モジュール コードが単純なエラー メッセージ (つまりerlang:display()) をマスター ノードに出力できることを確認しましたか? この場合、問題はより大きな構成です -簡単なテストとして に設定error_logger_redirectしてみてください。おそらく...これが役に立たない場合は、事前に謝罪してください!false

于 2012-11-08T22:06:45.553 に答える