nifi不能分配请求的地址

问题描述:

我使用apache-nifi,似乎我无法绑定到启动web服务器时的地址,除非在配置文件中使用公共DNS名称。使用DNS名称解析的IP地址不起作用。同样,使用在/etc/hosts中分配的主机别名不起作用。在每种情况下,我都会在nifi日志中看到jetty抛出的异常,并说它不能分配请求的地址。nifi不能分配请求的地址

已经没有什么监听端口了,通过netstat验证,以及当我使用DNS名称时,没有错误绑定到该地址。这是设计,还是我做错了什么?

以下是我的配置的详细信息。 (我实际上正在运行一个nifi集群,而且嵌入式zookeeper也无法绑定到IP地址或主机别名上,但可以在DNS名称上工作。因为如果我在集群关闭时使用单个nifi节点发生故障,我只是显示了nifi服务器配置。)

nifi服务器运行在具有公共dns的云服务中的VM上。假设公共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) 
+0

你能否提供完整的错误? – daggett

+0

我编辑了问题帖子并添加了堆栈跟踪。 – MidnightJava

+0

也许在你的虚拟机内'dns-abc'解析为不同的IP? – daggett

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

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