我一直在尝试找出这个问题,但无法确定实际原因。这始于尝试在 AWS EC2 上的 docker swarm 中运行 HDFS。服务正确启动,日志显示 HDFS 数据节点能够获取正确的容器 IP(XXX:你的意思是来自 Swarm 网络,对吗?),但当它尝试连接到 namenode 时,请求包含子网中的 IP,但主机部分是错误的。我还注意到,在 namenode 上执行 netstat 时,来自 datanode 的所有连接都显示相同的外部地址,并带有 ec2.internal prostfix
[root@hdfs-namenode /]# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 hdfs-namenod:cslistener ip-10-0-255-10.ec:54714 ESTABLISHED
tcp 0 0 hdfs-namenode:ssh ip-10-0-255-10.ec:53178 ESTABLISHED
tcp 0 0 hdfs-namenode:ssh ip-10-0-255-10.ec:34606 ESTABLISHED
tcp 0 0 hdfs-namenod:cslistener ip-10-0-255-10.ec:54548 ESTABLISHED
tcp 0 79 hdfs-namenod:cslistener ip-10-0-255-10.ec:59888 ESTABLISHED
Active UNIX domain sockets (w/o servers)
swarm 覆盖网络子网是10.0.255.0/24
。如果我更改子网,IP 地址始终具有正确的子网,但最后一个八位字节不同。
如果您检查netstat
输出,就会发现 ssh 连接来自同一主机上的不同容器。
当我将另一个 ec2 实例添加为工作节点时,我看到了同样的问题。连接到 namenode 的数据节点都具有相同的 IP 地址。它将是同一个子网,但与管理器节点的最后一个八位字节不同。似乎主机网络上有 NATing,但我找不到有关它的任何信息。这仅在 swarm 模式和 AWS EC2 上发生。当我尝试在 Mac 上运行它时,swarm 网络正常工作。
我正在调查/etc/resolv.conf
:
[root@hdfs-namenode /]# cat /etc/resolv.conf
search ec2.internal
nameserver 127.0.0.11
options ndots:0
我不确定这个配置是否会影响 DNS 解析。
netstat -n
显示相同的外国地址,但不正确
root@hdfs-namenode /]# netstat -n
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 10.0.255.3:9000 10.0.255.10:54714 ESTABLISHED
tcp 0 0 10.0.255.3:22 10.0.255.10:53178 ESTABLISHED
tcp 0 0 10.0.255.3:22 10.0.255.10:34606 ESTABLISHED
tcp 0 0 10.0.255.3:9000 10.0.255.10:54548 ESTABLISHED
tcp 0 0 10.0.255.3:9000 10.0.255.10:59888 ESTABLISHED
希望这是发布此问题的正确论坛。任何建议都将不胜感激。
更新:
我正在使用 Ubuntu 18.04,并且 EC2 实例在 AWS 默认 VPC 中配置,并将安全组设置为向该特定安全组开放所有端口,从而打开节点之间的互连。
为了部署服务,我使用了 docker stack deploy 为 docker-compose.yml 文件提供了定义的覆盖网络,并且每个服务都连接到该网络
networks:
data-net:
driver: overlay
hdfs-namenode:
container_name: hdfs-namenode
hostname: hdfs-namenode
image: hdfs-namenode:latest
networks:
- data-net
ports:
- 9000:9000
- 50070:50070
- 50470:50470
volumes:
- ./data/hdfs-namenode:/opt/app/data/namenode
如果任何其他信息有助于重现此问题,请告诉我。