elasticsearch,Amazon Web Services,elasticsearch" /> elasticsearch,Amazon Web Services,elasticsearch" />

Amazon web services 负载平衡器后面的Elasticsearch节点

Amazon web services 负载平衡器后面的Elasticsearch节点,amazon-web-services,elasticsearch,Amazon Web Services,elasticsearch,我在AWS上设置了一组elasticsearch节点。集群包含3个节点。节点位于ELB(弹性负载平衡器)后面。ELB的DNS名称为“a.b.c.com” 我能够成功地运行以下各项: curl -XGET 'http://a.b.c.com:9200/_cat/nodes' 这证明权限和路由工作正常 当我尝试将Java应用程序服务器连接到Elasticsearch时,它失败,出现以下错误: org.elasticsearch.transport.ReceiveTimeoutTransportEx

我在AWS上设置了一组elasticsearch节点。集群包含3个节点。节点位于ELB(弹性负载平衡器)后面。ELB的DNS名称为“a.b.c.com”

我能够成功地运行以下各项:

curl -XGET 'http://a.b.c.com:9200/_cat/nodes'
这证明权限和路由工作正常

当我尝试将Java应用程序服务器连接到Elasticsearch时,它失败,出现以下错误:

org.elasticsearch.transport.ReceiveTimeoutTransportException: [][inet[a.b.c.com/172.31.27.110:9300]][cluster:monitor/nodes/info] request_id [57] timed out after [10000ms]
        at org.elasticsearch.transport.TransportService$TimeoutHandler.run(TransportService.java:366)
        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)
无论我是否增加client.transport.ping\u超时,都会发生这种情况

我用于连接的java代码如下所示:

    Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", clusterName).put("client.transport.ping_timeout", 10000).build();
    client = new TransportClient(settings);
    TransportClient transportClient = (TransportClient)client;
    transportClient.addTransportAddress(new InetSocketTransportAddress(instance, esPort));
instance=“a.b.c.com” esPort=9300(我也试过9200)


提前谢谢你的帮助。

这里有一个答案,可以用来回答未来任何一次糟糕的自我反省:

您的ES节点已在9300上运行,并且您的安全组已在该实例上打开,以允许从应用程序服务器进行连接

但是ELB有自己的安全组织。因此,您需要这样做:

将ELB上的SG设置为允许从应用程序服务器进行连接。 在ES实例上设置SG以允许来自ELB的连接


还可以在ES实例上设置SG,以允许9300上的流量来自它们自己-一旦它们发现彼此,就需要能够与自己交谈

我面临着完全相同的问题。有什么解决方案吗?我不记得我是如何解决的,但它现在确实起作用了:-(.你有相同的异常吗?现在我想,我使用的代码与上面完全相同。我想我解决它的方法是确保我在端口9300上有规则。因为上面的curl只证明9200有效,而不是9300。