0

I am trying to connect to an Elasticsearch cluster form a Java application by using the TransportClient.

I have successfully tested connected to a cluster running locally.

Now we have set up a remote cluster in the EC2-Cloud. Accessing it via REST intefaces work, also Kibana works.

I can run my application on the Elasticsearch Node directly successfully.

However when I try to connect remotely from another host, the log indicates that the connection succeeds, but then immediately fails with "An established connection was aborted by the software in your host machine".

I have verified that both server and client run the same version of Elasticsearch. Also the firewall configuration should allow communication on port 9300 as this is also needed for the cluster-nodes to communicate between each other.

    Okt 21, 2015 6:50:24 PM com.example.elasticsearch.visit.nativescript.ElasticsearchTest main
    INFO: Setting adress to myhost.com:9300
    Okt 21, 2015 6:50:24 PM org.elasticsearch.client.transport.TransportClientNodesService addTransportAddresses
    FINE: [Master Man] adding address [[#transport#-1][LNZ123675N02][inet[myhost.com/1.1.1.1:9300]]]
    Okt 21, 2015 6:50:24 PM org.elasticsearch.client.transport.TransportClientNodesService$SimpleNodeSampler doSample
    FINEST: [Master Man] connecting to listed node (light) [[#transport#-1][LNZ123675N02][inet[myhost.com/1.1.1.1:9300]]]
    Okt 21, 2015 6:50:24 PM org.elasticsearch.transport.netty.NettyTransport connectToNode
    FINE: [Master Man] connected to node [[#transport#-1][LNZ123675N02][inet[myhost.com/1.1.1.1:9300]]]
    Okt 21, 2015 6:50:24 PM org.elasticsearch.common.breaker.ChildMemoryCircuitBreaker addWithoutBreaking
    FINEST: [Master Man] [REQUEST] Adjusted breaker by [16440] bytes, now [16440]
    Okt 21, 2015 6:50:24 PM org.elasticsearch.transport.TransportService$Adapter traceRequestSent
    FINEST: [Master Man] [0][cluster:monitor/nodes/info] sent to [[#transport#-1][LNZ123675N02][inet[myhost.com/1.1.1.1:9300]]] (timeout: [5s])
    Okt 21, 2015 6:50:24 PM org.elasticsearch.common.breaker.ChildMemoryCircuitBreaker addWithoutBreaking
    FINEST: [Master Man] [REQUEST] Adjusted breaker by [-16440] bytes, now [0]
    Okt 21, 2015 6:50:24 PM org.elasticsearch.transport.netty.NettyTransport exceptionCaught
    FINEST: [Master Man] close connection exception caught on transport layer [[id: 0xd938d867, /x.x.x.x:60058 => myhost.com/1.1.1.1:9300]], disconnecting from relevant node
    java.io.IOException: An established connection was aborted by the software in your host machine
        at sun.nio.ch.SocketDispatcher.read0(Native Method)
        at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
        at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
        at sun.nio.ch.IOUtil.read(IOUtil.java:192)
        at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
        at org.elasticsearch.common.netty.channel.socket.nio.NioWorker.read(NioWorker.java:64)
        at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108)
        at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:337)
        at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89)
        at org.elasticsearch.common.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178)
        at org.elasticsearch.common.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
        at org.elasticsearch.common.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)

    Okt 21, 2015 6:50:24 PM org.elasticsearch.transport.netty.NettyTransport disconnectFromNode
    FINE: [Master Man] disconnecting from [[#transport#-1][LNZ123675N02][inet[myhost.com/1.1.1.1:9300]]], channel closed event
    Okt 21, 2015 6:50:24 PM org.elasticsearch.transport.netty.NettyTransport disconnectFromNode
    FINEST: [Master Man] disconnected from [[#transport#-1][LNZ123675N02][inet[myhost.com/1.1.1.1:9300]]], channel closed event
    Okt 21, 2015 6:50:24 PM org.elasticsearch.client.transport.TransportClientNodesService$SimpleNodeSampler doSample
    INFO: [Master Man] failed to get node info for [#transport#-1][LNZ123675N02][inet[myhost.com/1.1.1.1:9300]], disconnecting...
    org.elasticsearch.transport.NodeDisconnectedException: [][inet[myhost.com/1.1.1.1:9300]][cluster:monitor/nodes/info] disconnected

    Okt 21, 2015 6:50:24 PM com.example.elasticsearch.visit.nativescript.ElasticsearchTest main
    INFO: Having: []
    Exception in thread "main" org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: []
        at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:305)
        at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:200)
        at org.elasticsearch.client.transport.support.InternalTransportClient.execute(InternalTransportClient.java:106)
        at org.elasticsearch.client.support.AbstractClient.bulk(AbstractClient.java:167)
        at org.elasticsearch.client.transport.TransportClient.bulk(TransportClient.java:370)
        at org.elasticsearch.action.bulk.BulkRequestBuilder.doExecute(BulkRequestBuilder.java:166)
        at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:91)
        at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:65)
        at com.example.elasticsearch.visit.nativescript.ElasticsearchTest.main(ElasticsearchTest.java:68)

My simple test looks like this:

    Settings settings = ImmutableSettings.settingsBuilder()
            .put("cluster.name", "cluster-name")
            .build();

    logger.info("Creating client");
    try (final TransportClient client = new TransportClient(settings)) {
        logger.info("Setting adress to " + host + ":" + port);
        client.addTransportAddress(new InetSocketTransportAddress(host, port));

        logger.info("Having: " + client.connectedNodes());

        BulkRequestBuilder bulkRequest = client.prepareBulk();

        String json= "{ id: \"12345678\", value: \"value\" }";

        bulkRequest.add(client.prepareIndex(INDEX, TYPE, "12345678").
                setSource(json));


        BulkResponse bulkResponse = bulkRequest.execute().actionGet();
        if (bulkResponse.hasFailures()) {
            logger.info("Could not write bulk: " + bulkResponse.buildFailureMessage());
        } else {
            logger.info("Wrote");
        }
    }

I also tried to verify some common things like cluster-name not set and others.

Also when I use a completely different port, I get a timeout as expected, not this error-message. So the port is definitely behaving different.

Where would I start to look? Can this still be a firewall issue where connections are dropped only after a short while instead of being rejected immediately?

centic
  • 15,565
  • 9
  • 68
  • 125
  • The same happens if I try to use Node-Client instead of the Transport-Client – centic Oct 21 '15 at 17:22
  • Can you share which version of ES and Java you're running? – Val Oct 22 '15 at 04:44
  • It's Java 1.7 on the server, Java 1.8 on the Client and ES 1.7.2 on both sides – centic Oct 22 '15 at 07:09
  • You should also make sure that you run the same version of Java on the client and the server, mainly because of serialization issues and other potential incompatibilities. – Val Oct 22 '15 at 07:15

1 Answers1

0

With more testing I actually found out that a company-firewall was interfering in a strange way. When I run the same client-code on a machine outside the company-netowrk, it works fine.

centic
  • 15,565
  • 9
  • 68
  • 125