【问题标题】:Elasticsearch Nodes behind a load balancer负载均衡器后面的 Elasticsearch 节点
【发布时间】:2015-06-17 22:53:24
【问题描述】:

我在 AWS 上设置了一个弹性搜索节点集群。集群包含 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_timeout,都会发生这种情况。

我用来连接的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)

提前感谢您的帮助。

【问题讨论】:

  • 我面临着完全相同的问题。有什么解决办法吗?
  • 我不记得我是如何解决它的,但它现在可以工作了:-(。你有同样的例外吗?
  • 现在我想想,我使用的代码和上面的完全一样。我想我通过确保我在端口 9300 上有规则来解决它。因为上面的 curl 只是证明 9200 有效,而不是 9300。

标签: amazon-web-services elasticsearch


【解决方案1】:

这里为将来任何可怜的灵魂搜索提供答案:

您的 ES 节点在 9300 上运行,并且您的安全组在该实例上打开以允许来自您的应用服务器的连接。

但是 ELB 有自己的安全组。所以你需要这样做:

在 ELB 上设置 SG 以允许来自您的应用服务器的连接。 在 ES 实例上设置 SG 以允许来自您的 ELB 的连接。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 2018-11-03
    • 2021-12-07
    • 2017-05-25
    相关资源
    最近更新 更多