尝试连接到远程群集节点

时间:2015-10-21 16:58:58

标签: java elasticsearch elasticsearch-java-api

我正在尝试使用TransportClient连接到Java应用程序的Elasticsearch集群。

我已成功测试连接到本地运行的群集。

现在我们在EC2-Cloud中设置了一个远程集群。通过REST接口访问它可以正常工作,Kibana也可以工作。

我可以直接在Elasticsearch节点上成功运行我的应用程序。

但是,当我尝试从另一台主机远程连接时,日志表明连接成功,但随后立即失败并且#34;已建立的连接被主机中的软件中止"。

我已经验证服务器和客户端都运行相同版本的Elasticsearch。此外,防火墙配置应允许在端口9300上进行通信,因为群集节点之间也需要相互通信。

    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)

我的简单测试如下:

    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");
        }
    }

我还尝试验证一些常见的事情,比如集群名称未设置和其他。

此外,当我使用完全不同的端口时,我会按预期获得超时,而不是此错误消息。所以端口肯定表现不同。

我会从哪里开始看?这仍然是一个防火墙问题,连接只是在一段时间后被丢弃而不是立即被拒绝吗?

1 个答案:

答案 0 :(得分:0)

通过更多测试,我发现公司防火墙正在以一种奇怪的方式干扰。当我在company-netowrk之外的机器上运行相同的客户端代码时,它可以正常工作。