elasticsearch 副本分片如何帮助提高搜索性能

mi7gmzs6  于 7个月前  发布在  ElasticSearch
关注(0)|答案(2)|浏览(78)

我已经阅读了Elasticsearch中关于分片和副本的大多数文档,其中大多数都提到副本分片“可以”帮助提高搜索性能。但他们并没有详细说明如何实现这一点。我想知道的是它究竟会如何提高搜索性能?
我熟悉Elasticsearch中的主分片和副本分片,它包含什么以及副本如何提供高可用性。我还了解在多个主分片中搜索时的分散-聚集方法。
为了说明我的问题,假设我有一个只读索引,其中有1个主索引和4个副本(5节点集群)。
1.所有5个碎片都处理搜索?或者,
1.是否仅由其中一个/几个处理?
我将在这个索引上执行多次(数百万次)的繁重搜索。
如果是1)我不认为这一定会提高性能,相反,它只会使其他节点的任务饱和,降低整个集群的速度。如果是,2)它如何确定将请求转发到哪个节点?我知道接收请求的节点(协调节点)会将请求转发给所有持有主分片的节点,但它如何处理副本?

rkue9o1l

rkue9o1l1#

如果我对该索引执行一个复杂的搜索查询,所有5个分片都会处理搜索,还是只由其中一个或几个分片处理?
只有一个分片将用于您的查询。但是,如果您同时启动另一个查询,则该查询很可能会在另一个节点上结束,第三个查询将在第三个节点上结束。因此,增加4个节点不会改善单个查询的延迟,但是如果您同时运行其中一些查询,则会提高集群的吞吐量。
如果不是为单个主服务器创建4个副本,而是创建了5个主服务器,则查询将被发送到所有5个分片,并在每个分片上并行执行。然而,在这种情况下,发送和合并来自5个分片的结果会增加额外的处理时间。因此,通过并行搜索可以改善延迟,但会增加合并结果的开销。因此,根据你的数据和查询,它可能会改善或恶化你的整体延迟。它会恶化模拟查询的集群吞吐量,因为与单个分片相比,你要做更多的工作。
它如何确定将请求转发到哪个节点?
这取决于elasticsearch的版本和一些设置。现代版本的elasticsearch默认使用Adaptive replica selection。旧版本使用循环调度,当您禁用自适应副本选择时仍然可用。

rslzwgfq

rslzwgfq2#

Here is the official documentation和关于分片副本和搜索性能影响的评论:

Elasticsearch中的副本可以提高搜索吞吐量和弹性。
每个节点更少的分片通常会带来更好的搜索性能,因为文件系统缓存分配更大。

但是,如果节点发生故障,没有副本会影响数据可用性。要确定正确的副本数量,请使用公式:max(max_failures,ceil(num_nodes / num_primaries)- 1)。这会平衡性能和容错能力。
您也可以查看这篇文章:https://medium.com/@musabdogan/elasticsearch-search-performance-shard-configurations-and-replica-strategies-f32246b11aeb

相关问题