6

我的 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 个节点。

4

1 回答 1

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

于 2014-06-21T01:01:29.670 回答