本文介绍当您遇到磁盘使用率超过85%,甚至达到100%,导致阿里云Elasticsearch集群或Kibana无法正常提供服务时,采用的排查方式。

重要 免责声明:本文档可能包含第三方产品信息,该信息仅供参考。阿里云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不进行任何暗示或其他形式的承诺。

问题描述

  • 在进行索引请求时,返回类似index read_only的报错。例如FORBIDDEN/12/index read-only / allow delete (api)];]
  • 集群处于Red状态,严重情况下存在节点未加入集群的情况(可通过GET _cat/nodes?查看),并且存在未分配的分片(可通过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. 执行以下命令删除数据。
    警告 数据删除后将无法恢复,请谨慎操作。您也可以选择保留数据,但需进行磁盘扩容,详情请参见升配集群
    curl -u <username>:<password> -XDELETE http://<host>:<port>/<index-name>
    • <host>表示阿里云Elasticsearch实例的公网或内网地址,建议使用前先确认相关白名单是否开启。
    • 执行命令后,如果集群无法响应,建议触发强制重启,在重启阶段尝试执行删除命令。
  2. 检测集群索引是否依然为read_only状态,如果是,执行以下命令,将集群中所有索引的index.blocks.read_only_allow_delete属性设置为null,使集群中不再存在read_only状态的索引。
    PUT _settings
    {  
       "index.blocks.read_only_allow_delete": null
    }
  3. 检测集群是否依然为Red状态,如果是,可使用_cat/allocation?v命令查看集群中是否存在未分配的分片。
  4. 如果存在未分配的分片,可执行GET _cluster/allocation/explain命令查看未分配分片的原因。如果原因如下图,请手动执行POST /_cluster/reroute?retry_failed=true命令。未分配分片的原因
  5. 等待分片下发完成后,查看集群状态。如果集群状态依然为Red,请联系阿里云技术支持工程师解决。

更多信息

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