Elasticsearch:High Disk Watermark

Posted 中国社区官方博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch:High Disk Watermark相关的知识,希望对你有一定的参考价值。

你的 Elasticsearch 集群上有各种 “水位” 阈值。 当一个节点上的磁盘填满时,要跨越的第一个阈值将是 “低磁盘水位”。 第二个阈值将是 “高磁盘水位”。 如果你超过此阈值,则 Elasticsearch 将尝试将分片从该节点重新定位到集群中的其他节点。

如何解决这个问题

超过此阈值是一个警告,你不应在达到更高阈值 flood_stage 之前延迟采取行动。 你可以采取以下措施来解决问题:

  • 删除旧索引
  • 从现有索引中删除文档
  • 减少副本数量(在旧索引上)
  • 增加所有节点上的磁盘空间
  • 向集群添加新节点

尽管你可能不愿意删除数据,但在日志系统中,删除旧索引(如果可用的话,你可以稍后从快照中恢复)通常比丢失新数据要好。 但是,此决定将取决于你的系统架构和你可用的排队机制。

检查每个节点上的磁盘空间

你可以通过运行以下命令查看每个节点上的可用空间:

GET _nodes/stats/fs

检查集群是否正在重新平衡

如果高水位已经通过,那么 Elasticsearch 应该开始重新平衡从该节点到仍然低于低水位的其他节点的分片。 你可以通过调用以下方法检查是否有任何重新平衡正在进行:

GET _cluster/health/

如果你认为您的集群应该将分片重新平衡到其他节点,但事实并非如此,则可能有一些其他集群分配规则阻止了这种情况的发生。 最可能的原因是:

  • 其他节点已经在低磁盘水位之上
  • 集群分配规则控制节点之间的分片分布,并与重新平衡要求相冲突。 (例如,区域感知分配)。
  • 正在进行的再平衡操作太多了
  • 其他节点已经包含可以重新平衡的分片的主分片或副本分片。

检查集群设置

你可以使用如下的命令查看已使用的设置:

GET _cluster/settings

如果它们不合适,你可以使用如下命令修改它们:

注意:阈值可以指定为百分比和字节值,但前者更灵活且更易于维护(以防不同的节点具有不同的磁盘大小,例如在热/温部署中)。

如何避免它

有多种机制可以自动删除陈旧数据。

如何自动删除陈旧数据:

1) 应用 ILM(索引生命周期管理

   使用 ILM,你可以让 Elasticsearch 在当前索引大小达到给定年龄时自动删除索引。

2) 使用基于日期的索引

    如果你的应用程序使用基于日期的索引,那么使用脚本或 Elasticsearch curator 等工具可以轻松删除旧索引。

3) 使用快照离线存储数据

    离线存储快照数据并在需要查看或研究存档数据时将其恢复可能是合适的。

4) 自动化/简化添加新数据节点的过程

    使用 terraform 等自动化工具自动向集群添加新节点。 如果这是不可能的,至少要确保你有一个明确记录的过程来创建新. 节点、添加 TLS 证书和配置,并在短时间内将它们带入 Elasticsearch 集群并在可预测的时间范围内。

更多阅读:Elasticsearch:Low disk watermark

以上是关于Elasticsearch:High Disk Watermark的主要内容,如果未能解决你的问题,请参考以下文章

数据库导入后 Postgres autovacuum high cpu/disk

在 macOS High Sierra 上创建 APFS RAM 磁盘

Elasticsearch:Low disk watermark

Elasticsearch:Low disk watermark

Elasticsearch High Level Rest Client 发起请求的过程分析

springboot使用rest-high-level-client集成elasticsearch 7.5.1