A similar question here。
的分佈是由一種叫做Erlang Port Mapper Daemon守護程序提供。默認情況下,它偵聽端口4369,因此您需要確保該端口在節點之間打開。另外,每個啓動的Erlang虛擬機都會打開一個額外的端口與其他虛擬機進行通信。你可以看到這些端口與epmd -names
:
[email protected]:~ % epmd -names
epmd: up and running on port 4369 with data:
name hbd at port 22200
您可以檢查該端口是否被做telnet
它打開,如:
[email protected]:~ % telnet 127.0.0.1 22200
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
^]
Connection closed by foreign host.
您可以將端口更改到要檢查端口,例如4369,以及IP到所需的IP。做ping
是不夠的,因爲它使用它自己的ICMP protocol,這與Erlang發行版用於通信的TCP不同,例如, ICMP可能被允許,但TCP可能被阻止。
編輯:
請按照本指南Distributed Erlang在分佈式模式下啓動一個Erlang VM。然後你可以使用net_adm:ping/1
從另一個節點連接到它,例如:
([email protected])17> net_adm:ping('[email protected]').
pong
只有這樣epmd -names
會顯示啓動二郎VM名單上。
EDIT2:
假設有壽主機A和B每一個運行一個虛擬機二郎。epmd -names
每個主機上運行的顯示,例如:
主機A:
epmd: up and running on port 4369 with data:
name servA at port 22200
主機B:
epmd: up and running on port 4369 with data:
name servB at port 22300
你需要能夠做到:
在主機A:
telnet HostB 4369
telent HostB 22300
在主機B:
telnet HostA 4369
telnet HostA 22200
其中HostA和HostB是那些主機的IP地址(主機A .e.g是主機A的IP,主機B是主機B的IP)。
如果telnet工作正常,那麼你應該可以從一臺主機到另一臺主機執行net_adm:ping/1
,例如,在主機A上,您可以ping主機B的名稱。名稱是命令node().
返回的內容。
你將需要提供一些代碼和上下文來幫助你做些什麼。 – Suever
你檢查過防火牆配置和路由器嗎? – Pascal
你可以從兩個節點發布'epdm -names'嗎? – Amiramix