1

我正在尝试在 EC2 中设置一个普通的 Jboss (Wildfly-8.0.0.Final),尽管我相信任何应用程序都会遇到这个问题。

在默认空间中的 vanilla ubuntu 可信赖 VM 上,我解压缩并将其配置为在 addr-any: 0.0.0.0 上运行。

在运行时,这会成功解析为实例的本地 IP:

15:26:43,167 INFO [org.hornetq.jms.server](ServerService 线程池 -- 59)HQ121005:检测到“http-connector”连接器的“主机”值“0.0.0.0”无效。切换到“ip-123-45-67-8.us-my-zone.compute.internal”。如果此新地址不正确,请手动配置连接器以使用正确的地址。

现在,我在 VPC 中启动了同一台机器的 AMI 映像。VPC 设置有公共 IP 和公共 DNS。路由表/安全组/等已附加和配置,以便可以使用公共 DNS 连接到新的 VPC 实例。启动 jboss,它无法连接到 0.0.0.0 :

16:28:47,603 WARN  [org.hornetq.jms.server] (ServerService Thread Pool -- 58) HQ122017: Tried to correct invalid "host" value "0.0.0.0" for "http-connector" connector, but received an exception.: java.net.UnknownHostException: ip-123-45-67-8: ip-123-45-67-8
    at java.net.InetAddress.getLocalHost(InetAddress.java:1473) [rt.jar:1.7.0_65]
    at org.hornetq.jms.server.impl.JMSServerManagerImpl.correctInvalidNettyConnectorHost(JMSServerManagerImpl.java:1883) [hornetq-jms-server-2.4.1.Final.jar:]
    at org.hornetq.jms.server.impl.JMSServerManagerImpl.internalCreateCFPOJO(JMSServerManagerImpl.java:1379) [hornetq-jms-server-2.4.1.Final.jar:]
    at org.hornetq.jms.server.impl.JMSServerManagerImpl.internalCreateCF(JMSServerManagerImpl.java:1324) [hornetq-jms-server-2.4.1.Final.jar:]
    at org.hornetq.jms.server.impl.JMSServerManagerImpl.access$1300(JMSServerManagerImpl.java:103) [hornetq-jms-server-2.4.1.Final.jar:]
    at org.hornetq.jms.server.impl.JMSServerManagerImpl$5.runException(JMSServerManagerImpl.java:1187) [hornetq-jms-server-2.4.1.Final.jar:]
    at org.hornetq.jms.server.impl.JMSServerManagerImpl.runAfterActive(JMSServerManagerImpl.java:1845) [hornetq-jms-server-2.4.1.Final.jar:]
    at org.hornetq.jms.server.impl.JMSServerManagerImpl.createConnectionFactory(JMSServerManagerImpl.java:1173) [hornetq-jms-server-2.4.1.Final.jar:]
    at org.jboss.as.messaging.jms.ConnectionFactoryService$1.run(ConnectionFactoryService.java:66) [wildfly-messaging-8.0.0.Final.jar:8.0.0.Final]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_65]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_65]
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_65]
    at org.jboss.threads.JBossThread.run(JBossThread.java:122) [jboss-threads-2.1.1.Final.jar:2.1.1.Final]

解决方法是更新 /etc/hosts 文件以包含主机名:在 /etc/hosts 之前:127.0.0.1 localhost

/etc/hosts 之后:127.0.0.1 val-from-hostname-file localhost

在 VPC 中运行实例可以找到它的主机名,但没有成功绑定到它有什么不同?

4

1 回答 1

4

这很可能是您的 VPC 配置存在的问题。

DHCP 选项集确定通过 DHCP 为您的主机提供的域名后缀,以便在它们查找不合格的主机名(包括它们自己的主机名)时使用。您将在 中看到此配置的结果/etc/resolv.conf

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 192.0.2.2
search ec2.internal

此处,ec2.internal是 US-East-1 中 VPC 的默认值。其他区域有不同的格式,但这些域仅存在于您的 VPC 中,用于查找内部主机。

当 VPC 中的实例(比如 192.0.2.100)从其主机名中查找其地址时,它将查找 ip-192-0-2-100.ec2.internal。根据 AWS 提供的 DNS 服务器,这是一个有效的主机名(如果您已在 VPC 配置中启用DNS Resolution并启用)。DNS Hostnames

如果您已将 DHCP 选项集配置为使用您自己的example.com域,则分配给实例的主机名(再次,例如 ip-192-0-2-100)必须是域内的有效主机名,因此 ip-192 -0-2-100.example.com 必须是可解析的主机名,并且需要解析到正确的地址。

http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-dns.html

这在 EC2-Classic 中不是问题,因为无法更改或禁用此基础架构配置层。每个 EC2 经典实例都可以根据 AWS 提供的内部域查找自己的主机名*.internal,并获得自己的 IP。

此错误配置问题的另一个症状是当您使用sudo并看到sudo: unable to resolve host ip-x-x-x-x警告时。

于 2014-10-22T21:59:41.367 回答