elasticsearch - Elasticsearch for Special Client中的专用节点?

标签 elasticsearch

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

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

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

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

dedicated-clusters

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

dedicated nodes

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

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

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

最佳答案

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

Shards are only relocated if it is possible to do so without breaking another routing constraint, such as never allocating a primary and replica shard on the same node.



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

关于elasticsearch - Elasticsearch for Special Client中的专用节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60934815/

相关文章:

c# - 使用 C# Moq 模拟 ElasticSearch 客户端

elasticsearch - ElasticSearch NEST-如何在搜索中区分字段的优先级

elasticsearch - 发布 https://apm.<acme>.com/intake/v2/rum/events net::ERR_BLOCKED_BY_CLIENT

elasticsearch - 了解ELK分析仪

python - ElasticSearch 的 Celery 结果类型

c# - 对Elasticsearch 2.0.0.0版的嵌套对象进行部分更新

spring-boot - ElasticsearchJest健康指示器 : Health check failed when using Jest in spring boot

sorting - ElasticSearch双嵌套排序

elasticsearch - 在排序之前映射字段的值

java - ElasticSearch 使用 Java RestHighLevelClient 通过 BulkRequest API 索引 100K 文档