Elasticsearch for Special Client中的专用节点?

米迦

在我们的应用程序中,我们有一个弹性搜索集群,可供所有客户共享。

针对该群集发出的请求类型在计算上非常繁琐,可能需要几分钟才能完成。由于集群中的数据类型,获得的请求的类型以及使用它们的不规则性,我们无法预测何时将发出这些请求或事先进行任何缓存。如果多个客户端同时发出请求,则它们的响应速度将比正常情况下慢。

对于大多数客户而言,这不是问题。他们的数据不足以产生显着的差异(3s-> 10s有时没什么大不了的)。但是对于较大的客户,时间差可能只有几分钟,而且非常明显。

首先,我们想要的是一致性-即使这些操作的平均速度较慢。为此,我们希望为这些特殊客户端提供专用节点,而所有其他客户端都使用共享节点。乍一看,似乎唯一的方法是创建专用集群。

专用集群

但这会增加任何与elasticsearch交互以首先查找要路由到的集群的应用程序的开销。理想情况下,我们将能够在集群中创建专用节点。这样,应用程序不需要知道集群路由,并且索引配置可以在这些“虚拟集群”之间共享。

专用节点

每个文档都有一个客户端ID,我们可以使用将该ID分布到各个节点上_routing但这有其自身的问题。首先,这不允许我们创建通用的默认集群。其次,这可能意味着专用节点与其他客户端共享客户端数据-目标是通过消除节点资源争用来获得一致的速度。最后,这不允许我们为给定路由分配多个节点。

有没有一种方法可以创建可以显式​​添加节点的路由规则。例如,我想向路由键582123添加3个节点。

是否可以为与现有路由不匹配的节点创建默认路由规则?如果没有,我们总是可以有一个明确的默认路由。我们仍然需要在路由查找应用程序端进行操作,但是在多集群方案中,它仍然可以降低复杂性。

阿尔基斯·卡洛格里斯(Alkis Kalogeris)

根据您使用的Elasticsearch版本和索引设置,可以使用按索引分配基本上,您为节点提供一个属性,然后在索引级别设置中指定该索引(更准确地说,其分片)应在何处结束。正如您将在文档中阅读的那样,您需要确保不违反其他约束,例如

仅在可能的情况下重新分配碎片,而又不会破坏另一个路由约束,例如从不在同一节点上分配主碎片和副本碎片。

这意味着您需要具有不同的索引。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章