0

TransportClient を使用して、Java アプリケーションから Elasticsearch クラスターに接続しようとしています。

ローカルで実行されているクラスターへの接続のテストに成功しました。

これで、EC2-Cloud にリモート クラスターがセットアップされました。REST インターフェースを介してアクセスすると、Kibana も機能します。

アプリケーションを Elasticsearch ノードで直接正常に実行できます。

ただし、別のホストからリモートで接続しようとすると、ログには接続が成功したことが示されますが、すぐに「ホスト マシンのソフトウェアによって確立された接続が中止されました」というエラーが表示されます。

サーバーとクライアントの両方が同じバージョンの 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");
        }
    }

また、クラスター名が設定されていないなど、いくつかの一般的なことを確認しようとしました。

また、まったく別のポートを使用すると、このエラー メッセージではなく、期待どおりにタイムアウトが発生します。したがって、ポートの動作は明らかに異なります。

どこから見始めますか?これは、接続がすぐに拒否されるのではなく、しばらくしてから切断されるファイアウォールの問題でしょうか?

4

1 に答える 1

0

さらにテストを重ねると、会社のファイアウォールが奇妙な方法で干渉していることが実際にわかりました。会社のネットワーク外のマシンで同じクライアント コードを実行すると、正常に動作します。

于 2015-10-22T07:10:14.040 に答える