我正在使用apache-nifi,似乎我在启动Web服务器时无法绑定到地址,除非在配置文件中我使用公共DNS名称。使用DNS名称解析为的IP地址不起作用。同样,使用在/etc/hosts
中分配的主机别名也不起作用。在每种情况下,我都会在nifi日志中看到jetty抛出的异常,说它无法分配所请求的地址。
端口上没有任何内容正在侦听,正如netstat验证的那样,当我使用DNS名称时,没有绑定到该地址的错误。这是设计,还是我做错了什么?
以下是我的配置的详细信息。 (我实际上正在运行一个nifi集群,并且嵌入式zookeeper也无法绑定IP地址或主机别名,但是在DNS名称上工作。由于如果我使用单个nifi节点关闭群集,则会发生故障,I& #39;我只是显示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 :(得分:1)
在云中运行的VM将自身的公有DNS名称解析为其本地IP地址,VM外部的服务器将相同的名称解析为VM的公共IP地址。由于配置必须为要绑定的服务器指定本地IP地址,并且群集中的其他主机将使用与远程连接所需的主机地址相同的已配置节点名称,因此它仅适用于具有类似功能的DNS解析此
我在每个系统上修改了/etc/hosts
,将其自己的名称解析为其本地IP地址,将其他主机解析为其公共IP地址。然后我就可以使用/etc/hosts
中的主机名来获取所有zookeeper和nifi配置文件。这就是我所追求的,因为重新启动VM时IP地址会发生变化,我只需要在每个VM上的一个位置更改它们。