可以使用以下方法通过iex启动Elixir节点:
iex --sname node1@10.99.1.50 --cookie foo
然后另一个可以使用以下命令在REPL中连接此节点:
Node.connect(:"node1@10.99.1.50")
似乎连接是通过TCP协议。但是,我没有在document中找到一个参数来指定使用哪个端口。有没有人对此有任何想法?
答案 0 :(得分:9)
连接节点由Erlang Port Mapping Daemon (epmd)处理,默认情况下在端口 4369 上运行。来自文档:
可以指定一个不同的端口,以允许表示独立节点集群的epmd的多个实例共存于同一主机上。群集中的所有节点都必须使用相同的epmd端口号。
实际节点打开一个随机(?)端口,并将其与sname
一起通告给本地epmd
。当您现在连接到'node1@10.99.1.50'
时,您的Erlang虚拟机将在端口4369上询问在epmd
上运行的远程10.99.1.50
,以获取有关'node1'
的信息。它将回答您的流程直接连接到的实际端口号。
答案 1 :(得分:6)
根据这篇文章Erlang Distribution,Erlang在TCP上使用端口4369。该帖子提供了更多相关信息。
对于防火墙:Erlang发行版为epmd使用端口 4369 以及每个节点使用随机端口。您可以使用Erlang内核应用程序环境设置inet_dist_listen_min和inet_dist_listen_max来限制这些随机端口的范围。您需要允许这些端口上的传入 TCP连接,但仅允许来自群集的其他主机。
您可能也对此感兴趣:Chris McCoord on the subject