1

分散アプリケーションのコンテキストで実行すると、net_adm:ping/1 に関して異なる動作が発生します。

起動時に既知のノードに ping を実行し、接続されたノードのメッシュ内のすべてのノードを検出するアプリケーションがあります。

このアプリケーションを単一ノード (非分散構成) で開始すると、net_adm:ping/1 の後に nodes/0 が続き、4 つの他のノードが報告されます (これは正しいです)。4 つのノードは 2 つの異なる物理マシン上にあるため、返されるのは次の n1@machine_1、n2@machine_2、n3@machine_2、n4@machine_1 です (実際には IP アドレスが返され、machine_x ではありません)。

2 ノード分散アプリケーションの一部である場合、アプリケーションが開始されるノードで、net_adm:ping/1 の後に nodes/0 が続き、各マシン (n1@machine1、n2@machine2) から 1 つずつ、2 つのノードが報告されます。約 750 ミリ秒の遅延の後、nodes/0 への 2 回目の呼び出しにより、正しい 5 つのノードが検出されます。私のアプリケーションが動作するためには、欠落している 3 つのノードのうち 2 つが必要です。

R15B02を使用しています

メッシュ内の一部のノードが分散アプリケーション構成に参加している場合、推移的なノード検出プロセスに関する遅延は異なることが知られていますか?

4

1 に答える 1

0

kernelアプリケーションのドキュメントには、ノードを同期して、先に進む準備が整い、すべての準備が整うまでブート フェーズを停止する方法が記載されています。オプションは次のとおりです。

sync_nodes_mandatory = [NodeName]

このノードが正常に起動するために、他のどのノードが有効である必要があるかを指定します。リスト内のノードが指定された時間内に起動しない場合、このノードも起動しません。このパラメータが定義されていない場合、デフォルトは [] です。

sync_nodes_optional = [NodeName]

このノードを適切に起動するために、他のどのノードが有効であるかを指定します。このリスト内のノードが指定された時間内に開始されない場合でも、このノードは開始されます。このパラメータが定義されていない場合、デフォルトで空のリストになります。

それらを使用するファイルは次のようになります。

[{kernel,
  [{sync_nodes_mandatory, [b@ferdmbp, c@ferdmbp]},
   {sync_nodes_timeout, 30000}]
}].

a@ferdmbpを呼び出してノードを開始しますerl -sname a -config config-file-above。このアプローチの欠点は、各ノードに独自の構成ファイルが必要なことです。

于 2012-12-06T00:32:12.920 に答える