作者:来自 Elastic Kofi Bartlett
解释如何防止和处理磁盘过满(过度使用)以及磁盘容量未被充分利用的情况。
想获得 Elastic 认证?了解下一次 Elasticsearch Engineer 培训的时间吧!
Elasticsearch 拥有许多新功能,帮助你为自己的使用场景构建最佳搜索解决方案。浏览我们的示例笔记本了解更多内容,开始免费云端试用,或立即在本地机器上尝试 Elastic。
磁盘管理在任何数据库中都非常重要,Elasticsearch 也不例外。如果你没有足够的磁盘空间,Elasticsearch 将停止向该节点分配分片。这最终会导致你无法向集群写入数据,应用程序可能因此面临数据丢失的风险。另一方面,如果你有太多磁盘空间,那么你就为不需要的资源付出了额外成本。
关于水位线的背景 - watermarks
在你的 Elasticsearch 集群中有各种 “水位线 ”阈值,用于帮助你跟踪可用磁盘空间。随着节点上的磁盘逐渐填满,第一个被触发的阈值是 “low disk watermark - 低磁盘水位线”。第二个阈值是“high disk watermark threshold - 高磁盘水位线阈值”。最后,会达到 “disk flood stage - 磁盘洪水阶段”。一旦超过这个阈值,集群将阻止写入所有在该节点上有一个分片(主分片或副本分片)的索引。读取(搜索)仍然是可行的。
如何防止和处理磁盘过满(过度使用)的情况
当你的 Elasticsearch 磁盘过满时,有多种方法可以处理:
- 删除旧数据:通常,数据不应永久保存。防止和解决磁盘过满的一种方法是确保当数据达到一定年龄时,被可靠地归档并删除。可以使用 ILM 来实现这一点。
- 增加存储容量:如果你不能删除数据,可能需要添加更多数据节点或增加磁盘容量,以便保留所有数据而不影响性能。如果你需要为集群增加存储容量,应该考虑是否只需要增加存储容量,还是也需要按比例增加 RAM 和 CPU 资源(见下面关于磁盘大小、RAM 和 CPU 比例的部分)。
如何为你的 Elasticsearch 集群增加存储容量
- 增加数据节点数量:请记住,新节点应与现有节点大小相同,并使用相同的 Elasticsearch 版本。
- 增加现有节点的大小:在基于云的环境中,通常可以轻松增加现有节点的磁盘大小和 RAM/CPU。
- 仅增加磁盘大小:在基于云的环境中,通常可以相对轻松地增加磁盘容量。
- 快照与还原:如果你愿意通过自动化流程从备份中按需检索旧数据,你可以对旧索引进行快照、删除它们,并在需要时从快照中临时还原数据。
- 减少每个分片的副本数:另一种减少数据的方式是减少每个分片的副本数量。为了实现高可用性,通常每个分片会有一个副本,但当数据变旧时,你可能可以在没有副本的情况下运行。这通常适用于数据是持久性的,或你有备份可以在需要时还原。
- 创建告警:为了防止未来磁盘被填满并主动采取行动,你应该根据磁盘使用情况创建告警,当磁盘开始填满时会通知你。
如何防止和处理磁盘容量未被充分利用的情况
如果你的磁盘容量未被充分利用,有多种方法可以减少集群中的存储体积。
如何减少 Elasticsearch 集群的存储体积
以下是几种减少集群存储体积的方法:
1 . 减少数据节点数量
如果你希望同时减少数据存储以及 RAM 和 CPU 资源,这是一种最简单的策略。下线不必要的节点通常可以带来最大的成本节省。
在下线节点之前,你应当:
- 确保要下线的节点不是必须的 MASTER 节点。你应始终至少保留三个拥有 MASTER 角色的节点。
- 将数据分片从要下线的节点迁移出去。
2. 用更小的节点替换现有节点
如果你不能进一步减少节点数量(通常最小配置为 3 个节点),那么你可以考虑缩小现有节点的规格。请记住,建议所有数据节点的 RAM 和磁盘大小相同,因为分片是根据每个节点上的分片数量来平衡的。
操作流程如下:
- 向集群添加新的、更小的节点
- 将分片从要下线的节点迁移出去
- 关闭旧节点
3. 减少节点的磁盘大小
如果你只想减少节点上的磁盘大小,而不改变整个集群的 RAM 或 CPU,那么你可以为每个节点减少磁盘容量。减少 Elasticsearch 节点的磁盘大小并不是一个简单的过程。
最简单的方法通常是:
- 从节点上迁移分片
- 停止该节点
- 为节点挂载一个合适大小的新数据卷
- 将所有数据从旧磁盘卷复制到新卷
- 卸载旧卷 A
- 启动节点并将分片迁移回该节点
这个过程要求其他节点有足够容量来临时存放该节点的分片。在很多情况下,管理这个过程的成本可能会超过节省的磁盘开销。因此,直接用一个具有目标磁盘大小的新节点替换原节点可能更简单(参见上文 “用更小的节点替换现有节点”)。
当你为不必要的资源付费时,显然可以通过优化资源使用来降低成本。
磁盘大小、RAM 和 CPU 之间的关系
集群中磁盘容量与 RAM 的理想比例取决于你具体的使用场景。因此,在考虑更改存储容量时,你也应该评估当前的磁盘/RAM/CPU 比例是否平衡,以及是否需要按比例增加或减少 RAM/CPU。
RAM 和 CPU 的需求取决于索引活动的数量、查询的数量和类型,以及被搜索和聚合的数据量。这些通常与存储在集群中的数据量成正比,因此也应与磁盘大小相关。
磁盘容量与 RAM 之间的比例会根据使用场景的不同而变化。以下是一些示例:
Index activity | Retention | Search activity | Disk capacity | RAM | |
---|---|---|---|---|---|
Enterprise search app | Moderate log ingestion | Long | Light | 2TB | 32GB |
App monitoring | Intensive log ingestion | Short | Light | 1TB | 32GB |
E-commerce | Light data indexing | Indefinite | Heavy | 500GB | 32GB |
请记住,修改节点机器的配置必须小心进行,因为这可能涉及节点停机,你需要确保分片不会开始迁移到其他已经超负荷的节点上。
原文:How to optimize Elasticsearch disk space and usage - Elasticsearch Labs