2012-03-11 13 views
4

1)ノードが故障したとき、別のノードから自動的に検出する方法はありますか?実行時に障害が検出されましたか?

2)クラッシュしたノードを自動的に再起動する方法はありますか?

私の2番目の質問については、私はグーグルで話しましたが、実行時にコードからノードを作成することについて何の言及も見つけられません。

実行時にプロセスを作成することは簡単ですが、いつクラッシュするのかを知りたい場合はスーパーバイザーなどから作成することができますが、ノードの検出/作成に関することは何も見つかりません。

Amazon EDSのより小さいバージョンを設計したいクライアントには必要ですが、ノードがダウンした場合に手動でノードを再起動することはできません。

+0

実行時にノードを起動するには、 'net_kernel:start/1':' net_kernel:start([NodeName、shortnames]) 'または' net_kernel:start([NodeName、longnames]) 'を実行します。詳細はこちら:http://www.erlang.org/doc/man/net_kernel.html#start-1 erlangシェルで試してみることもできます。 –

答えて

3

erlangアプリケーション内のすべての可視ノードを監視するには、net_kernel:monitor_nodes(true, [{node_type, visible}])を使用できます。 man pageから:

呼び出しプロセスがステータスの変化に メッセージをノードに加入または登録解除。新しいノードが接続されると、ノードアップメッセージがすべてのサブスクリプションプロセス に配信され、ノードが切断されているときには、ノードが削除されたメッセージが配信されます。

リモートマシン上のノードを起動するために使用する方法は、(nodedownメッセージを受け取るプロセス内から)表示されません。おそらく、自動的にこれを行う小さなモジュールを書く必要があります。

+1

'net_kernel:start/1':' net_kernel:start([NodeName、shortnames]) 'または' net_kernel:start([NodeName、longnames]) 'を実行することで、実行時にノードを起動することができます。詳細はこちら:http://www.erlang.org/doc/man/net_kernel.html#start-1 erlangシェルで試してみることもできます。 –

関連する問題