Network programming nifi can';无法分配请求的地址

Network programming nifi can';无法分配请求的地址,network-programming,apache-nifi,Network Programming,Apache Nifi,我使用的是ApacheNIFI,似乎在启动web服务器时无法绑定到地址,除非在配置文件中使用公共DNS名称。使用DNS名称解析为的IP地址不起作用。同样,使用/etc/hosts中指定的主机别名也不起作用。在这些情况下,我在nifi日志中看到jetty抛出的异常,表示它无法分配请求的地址 正如netstat所验证的那样,端口上已经没有任何内容在侦听,并且当我使用DNS名称时,没有错误绑定到地址。这是故意的,还是我做错了什么 下面是我的配置的详细信息。(我实际上正在运行一个nifi群集,嵌入式zo

我使用的是ApacheNIFI,似乎在启动web服务器时无法绑定到地址,除非在配置文件中使用公共DNS名称。使用DNS名称解析为的IP地址不起作用。同样,使用
/etc/hosts
中指定的主机别名也不起作用。在这些情况下,我在nifi日志中看到jetty抛出的异常,表示它无法分配请求的地址

正如netstat所验证的那样,端口上已经没有任何内容在侦听,并且当我使用DNS名称时,没有错误绑定到地址。这是故意的,还是我做错了什么

下面是我的配置的详细信息。(我实际上正在运行一个nifi群集,嵌入式zookeeper也无法绑定IP地址或主机别名,但可以绑定DNS名称。由于在群集关闭的情况下使用单个nifi节点会发生故障,因此我只显示nifi服务器配置。)

nifi服务器正在云服务中的VM上运行,具有公共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)
2017-09-18 01:02:30610警告[main]org.apache.nifi.web.server.JettyServer无法启动web服务器。。。关闭。
java.net.BindException:无法分配请求的地址
位于sun.nio.ch.Net.bind0(本机方法)
位于sun.nio.ch.Net.bind(Net.java:433)
位于sun.nio.ch.Net.bind(Net.java:425)
位于sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
位于sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
位于org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:298)
位于org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80)
位于org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:236)
位于org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
位于org.eclipse.jetty.server.server.doStart(server.java:431)
位于org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
位于org.apache.nifi.web.server.JettyServer.start(JettyServer.java:705)
位于org.apache.nifi.nifi.(nifi.java:160)
位于org.apache.nifi.nifi.main(nifi.java:267)

云中运行的虚拟机将自身的公共DNS名称解析为其本地IP地址,虚拟机外部的服务器将相同名称解析为虚拟机的公共IP地址。由于配置必须为服务器指定要绑定到的本地IP地址,并且群集中的其他主机将使用与其需要远程连接的主机地址相同的已配置节点名称,因此它仅适用于这样的DNS解析


我在每个系统上修改了
/etc/hosts
,将自己的名称解析为本地IP地址,将集群中的其他主机解析为公共IP地址。然后,我可以使用
/etc/hosts
中的主机名来处理所有zookeeper和nifi配置文件。这就是我所追求的,因为当虚拟机重新启动时,IP地址会发生变化,我只需要在每个虚拟机上的一个地方更改它们。

您能提供完整的错误吗?我编辑了问题帖子并添加了堆栈跟踪。可能在您的虚拟机内
dns abc
解析为不同的IP?是的,这就是发生的事情。VM将公共dns名称解析为专用IP地址,而VM外部的系统将相同的dns名称解析为公共IP地址。因此,当我尝试绑定到公共IP或解析到它的名称时,它是失败的,但当我绑定到私有IP时,它是有效的。这是预期的吗?有没有办法绑定到公共IP地址?您只能侦听分配给VM网络设备的地址。