【发布时间】:2018-06-25 14:11:50
【问题描述】:
背景
我们现在正在使用 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 部署?目前测试项目中的所有副本节点都未分配,因为部署只有一个节点。有一个滑块可让您轻松选择部署中每个节点的内存(介于 1GB 和 250B 之间),但我认为无法添加多个节点,这令人困惑,因为它似乎是 Elasticsearch 的基本功能。
- 我们的测试项目的节点已经重启了好几次,总是在节点上有很多旧数据的时候,因此内存压力很大。解决方案是删除旧数据(因为测试项目一次只需要几个月的数据),但似乎节点在重新启动时并没有丢失数据。为什么会这样?
- 我们的测试项目没有拍摄快照,这些快照应该每 30 分钟在 Elastic Cloud 上自动发生一次。我已经询问了他们对此的支持,但只是想知道是否有人知道可能导致此问题的原因以及如何解决?
【问题讨论】:
标签: elasticsearch elastic-cloud