7

net_adm:world() を使用して他のホストのノードに接続していますが、これを機能させる唯一の方法は、hosts ファイルを手動で作成し、ファイルに他のホストの名前をリストすることです。ホストが 10 台ある場合、このファイルを 10 台のマシンすべてに配置し、新しいホストがクラスターに追加されるたびにリストを 10 回更新する必要があります。

新しいホスト上のノードへの接続が確立されるたびに、このファイルを自動的に更新する方法はありませんか?

4

2 に答える 2

4

.hosts.erlang ファイルが完全である必要も、100% 正しい必要もありません。ノードは、クラスター内の他のすべてのノードについて学習するために、互いに接続するだけで済みます。

.hosts.erlang ファイルのメンテナンスをスキップして、マルチキャスト UDP を使用してノードを動的に検出できます。コード例については、 nodefinderを参照してください。

マルチキャスト UDP ルートから始めましたが、中央のホスト ファイルを維持し、rsync を使用してそれをすべてのホストに配布することにしました。ノードを頻繁に再起動しないため、大きな問題にはなっていません。

于 2012-10-27T03:44:36.750 に答える
1

シェフを使用.hosts.erlangして、クラスターに属するノードのファイルを事前設定します。この関数は、ノードの 1 つがダウンしている場合などに、net_adm:world()含まれているものと必ずしも一致しないクラスターの一部であるノードを特定するために使用できます。.hosts.erlangを使用する代わりに、(から読み取る代わりに) ホストのリストを取得し、現在接続されているノードを決定するのと同じことを行うnet_adm:world()関数があります。net_adm:world_list(Hosts).hosts.erlangnet_adm:world()

于 2012-11-03T22:39:19.183 に答える