2017-02-09 118 views

回答

2

erlang:發送不會使用一個像EPMD一個端口。 Erlang使用EPMD端口來查找其他節點,因此所有服務器必須能夠在此端口上相互通話。在Erlang集羣中,所有節點都連接到網格中的所有其他節點。 Erlang epmd將使用兩個端口,一個用於發現其他erlang節點(默認端口4369)和實際通信的動態範圍。

集羣中的所有節點都必須使用相同的EPMD端口號聽

另請注意,Epmd會跟蹤哪個Erlang節點正在使用本地計算機上的哪些端口。如果要限制Erlang用於Erlang節點間通信的端口範圍,例如9100-9105,可以將以下行添加到您的app.config中,設置內核變量'inet_dist_listen_min'和'inet_dist_listen_max'。

實施例:

{ kernel, [ 
       {inet_dist_listen_min, 9100}, 
       {inet_dist_listen_max, 9105} 
      ]}, 

或起始使用的erlang節點時內核變量 'inet_dist_listen_min' 和 'inet_dist_listen_max'。

例子:

erl -sname foo -kernel inet_dist_listen_min 9100 inet_dist_listen_max 9105 

確保您設置的範圍在集羣中的所有節點提供足夠的端口。

+0

這個'set_env'例子能工作嗎?我懷疑在你有機會改變任何環境變量之前選擇了端口。 – legoscia

+1

@legoscia修改了答案原因使用set_env設置了內核變量,但節點繼續使用原始端口號。很奇怪。 – byaruhaf