负载均衡器后面的 Elasticsearch 节点
Elasticsearch Nodes behind a load balancer
我在 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_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));
实例="a.b.c.com"
esPort=9300(我也试过9200)
提前感谢您的帮助。
这里是对未来任何可怜的灵魂搜索的回答:
您的 ES 节点 运行 在 9300 上,您的安全组在该实例上打开以允许来自您的应用服务器的连接。
但是ELB有自己的安全组。所以你需要这样做:
在 ELB 上设置 SG 以允许来自您的应用服务器的连接。
在 ES 实例上设置 SG 以允许来自您的 ELB 的连接。
并在您的 ES 实例上设置 SG 以允许来自他们自己的 9300 流量 - 一旦他们发现彼此,他们需要能够与自己交谈!
我在 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_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));
实例="a.b.c.com" esPort=9300(我也试过9200)
提前感谢您的帮助。
这里是对未来任何可怜的灵魂搜索的回答:
您的 ES 节点 运行 在 9300 上,您的安全组在该实例上打开以允许来自您的应用服务器的连接。
但是ELB有自己的安全组。所以你需要这样做:
在 ELB 上设置 SG 以允许来自您的应用服务器的连接。 在 ES 实例上设置 SG 以允许来自您的 ELB 的连接。
并在您的 ES 实例上设置 SG 以允许来自他们自己的 9300 流量 - 一旦他们发现彼此,他们需要能够与自己交谈!