使用JEST客户端在ElasticSearch中的节点之间切换

Muf*_*dar 6 java load-balancing elasticsearch jest

我的ElasticSearch集群中有3个节点.例如.10.10.0.1,10.10.0.2,10.10.0.3

现在我尝试使用Jest Client API连接到群集并提供上述节点之一的IP(10.10.0.1).现在,如果节点(10.10.0.1)关闭,那么这是否意味着我无法访问群集?

如何处理这种问题,我们有多个节点,我们尝试使用一个IP地址从代码连接到集群?

要么

我应该去创建其他连接给出其他IP地址吗?我觉得这是非常粗暴的做法,因为如果我们有100个节点,那么我们最终会尝试连接100个节点.

Joh*_*one 2

我会考虑创建所谓的客户端节点。客户端节点已node.data设置为 false,因此虽然它是集群的完整成员,但它不会在本地存储任何数据。这既减轻了处理文档索引的节点的查询处理负担,又提供了负载平衡方法的开端。

鉴于 Elasticsearch 的大多数软件故障场景都围绕着 JVM 堆的耗尽而展开,而当您只进行查询处理而不维护索引时,无数据节点发生故障的可能性要低得多。此外,这种方法可以扩展到一种本地负载平衡器。

如果您要在应用程序服务器上运行客户端节点 Elasticsearch 实例,则可以有效地提供本地负载平衡。该节点会将查询发送到集群中需要包含在特定查询中的所有其他节点。由于该软件与您的应用程序软件在同一台服务器上运行,因此您可以消除正在连接的节点的故障模式,而您的应用程序服务器仍在运行。

这里详细讨论了这种架构方法:

https://blog.liip.ch/archive/2013/07/19/on-elasticsearch-performance.html

关于客户端节点还有更多信息:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-node.html

或者,您可以使用不使用 REST 接口的本机 Java Elasticsearch api - 这允许您的 Java 应用程序作为集群的成员节点进行连接,在这种情况下,它将了解所有其他节点并能够路由您的查询到正确的节点。我会看一下客户端节点和传输节点方法:

http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/client.html#node-client

http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/client.html#transport-client