gpt4 book ai didi

Elasticsearch - 一般架构和 Elastic Cloud 问题

转载 作者:行者123 更新时间:2023-12-03 01:37:45 25 4
gpt4 key购买 nike

背景

我们现在正在使用 Elasticsearch 设计新系统的架构,并且我们计划使用 Elastic Cloud,这是基于对比他们的服务与 AWS 的服务以及在 EC2 实例上自托管的评论。在我们设计系统时,我试图从我的团队 6 个月前部署在 Elastic Cloud 上的一个小型测试项目中学习。虽然我花了很多时间阅读 Elasticsearch Docs , Elasticsearch: The Definitive Guide , 和 Elastic Cloud's Docs ,这里有一些概念我还是不明白。

我们的测试项目的问题

我们的测试项目使用默认的 5 个主分片和每个主分片 1 个副本分片。它是使用 Elastic Cloud 上的默认部署选项配置的,具有单个节点,当前具有 2GB 内存。因为只有一个节点,并且副本分片从未分配到与其主分片(reason 2)相同的节点,所以没有一个副本被分配。此外,该项目使用 time-based data ,并且每天为每个账户创建一个索引,从而每天产生大约 10 个索引(或 100 个分片),随着时间的推移,众所周知的 Kagillion Shards .这个系统本来只打算一次有几个月的数据,所以解决方案是在这个部署的内存用完时手动删除旧数据。

新系统

我们的新系统旨在拥有 5 年的基于时间的数据,预计其大小将增长到 250 GB。当前实现对基于时间的数据使用单个索引,每个主分片有 6 个主分片和 1 个副本。这个决定是基于单个分片的最大目标是 30GB 的阅读而做出的。

问题

  • 我们的旧系统有一个节点有太多索引(超过 100 个)和太多分片(超过 1000 个),而我们的新系统似乎设计得太少(一个索引用于 5 年以上的数据)。根据time-based data,这似乎是一个更好的索引策略。建议是每周或每月创建一个索引?话虽如此,根据 another answer on SO每个节点的最佳索引数是 1,那么如果我们只在一个节点上运行,那么首先为基于时间的数据创建多个索引有什么用呢?
  • 如何将节点添加到 Elastic Cloud 中的 ES 部署?目前测试项目中的所有副本节点都未分配,因为部署只有一个节点。有一个 slider 可让您轻松选择部署中每个节点的内存(介于 1GB 和 250B 之间),但是我认为无法添加多个节点,这令人困惑,因为它似乎是 Elasticsearch 的基本功能。
  • 我们测试项目的节点已经重启了几次,总是在节点上有很多旧数据的时候,因此内存压力很大。解决方案是删除旧数据(因为测试项目一次只需要几个月的数据),但似乎节点在重新启动时并没有丢失数据。为什么会这样?
  • 我们的测试项目没有拍摄快照,快照应该每 30 分钟在 Elastic Cloud 上自动发生。我已经询问了他们对此的支持,但只是想知道是否有人知道可能导致此问题的原因以及如何解决?
  • 最佳答案

    Our test project uses the default of 5 primary shards and 1 replica shard per primary. It was configured using the default deployment options on Elastic Cloud with a single one node



    显然,在单个节点上,您不能拥有副本。因此,您的索引应该已经配置了 0 个副本,并且您可以动态地执行它以使您的集群恢复绿色( PUT index/_settings {"index.number_of_replicas": 0} ),就这么简单。

    Also, this project uses time-based data, and is creating one index per account per day, resulting in about 10 indexes per day (or 100 shards)



    我无法判断每天 50 个新的主分片(10 个索引)是否合理,因为您没有提供有关测试项目中数据量的任何信息。但可能太多了。

    1. It seems a better indexing strategy according to the time-based data recommendations would be to create one index per week or month?


    在一个索引中拥有五年的数据是完全可能的,它并不真正取决于数据的年龄,而是取决于它的增长量。您提到 250GB 并且您知道分片不应增长超过 30GB(这又取决于您的硬件规范,稍后会详细介绍),但是由于该索引只有 6 个分片,这意味着每个分片分片将增长超过 40GB(根据 this 可以),但为了安全起见,您可能应该增加到 8-9 个分片,或者将数据拆分为年/月索引。

    每个分片 30GB 的限制也取决于你的节点有多少堆。如果您有 2GB 堆的节点,那么拥有 30GB 分片显然太大了。由于您在 ES Cloud 上并且计划拥有 250GB 的数据,因此您必须选择 16GB 堆 + 384GB 存储(或更大)的节点容量。因此,对于 16GB 堆,拥有 30GB 分片是合理的,但我认为您需要多个节点。您可以使用 GET _cat/nodes?v 验证您有多少个节点.

    1. That being said, according to another answer on SO the optimal number of indexes per node is 1...


    克里斯所说的是理论/理想环境,这在现实中几乎不可能/不建议/不希望这样做。您确实希望在索引中有多个分片,原因是当您的数据增长时,您希望能够扩展到多个节点,这就是 ES 的重点,否则最好嵌入 Lucene直接在您的项目中的库。

    1. ..., so what is the utility in creating multiple indices for time-based data in the first place if we're only running on one node?


    首先使用 GET _cat/nodes?v 检查集群中有多少节点,但很明显,如果您被分配一个节点来将 250GB 的数据拆分为 6-8 个分片,那么单个节点确实并不理想。

    1. How does one add a node to an ES deployment in Elastic Cloud?


    现在,你不能。然而,在上一次 Elastic{ON} session 上, Elastic announced可以选择要设置的节点数量或部署类型(热/温等)。

    1. Currently all of the replica nodes in the test project are unassigned, because the deployment only has one node.


    在测试项目中你真的不需要副本,对吧?

    1. The solution has been to delete old data (as the test project was only meant to have several months of data at a time), but it appears the node didn't lose data when it restarted. Why would this be?


    你是怎么删除数据的?在您删除数据和节点重新启动之前,您是否见证了数据确实消失了?

    1. Our test project has taken no snapshots, which are supposed to happen automatically on Elastic Cloud every 30 minutes.


    这很奇怪,因为在 ES 云上,您的集群通常每 30 分钟拍摄一次快照。您在 Deployments > cluster-id > Elasticsearch > Snapshots 下看到了什么? ES Cloud 支持对此有何评论?运行 GET _cat/repositories?v得到什么和 GET _cat/snapshots/found-snapshots?v ? (用结果更新您的问题)

    关于Elasticsearch - 一般架构和 Elastic Cloud 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51025543/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com