Good deal, thanks for getting back to me about it. I think that I may make some changes and potentially open a PR depending on what comes of it (I'll have to take a look at the workflow and all of that good stuff first).
Cheers, Ryan H On Mon, Jan 29, 2018 at 12:55 PM, Bryan Bende <bbe...@gmail.com> wrote: > Ryan, > > I'm not that familiar with Docker and DCOS, but I think what you said > is correct... > > The issue is that you currently can't leave nifi.web.http.host blank > because that will cause the "node API address" of each node to be > calculated as 'localhost', which then means replication of requests > fails. > > So you have to set nifi.web.http.host to something that each node can > reach. I'm not familiar enough with your setup to know if there is a > way to do that. > > -Bryan > > > On Mon, Jan 29, 2018 at 12:39 PM, Ryan H > <ryan.howell.developm...@gmail.com> wrote: > > Hi Bryan, > > > > Yes that makes total sense, and it is what I figured was happening. So > > whatever is configured for nifi.web.http.host is where api calls will go > to, > > but this is also what jetty will bind to, correct? So in my case, I would > > have to have the additional property mentioned in > > https://issues.apache.org/jira/browse/NIFI-3642 since jetty can't bind > to a > > VIP. > > > > -Ryan H > > > > On Mon, Jan 29, 2018 at 12:28 PM, Bryan Bende <bbe...@gmail.com> wrote: > >> > >> Ryan, > >> > >> I remember creating an issue for something that seems similar to what > >> you are running into: > >> > >> https://issues.apache.org/jira/browse/NIFI-3642 > >> > >> Long story short, I believe you do need to specify a value for > >> nifi.web.http.host because that will be used to replicate requests > >> that come in to the REST API, so each node needs that value to be > >> something that is reachable by the other nodes. > >> > >> -Bryan > >> > >> > >> On Mon, Jan 29, 2018 at 12:03 PM, Ryan H > >> <ryan.howell.developm...@gmail.com> wrote: > >> > Dev Team, > >> > > >> > > >> > I am running into an interesting issue while trying to cluster NiFi > in a > >> > containerized environment (Docker containers running on DC/OS cluster) > >> > and I > >> > am somewhat stuck with what to do. I am starting with getting just 2 > >> > NiFi > >> > nodes with a single external zookeeper instance (just to get it > working, > >> > will not use for production). Currently our DC/OS cluster does not > >> > support > >> > container-to-container communication (no overlay network support at > the > >> > moment) so we are using VIP’s to expose required ports on the > >> > container(s) > >> > so traffic can be mapped to a well known address and correct container > >> > port > >> > even though the host/host port may change. > >> > > >> > > >> > Currently everything spins up and the UI can be accessed on whatever > >> > node is > >> > elected the Cluster Coordinator (in this case it is the Primary Node > as > >> > well) (does show that there are 2 nodes in the cluster). However, any > >> > action > >> > taken on the canvas results in the following error shown in the UI: > >> > > >> > > >> > Node localhost:80 is unable to fulfill this request due to: > Transaction > >> > c91764e4-2fc8-492b-8887-babb59981ff3 is already in progress. > >> > > >> > > >> > When trying to access the UI of the other node, the canvas cannot be > >> > reached > >> > and the following error is shown on the error splash screen (increased > >> > read > >> > timeout to 30 secs, still the same): > >> > > >> > > >> > An unexpected error has occurred > >> > com.sun.jersey.api.client.ClientHandlerException: > >> > java.net.SocketTimeoutException: Read timed out > >> > > >> > > >> > If configured to use the hostname of the container, then the error is: > >> > > >> > unknown host exception > >> > > >> > > >> > In the NiFi logs, the following errors are present (as well as some > >> > other > >> > warnings): > >> > > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > 2018-01-29 14:46:52,393 WARN [Replicate Request Thread-3] > >> > o.a.n.c.c.h.r.ThreadPoolRequestReplicator Failed to replicate request > >> > GET > >> > /nifi-api/flow/current-user to localhost:80 due to > >> > com.sun.jersey.api.client.ClientHandlerException: > >> > java.net.SocketTimeoutException: Read timed out > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > 2018-01-29 14:46:52,393 WARN [Replicate Request Thread-3] > >> > o.a.n.c.c.h.r.ThreadPoolRequestReplicator > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > com.sun.jersey.api.client.ClientHandlerException: > >> > java.net.SocketTimeoutException: Read timed out > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at > >> > > >> > com.sun.jersey.client.urlconnection.URLConnectionClientHandler. > handle(URLConnectionClientHandler.java:155) > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at com.sun.jersey.api.client.Client.handle(Client.java:652) > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at > >> > > >> > com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle( > GZIPContentEncodingFilter.java:123) > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at com.sun.jersey.api.client.WebResource.access$200( > WebResource.java:74) > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at > >> > com.sun.jersey.api.client.WebResource$Builder.get( > WebResource.java:509) > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at > >> > > >> > org.apache.nifi.cluster.coordination.http.replication. > ThreadPoolRequestReplicator.replicateRequest(ThreadPoolRequestReplicator. > java:641) > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at > >> > > >> > org.apache.nifi.cluster.coordination.http.replication. > ThreadPoolRequestReplicator$NodeHttpRequest.run( > ThreadPoolRequestReplicator.java:852) > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at > >> > java.util.concurrent.Executors$RunnableAdapter. > call(Executors.java:511) > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at java.util.concurrent.FutureTask.run(FutureTask.java:266) > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at > >> > > >> > java.util.concurrent.ThreadPoolExecutor.runWorker( > ThreadPoolExecutor.java:1149) > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at > >> > > >> > java.util.concurrent.ThreadPoolExecutor$Worker.run( > ThreadPoolExecutor.java:624) > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at java.lang.Thread.run(Thread.java:748) > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > Caused by: java.net.SocketTimeoutException: Read timed out > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at java.net.SocketInputStream.socketRead0(Native Method) > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at java.net.SocketInputStream.read(SocketInputStream.java:171) > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at java.net.SocketInputStream.read(SocketInputStream.java:141) > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at java.io.BufferedInputStream.read1(BufferedInputStream.java:286) > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at java.io.BufferedInputStream.read(BufferedInputStream.java:345) > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:735) > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:678) > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at > >> > > >> > sun.net.www.protocol.http.HttpURLConnection.getInputStream0( > HttpURLConnection.java:1587) > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at > >> > > >> > sun.net.www.protocol.http.HttpURLConnection.getInputStream( > HttpURLConnection.java:1492) > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at > >> > java.net.HttpURLConnection.getResponseCode( > HttpURLConnection.java:480) > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at > >> > > >> > com.sun.jersey.client.urlconnection.URLConnectionClientHandler._ > invoke(URLConnectionClientHandler.java:253) > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at > >> > > >> > com.sun.jersey.client.urlconnection.URLConnectionClientHandler. > handle(URLConnectionClientHandler.java:153) > >> > > >> > 2018-01-29 14:46:52,393 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > ... 12 common frames omitted > >> > > >> > > >> > > >> > 2018-01-29 15:19:42,827 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > 2018-01-29 15:19:42,827 WARN [Process Cluster Protocol Request-4] > >> > o.a.n.c.p.impl.SocketProtocolListener Failed processing protocol > message > >> > from <ip-host.aws.internal.address> due to java.io.EOFException > >> > > >> > 2018-01-29 15:19:42,827 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > java.io.EOFException: null > >> > > >> > 2018-01-29 15:19:42,827 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at > >> > > >> > org.apache.nifi.cluster.protocol.jaxb.JaxbProtocolContext$2. > unmarshal(JaxbProtocolContext.java:112) > >> > > >> > 2018-01-29 15:19:42,827 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at > >> > > >> > org.apache.nifi.cluster.protocol.impl.SocketProtocolListener. > dispatchRequest(SocketProtocolListener.java:142) > >> > > >> > 2018-01-29 15:19:42,827 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at > >> > org.apache.nifi.io.socket.SocketListener$2$1.run( > SocketListener.java:136) > >> > > >> > 2018-01-29 15:19:42,828 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at > >> > > >> > java.util.concurrent.ThreadPoolExecutor.runWorker( > ThreadPoolExecutor.java:1149) > >> > > >> > 2018-01-29 15:19:42,828 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at > >> > > >> > java.util.concurrent.ThreadPoolExecutor$Worker.run( > ThreadPoolExecutor.java:624) > >> > > >> > 2018-01-29 15:19:42,828 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > at java.lang.Thread.run(Thread.java:748) > >> > > >> > 2018-01-29 15:19:45,505 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > 2018-01-29 15:19:45,505 INFO [Process Cluster Protocol Request-5] > >> > o.a.n.c.p.impl.SocketProtocolListener Finished processing request > >> > 181a3bd2-894e-48bf-a8d3-c298d1992524 (type=HEARTBEAT, length=2555 > bytes) > >> > from localhost:80 in 2 millis > >> > > >> > 2018-01-29 15:19:46,118 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > 2018-01-29 15:19:46,118 INFO [Process Cluster Protocol Request-6] > >> > o.a.n.c.p.impl.SocketProtocolListener Finished processing request > >> > f864bf7b-f8fc-40e9-8f04-0cd9d96b3f66 (type=HEARTBEAT, length=2555 > bytes) > >> > from localhost:80 in 2 millis > >> > > >> > 2018-01-29 15:19:46,119 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > 2018-01-29 15:19:46,119 INFO [Clustering Tasks Thread-1] > >> > o.a.n.c.c.ClusterProtocolHeartbeater Heartbeat created at 2018-01-29 > >> > 15:19:46,114 and sent to nifi-node1.my.vip.for.dcos:9001 at > 2018-01-29 > >> > 15:19:46,119; send took 4 millis > >> > > >> > 2018-01-29 15:19:47,599 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > 2018-01-29 15:19:47,599 INFO [Heartbeat Monitor Thread-1] > >> > o.a.n.c.c.h.AbstractHeartbeatMonitor Finished processing 2 > heartbeats in > >> > 7490 nanos > >> > > >> > 2018-01-29 15:19:50,515 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > 2018-01-29 15:19:50,515 INFO [Process Cluster Protocol Request-7] > >> > o.a.n.c.p.impl.SocketProtocolListener Finished processing request > >> > d9577954-71e3-41eb-b956-c235a98bf6f9 (type=HEARTBEAT, length=2555 > bytes) > >> > from localhost:80 in 4 millis > >> > > >> > 2018-01-29 15:19:51,122 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > 2018-01-29 15:19:51,122 INFO [Process Cluster Protocol Request-8] > >> > o.a.n.c.p.impl.SocketProtocolListener Finished processing request > >> > 18626790-5d19-44ab-af0e-b3246d0a4482 (type=HEARTBEAT, length=2555 > bytes) > >> > from localhost:80 in 2 millis > >> > > >> > 2018-01-29 15:19:51,123 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > 2018-01-29 15:19:51,123 INFO [Clustering Tasks Thread-1] > >> > o.a.n.c.c.ClusterProtocolHeartbeater Heartbeat created at 2018-01-29 > >> > 15:19:51,119 and sent to nifi-node1.my.vip.for.dcos:9001 at > 2018-01-29 > >> > 15:19:51,123; send took 4 millis > >> > > >> > 2018-01-29 15:19:52,601 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > 2018-01-29 15:19:52,600 INFO [Heartbeat Monitor Thread-1] > >> > o.a.n.c.c.h.AbstractHeartbeatMonitor Finished processing 2 > heartbeats in > >> > 7776 nanos > >> > > >> > 2018-01-29 15:19:52,828 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > 2018-01-29 15:19:52,828 WARN [Process Cluster Protocol Request-9] > >> > o.a.n.c.p.impl.SocketProtocolListener Failed processing protocol > message > >> > from <ip-host.aws.internal.address> due to java.io.EOFException > >> > > >> > 2018-01-29 15:19:52,829 INFO [NiFi logging handler] > >> > org.apache.nifi.StdOut > >> > java.io.EOFException: null > >> > > >> > > >> > > >> > Here are relevant configs in nifi.properties file: > >> > > >> > # web properties # > >> > > >> > nifi.web.war.directory=./lib > >> > > >> > # for web host, I have tried: localhost, container hostname, left > blank > >> > (to > >> > listen on all interfaces), the VIP configured for external access all > of > >> > which have failed (read timeout or unknown host exception) > >> > > >> > nifi.web.http.host= > >> > > >> > nifi.web.http.port=80 > >> > > >> > nifi.web.http.network.interface.default= > >> > > >> > nifi.web.https.host= > >> > > >> > nifi.web.https.port= > >> > > >> > nifi.web.https.network.interface.default= > >> > > >> > nifi.web.jetty.working.directory=./work/jetty > >> > > >> > nifi.web.jetty.threads=200 > >> > > >> > > >> > # cluster node properties (only configure for cluster nodes) # > >> > > >> > nifi.cluster.is.node=true > >> > > >> > nifi.cluster.node.address=nifi-node1.my.vip.for.dcos > >> > > >> > nifi.cluster.node.protocol.port=9001 > >> > > >> > nifi.cluster.node.protocol.threads=10 > >> > > >> > nifi.cluster.node.protocol.max.threads=50 > >> > > >> > nifi.cluster.node.event.history.size=25 > >> > > >> > nifi.cluster.node.connection.timeout=30 sec > >> > > >> > nifi.cluster.node.read.timeout=30 sec > >> > > >> > nifi.cluster.node.max.concurrent.requests=100 > >> > > >> > nifi.cluster.firewall.file= > >> > > >> > nifi.cluster.flow.election.max.wait.time=1 mins > >> > > >> > nifi.cluster.flow.election.max.candidates= > >> > > >> > > >> > # zookeeper properties, used for cluster management # > >> > > >> > nifi.zookeeper.connect.string=zookeeper.my.vip.for.dcos:2181 > >> > > >> > nifi.zookeeper.connect.timeout=3 secs > >> > > >> > nifi.zookeeper.session.timeout=3 secs > >> > > >> > nifi.zookeeper.root.node=/some-unique-id > >> > > >> > > >> > > >> > My suspicion why this is happening is due to the “nifi.web.http.host=” > >> > configuration does not have a discoverable address and I am not sure > >> > what I > >> > can configure this to, to make this work. I have configured a VIP for > >> > port > >> > 80 so that it can be externalized (and load balanced) and be reached > >> > outside > >> > of the DCOS cluster via web browser (which works for accessing the > UI). > >> > It > >> > seems that the UI replication relies on the web address of the other > >> > nodes > >> > (I was thinking that this was all done via the > nifi.cluster.node.address > >> > and > >> > nifi.cluster.node.protocol.port properties, but I may have been > wrong. > >> > What > >> > else is the value of “nifi.web.http.host=” used for? > >> > > >> > > >> > Any ideas or any clarity that can be shed on this would be greatly > >> > appreciated! > >> > > >> > > >> > > >> > Thanks in Advance, > >> > > >> > > >> > Ryan H. > >> > > >> > > > > > >