免责声明:本文可能由社区贡献或涉及第三方产品信息,建议您访问社区或第三方产品的官方网站获取帮助与支持。第三方产品不在阿里云售后支持范围。本文仅供参考,阿里云不做任何暗示或其他形式的承诺。

问题描述

当磁盘使用率超过85%,或者达到100%,会导致Elasticsearch集群或Kibana无法正常提供服务,可能会出现以下几种问题场景:

  • 在进行索引请求时,返回类似FORBIDDEN/12/index read-only / allow delete (api)];]的报错。
  • 集群处于Red状态,严重情况下存在节点未加入集群的情况(可通过GET _cat/allocation?v命令查看),并且存在未分配的分片(可通过GET _cat/allocation?v命令查看)。
    说明:Red状态代表部分主分片不可用,可能已经丢失数据。
  • 通过Kibana控制台创建管道、注册Beats时提示internal server error的报错。
  • Elasticsearch控制台的集群监控页面,或者Kibana控制台的监控页面,动态查看近一段时间的集群负载,磁盘使用率曾达到100%。

问题原因

上述问题是由于磁盘使用率过高所导致。数据节点的磁盘使用率存在以下三个水位线,超过水位线可能会影响Elasticsearch或Kibana服务:

  • 磁盘使用率超过85%:会导致新的分片无法分配。
  • 磁盘使用率超过90%:Elasticsearch会尝试将对应节点中的分片迁移到其他磁盘使用率比较低的数据节点中。
  • 磁盘使用率超过95%:系统会对Elasticsearch集群中的每个索引强制设置read_only_allow_delete属性,此时索引将无法写入数据,只能读取和删除对应索引。磁盘使用率

解决方案

  1. 访问Elasticsearch实例。
  2. 执行以下命令,删除数据。
    警告:数据删除后将无法恢复,请谨慎操作。您也可以选择保留数据,但需进行磁盘扩容,详情请参见升配集群
    curl -u [$User]:[$Password] -XDELETE http://[$Host]:[$Port]
    说明:
    • [$User]和[$Password]:表示Elasticsearch实例的用户名和密码。
    • [$Host]:Elasticsearch实例的公网或内网地址,建议使用前先确认相关白名单是否开启。
    • [$Port]:表示Elasticsearch实例的端口号。
    • 执行命令后,如果集群无法响应,建议触发强制重启,在重启阶段尝试执行删除命令。
  3.  查看集群索引是否依然为read_only状态,如果是请执行以下命令,将集群中所有索引的index.blocks.read_only_allow_delete属性设置为null,使集群中不再存在read_only状态的索引。
    PUT _settings
    {  
       "index.blocks.read_only_allow_delete": null
    }
  4. 若集群是否依然为Red状态,执行以下命令,查看集群中是否存在未分配的分片。
    _cat/allocation?v
  5. 如果存在未分配的分片,执行以下命令,查看未分配分片的原因。
    GET _cluster/allocation/explain
    如果返回以下内容,请手动执行POST /_cluster/reroute?retry_failed=true命令。
    p84500.png
  6. 等待分片下发完成后,查看集群状态。如果集群状态依然为Red,请联系阿里云技术支持。

更多信息

为避免磁盘使用率过高影响Elasticsearch服务,建议开启磁盘使用率监控报警,及时查收报警短信,提前做好防御措施,详情请参见配置云监控报警

适用于

  • Elasticsearch

如果您的问题仍未解决,您可以在阿里云社区免费咨询,或提交工单联系阿里云技术支持。