2

アプリケーションを 3 つのノードpc, pc0, で実行していますpc1。最初にまとめて起動すると1台目のノードが起動し、1台目のシェルを終了すると2台目(pc0)が起動し、2台目のシェルを終了すると3台目(pc1)が起動しました。しかし、pc1 がまだ実行されている間に pc と pc0 を再起動すると、必須ノード pc1 がダウンしていると言って両方のノードがクラッシュしました。私は疑問に思っています.pc1は実行されていますが、他のノードは"pc1 is down".

{"Kernel pid terminated",application_controller,"{application_start_failure,kernel,{{shutdown,{failed_to_start_child,kernel_config,{mandatory_nodes_down,['myapp@pc-1']}}},{kernel,start,[normal,[]]}}}"}

その理由は何ですか?

4

1 に答える 1

1

アプリケーションにグローバルな名前登録者はいますか? 引き継ぎの手順​​は、まず優先度の高いノードからアプリケーションを起動します。次に、他のノードでアプリケーションをシャットダウンします。これは、グローバル名が競合する短い期間があることを意味します。

デフォルトのグローバル名競合リゾルバは global:random_exit_name() です。pid をランダムに取得します。そのため、優先度の高いノードでプロセスを強制終了し、アプリケーションのシャットダウンを引き起こす可能性があります。

私の解決策は、常にプロセスをローカルに登録することです。そのため、引き取り時も問題ありません。次に global:re_register_name() を使用してグローバル名を登録します。

于 2013-12-20T09:04:38.947 に答える