我们有一个每周进程,在几个小时内运行大量的弹性搜索查询。这会影响我们的elasticsearch集群对其他应用程序的性能。
我们正在考虑为这项任务启动一个完全独立的群集,这样就不会对我们的其他用途产生负面影响。
由于我们正在运行群集,因此我们已将分片复制到多个节点。这让我想到:如果我们告诉我们昂贵的操作只能查询这些副本节点的子集,并告诉我们其余的代码是否能够清除这些副本,那么它是不是很整洁?
如果我们能够做到这一点,我们根本不需要启动一个单独的集群。我们基本上可以为每周任务保留副本的子集,并让我们的其他应用程序查询剩余的副本。
这样,如果每周任务在分配给它的节点上引起性能问题,我们的其他应用程序就不会注意到。
这可能与Elasticsearch有关吗?或者,我们应该在这里看到另一条道路吗?
答案 0 :(得分:0)
我在Elastic向Honza询问了这个问题,他向我指出了可以通过搜索传递的偏好论点:
https://www.elastic.co/guide/en/elasticsearch/reference/5.5/search-request-preference.html
这正是我所需要的:对于单个搜索查询,它允许我准确指定我想用来运行该查询的节点(或分片,或仅主要或仅副本)。
我也可以直接连接到特定节点并请求“_local”的首选项,以使查询直接在该节点上执行。
我认为这意味着我可以将我的密集型任务配置为直接连接到群集节点的子集(在禁用嗅探之后,因此它不会检测并连接到其他节点)并使用_local首选项来生成elasticsearch Python客户端用于在该子集中的节点之间加载平衡查询的库。