我遇到了同样的问题,并且能够解决它。我的集群混合了 Linux (Ubuntu 18.04)、Windows 7 和 Windows 10 Pro。我最初遇到的问题是主机名在从同一台机器上 ping 时会解析为 ipv4 环回地址 127.0.0.1。这在 Linux 机器和 Windows 7 上已通过在每台机器上的主机文件中添加一行 192.168.0.XX 主机名来解决,
其中 XX 是我 LAN 上该机器的实际保留 IP 结尾,主机名是相关机器的主机名。如果您已经添加了它并且在 ping 主机名后仍然获得 ipv4 环回,您应该检查 Windows 是否没有忽略您的主机文件。如果格式、文件权限、空格等不正确,Windows 可以忽略它。有关此问题的更多疑难解答,请参阅 https://serverfault.com/questions/452268/hosts-file-ignored-how-to-troubleshoot。
查看它是否被忽略的一个简单测试是添加表单的另一个条目:
192.168.0.XX hostname2
即(网络上其他一些虚构的 IP 地址)(虚构的主机名)
然后 ping 主机名 2。如果 IP 是编造的,您将不会收到回复,但您仍然应该能够看到该名称正在解析为您放入 hosts 文件中的任何 IP。如果没有,则不会处理主机。 hosts 文件更改应立即生效。
即使我的主机文件正确设置了 ipv4 地址,我在 Windows 10 上也遇到了类似的问题,除了在这种情况下,即使我禁用了 ipv6,它也解析为 ipv6 环回地址 ::1。显然,即使对外部 LAN 流量禁用了 ipv6,ipv6 环回网络适配器也始终处于活动状态。我可以通过在命令窗口中使用 netsh 编辑前缀策略将 ipv4 设置为机器的首选协议来解决此问题。
就我而言,我使用的命令是:
netsh int ipv6 set prefixpolicy ::/0 32 1
netsh int ipv6 set prefixpolicy ::1/128 33 0
这些设置 ipv6 和 ipv6 环回的优先级(分别为 32 和 33)低于 ipv4 默认优先级(35)。
以下是修改前的标准前缀策略,顶部是ipv6:
C:\WINDOWS\system32>netsh interface ipv6 show prefixpolicies
Querying active state...
Precedence Label Prefix
---------- ----- --------------------------------
50 0 ::1/128
40 1 ::/0
35 4 ::ffff:0:0/96
30 2 2002::/16
5 5 2001::/32
3 13 fc00::/7
1 11 fec0::/10
1 12 3ffe::/16
1 3 ::/96
以下是上述 2 个命令之后的策略,ipv6 就在 ipv4 之下:
C:\WINDOWS\system32>netsh interface ipv6 show prefixpolicies
Querying active state...
Precedence Label Prefix
---------- ----- --------------------------------
35 4 ::ffff:0:0/96
33 0 ::1/128
32 1 ::/0
30 2 2002::/16
5 5 2001::/32
3 13 fc00::/7
1 11 fec0::/10
1 12 3ffe::/16
1 3 ::/96
此线程有更多关于前缀策略的信息:
https://superuser.com/questions/436574/ipv4-vs-ipv6-priority-in-windows-7
在这些更改之后,我检查了每台机器自己的主机名的 ping,当从同一台机器上完成时,返回保留的 ipv4 网络地址,并从 Matlab 并行服务器管理中心重新运行“测试连接”测试并有没有更多的错误。之后我的集群正常工作。