繁体   English   中英

具有高读取和非常低数据的最佳 Elasticsearch 索引分片

[英]Optimal Elasticsearch Index Shards with high Reads and very low data

我正在关注有关 Elasticsearch 索引的“选择分片数量”的 AWS 文档
我的 ES 索引读取 TPS 将非常高(大约 1300 TPS,并且可以增加到 6500 TPS),但是将出现的数据量将非常少(小于 GB)。

  1. 为了配合高reads,我打算实现横向扩展(增加数据节点的数量)
  2. 由于数据非常少,根据上述文档,分片数量应为 1(最佳所需分片大小 ~ 10GB-50GB,我的数据小于 1GB)

问题:

  1. 据我了解,一个分片并不分布在数据节点上。 (一个分片只能驻留在一个数据节点上)。 这种理解正确吗?
  2. 这里开始In Elasticsearch, each query is executed in a single thread per shard. Multiple shards can however be processed in parallel, as can multiple queries and aggregations against the same shard. In Elasticsearch, each query is executed in a single thread per shard. Multiple shards can however be processed in parallel, as can multiple queries and aggregations against the same shard. . 如果上面的理解是正确的,如果我只有一个分片,所有的请求将在一个数据节点上单线程。 因此不能实现水平缩放。
    考虑到高 TPS 和低数据,索引的最佳主分片/副本数应该是多少?
    我是不是该
    1. 仍然有一个分片,但有多个副本(与主机数量成正比),或者
    2. 多个主分片本身(其大小以 MB 为单位)和一个副本(以节省内存)。 (我没有看到我的集群中的节点出现严重故障,以至于我需要多个副本!)
  1. 是的,你是对的。 设置映射时,您可以设置分片(主)和副本(副本)的数量。 副本分片基本上是主分片的克隆,它们具有弹性,但也有利于读取性能(它们可以提供读取操作)。 但是它们可能会损害写入性能,因为弹性需要跨节点复制数据以使它们保持最新。 根据节点的数量,您可以决定主分片和副本分片的数量,同时考虑弹性(如果节点出现故障会发生什么)
  2. 是的,如果您有一个零副本的分片,根据文档,它将是一个单线程。 这不一定是坏事或好事。 请记住,在一个请求的情况下,该请求由多个线程(包含部分数据的多个分片)提供服务,最终这些记录需要累积才能提供给客户端。 这会损害性能。 此外,即使你有副本,如果你只有一个主分片,那意味着你的索引的所有数据都在一个分片中(主分片或副本)。 这意味着任何分片(因此任何线程)都可以处理不同的请求,但是每个请求将由一个线程处理(不需要发生累积,这对于 MB 的数据来说并不是一件坏事)

由于数据量很小,并且您需要非常高的吞吐量,因此我会选择拥有 1 个主节点和与节点数量一样多的副本 - 1(它将保存主节点)。 现在节点的数量取决于。 您必须进行测试,但您可以使用 3 个节点的 go(这是一种常见的弹性/高性能首次设置)。 所以总共有 1 个主副本和 2 个副本。 检查该设置并尝试对其进行压力测试。

对于压力测试,您可以使用rally ,这是 elasticsearch 在测试新版本时使用的框架。

这是一个有趣的场景,是的,提供的大部分信息都很好,只是想补充以下几点:

  1. 由于数据量非常小,拥有多个主分片实际上会导致性能不佳,因为创建多个线程来查询多个分片并从所有分片收集结果。
  2. 现在,由于我们只需要 1 个主分片以获得最佳性能,并且主分片的副本不能分配在同一个物理数据节点上,因此您需要在集群中拥有其他节点以实现高可用性并提高读取性能(副本两者都有帮助)。
  3. 现在,对于单个搜索查询,它只需要查询一个分片(主分片或副本分片),因此 Elasticsearch 将只创建一个线程。
  4. 为了更好地利用和节省成本,请确保您拥有较少 CPU 内核的小型数据节点,在这种情况下,2 核机器似乎是合理的(但您可以对此进行基准测试)。
  5. 很高兴您使用的是 AWS Elasticsearch,因此您可以在读取流量时快速更改副本数量并启动更多小尺寸(如上所述)数据节点,甚至可以更改核心数量,从而更好地自动扩展您可以根据一些生产流量获得选项,并且可以进一步微调。
  6. 您还可以使用更新索引设置 API动态更改副本数量,但如果现有数据节点 CPU 利用率很高,请确保添加更多数据节点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM