You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨机器Erlang节点net_adm:ping返回pang问题排查求助

解决Erlang分布式节点net_adm:ping返回pang的问题

我之前也踩过Erlang分布式节点互通的坑,结合你描述的情况(树莓派和Windows能双向ping通,但跨机net_adm:ping失败,同机Shell正常),给你梳理几个关键的排查和解决方向:

  • 确保节点配置完全一致

    • 首先检查Erlang节点的cookie:这是分布式通信的核心验证密钥,大小写敏感。
      • 在两端Shell分别执行 erlang:get_cookie().,确认返回的原子完全相同。
      • 如果不一致,启动节点时通过 erl -setcookie 你的自定义cookie 指定,或者在运行中的Shell用 erlang:set_cookie(node(), 你的自定义cookie). 临时修正。
    • 节点名称格式要正确:必须是 节点名@主机IP/主机名 的形式,比如树莓派启动节点:erl -name pi@192.168.1.105 -setcookie my_file_server,Windows端启动:erl -name desktop@192.168.1.20 -setcookie my_file_server。
  • 验证网络端口连通性

    • Erlang分布式依赖两个关键部分:epmd服务(默认4369端口)和动态通信端口。
      • 先测试4369端口:Windows端用PowerShell执行 Test-NetConnection 树莓派IP -Port 4369,树莓派端用 telnet WindowsIP 4369 或者 nc -zv WindowsIP 4369,确认端口能连通。
      • 如果4369不通,检查两端epmd是否运行:Erlang节点启动时会自动拉起epmd,也可以手动执行 epmd -daemon 启动后台服务。
      • 动态端口拦截:如果4369通了还是失败,可能是防火墙拦截了动态端口。可以临时关闭两端防火墙测试(仅限排查),或者通过设置 ERL_EPMD_PORT 环境变量固定端口范围,再配置防火墙规则放行。
  • 排查主机名解析问题

    • Erlang节点有时会依赖主机名解析而非直接IP,检查两端的hosts文件:
      • Windows的hosts路径:C:\Windows\System32\drivers\etc\hosts,添加一行 树莓派IP pi-node;
      • 树莓派的hosts路径:/etc/hosts,添加一行 WindowsIP desktop-node;
      • 测试解析:两端分别ping对方的主机名,确保能解析到正确IP。
  • 检查Erlang版本兼容性

    • 尽量保证两端Erlang版本一致,大版本差异(比如Erlang/OTP 23和26)可能导致分布式协议不兼容。执行 erl -version 查看版本,若差异较大建议升级或降级到同一版本。
  • 统一节点启动方式

    • 启动节点时要统一使用 -name(长名称,基于完整主机名/IP)或 -sname(短名称,仅限本地局域网主机名),不能一端用-name另一端用-sname,否则会无法识别节点。

内容的提问来源于stack exchange,提问作者AkRk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:51:35