两个elasticsearch服务器之间的负载平衡

时间:2013-05-25 11:15:25

标签: elasticsearch load-balancing

我有两个ElasticSearch服务器:

http://12.13.54.333:9200

http://65.98.54.10:9200

在第一台服务器中,我有100k的数据(id = 1到id = 100k),而在第二台服务器中我有100k的数据(id = 100k + 1到200K)。

我希望在两台服务器上的一个请求中搜索关键字obama。这可能吗?

2 个答案:

答案 0 :(得分:7)

你的问题有点通用......我会尽量不给出“依赖”的答案,但为了做到这一点,我必须做出几个假设。

这两个服务器实际上是同一个elasticsearch集群上的两个节点吗?我想是的。

您是否对由多个分片组成的弹性搜索索引编制数据?我想是这样。 elasticsearch中的默认值是五个分片,在您的情况下会导致一个节点上有两个分片,另一个节点上有三个分片。

然后您可以通过REST API将查询发送到其中一个节点。查询将在您查询的索引(可能甚至多于一个)组成的所有分片上执行。如果您有副本,则在查询时也可能使用副本分片。接收到您的查询的节点将减少从返回最相关的所有分片中获得的搜索结果。

更具体地说,每个分片上的搜索阶段很可能只收集文档ID及其分数。一旦你击中的节点减少了结果,它就可以获取它应该返回的文件所需的所有字段(通常是_source field)。

对弹性搜索有什么好处,即使你在不同的索引上索引数据,你也可以查询多个索引,一切都和我描述的一样。在一天结束时,每个索引都由分片组成,并且查询十个索引,每个分片与每个分片一样,查询一个具有十个分片的索引。

我所描述的内容适用于elasticsearch使用的默认search_type,称为query_then_fetch。还有其他搜索类型,您可以在需要时最终使用,例如,不执行任何减少或获取的计数,但只返回在所有分片上执行它的查询的命中数,并返回所有命中的总和每个碎片。

答案 1 :(得分:1)

Revendra Kumar,

Elasticsearch应该为您处理。 Elasticsearch是从头开始构建的,用于分发和分布式搜索。

基本上,如果这些服务器位于同一个群集中,您将拥有两个分片(第一个分区的ID为1到100k,第二个分区的ID为100001到200k)。当您按某种方式搜索时,它命中哪个服务器并不重要,它将在两个服务器上进行搜索并返回客户端的结果。弹性搜索的内部行为过于广泛,无法在此解释。