【发布时间】:2017-09-15 22:03:08
【问题描述】:
我正在使用 apache-nifi,似乎在启动 Web 服务器时我无法绑定到地址,除非在配置文件中我使用公共 DNS 名称。使用 DNS 名称解析到的 IP 地址不起作用。同样,使用在/etc/hosts 中分配的主机别名也不起作用。在每种情况下,我都会在 nifi 日志中看到码头抛出的异常,说它无法分配请求的地址。
端口上已经没有任何监听了,正如 netstat 所证实的那样,当我使用 DNS 名称时,没有错误绑定到地址。这是设计使然,还是我做错了什么?
这是我的配置的详细信息。 (我实际上正在运行一个 nifi 集群,并且嵌入式 zookeeper 也无法绑定 IP 地址或主机别名,但可以使用 DNS 名称。由于如果我使用单个 nifi 节点并关闭集群,则会发生故障,我仅显示 nifi 服务器配置。)
nifi 服务器在具有公共 dns 的云服务中的虚拟机上运行。假设公共 DNS 名称是“dns-abc”,它解析到地址 1.2.3.4。
如果我在 nifi.properties nifi.web.http.host=1.2.3.4 中指定,则绑定失败。如果我指定 nifi.web.http.host=dns-abc 它会成功。于是我在/etc/hosts 中创建了一个条目,如下所示:
1.2.3.4 nifi-1
我在 nifi.properties 中指定了nifi.web.http.host=nifi-1,但绑定再次失败。
编辑:这是堆栈跟踪
2017-09-18 01:02:30,610 WARN [main] org.apache.nifi.web.server.JettyServer Failed to start web server... shutting down.
java.net.BindException: Cannot assign requested address
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Net.java:433)
at sun.nio.ch.Net.bind(Net.java:425)
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
at org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:298)
at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80)
at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:236)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
at org.eclipse.jetty.server.Server.doStart(Server.java:431)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
at org.apache.nifi.web.server.JettyServer.start(JettyServer.java:705)
at org.apache.nifi.NiFi.<init>(NiFi.java:160)
at org.apache.nifi.NiFi.main(NiFi.java:267)
【问题讨论】:
-
你能提供完整的错误吗?
-
我编辑了问题帖子并添加了堆栈跟踪。
-
可能在你的 VM 内部
dns-abc解析为不同的 IP? -
是的,就是这样。 VM 将公共 dns 名称解析为专用 IP 地址,而 VM 外部的系统将相同的 dns 名称解析为公共 IP 地址。因此,当我尝试绑定到公共 IP 或解析到它的名称时它会失败,但是当我绑定到私有 IP 时它会起作用。这是预期的吗?有没有办法绑定公网IP?
-
你只能监听分配给你的虚拟机网络设备的地址。
标签: network-programming apache-nifi