背景
我们现在正在使用 Elasticsearch 设计一个新系统的架构,并且我们计划使用 Elastic Cloud,基于对比他们的服务与 AWS 的服务的评论,以及在 EC2 实例上的自托管。在我们设计系统时,我试图从我的团队 6 个月前部署在 Elastic Cloud 上的一个小型测试项目中学习。虽然我花了很多时间阅读Elasticsearch Docs、Elasticsearch: The Definitive Guide和Elastic Cloud's Docs,但这里有一些概念我仍然不明白。
我们的测试项目的问题
我们的测试项目使用默认的 5 个主分片和每个主分片 1 个副本分片。它是使用 Elastic Cloud 上的默认部署选项配置的,具有单个节点,当前具有 2GB 内存。因为只有一个节点,并且副本分片从未分配到与其主分片相同的节点(原因 2),所以没有一个副本被分配。此外,该项目使用基于时间的数据,并且每天为每个账户创建一个索引,从而每天产生大约 10 个索引(或 100 个分片),并且随着时间的推移,会产生众所周知的Kagillion Shards。这个系统本来只打算一次有几个月的数据,所以解决方案是在这个部署的内存用完时手动删除旧数据。
新系统
我们的新系统旨在拥有 5 年的基于时间的数据,预计其大小将增长到 250 GB。当前的实现对基于时间的数据使用单个索引,每个主分片有 6 个主分片和 1 个副本。这个决定是基于单个分片的最大目标是 30GB 的阅读而做出的。
问题
- 我们的旧系统有一个节点的索引太多(超过 100 个)和分片太多(超过 1000 个),而我们的新系统似乎设计的太少了(一个索引用于 5 年以上的数据)。根据基于时间的数据建议,似乎更好的索引策略是每周或每月创建一个索引?话虽如此,根据SO 上的另一个答案,每个节点的最佳索引数是 1,那么如果我们只在一个节点上运行,那么首先为基于时间的数据创建多个索引有什么用处?
- 如何将节点添加到 Elastic Cloud 中的 ES 部署?目前测试项目中的所有副本节点都未分配,因为部署只有一个节点。有一个滑块可让您轻松选择部署中每个节点的内存(介于 1GB 和 250B 之间),但是我认为无法添加多个节点,这令人困惑,因为它似乎是 Elasticsearch 的基本功能。
- 我们测试项目的节点已经重启了好几次,总是在节点上有很多旧数据的时候,因此内存压力很大。解决方案是删除旧数据(因为测试项目一次只需要几个月的数据),但似乎节点在重新启动时并没有丢失数据。为什么会这样?
- 我们的测试项目没有拍摄快照,这些快照应该每 30 分钟在 Elastic Cloud 上自动发生一次。我已经询问了他们对此的支持,但只是想知道是否有人知道可能导致此问题的原因以及如何解决?