本文档介绍当您遇到磁盘使用率超过85%,甚至达到100%,导致阿里云Elasticsearch(简称ES)集群或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
  • 通过阿里云ES控制台的集群监控页面,或者登录Kibana控制台进入监控页面,动态查看近一段时间的集群负载,磁盘使用率曾达到100%。

问题分析

节点磁盘使用率存在以下三个水位线,超过水位线可能会影响阿里云ES服务:

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

解决方案

  1. 执行以下命令删除数据。
    curl -u <username>:<password> -XDELETE  http://<host>:<port>
    注意
    • 如果您需要保留数据,可进行磁盘扩容,详情请参见集群升配
    • <host>表示阿里云ES实例的公网或内网地址,建议使用前先确认相关白名单是否开启。
    • 如果集群无法响应,建议触发强制重启,在重启阶段尝试执行删除命令。
  2. 检测集群索引是否依然为read_only状态,如果是,执行以下命令,将集群中所有索引的index.blocks.read_only_allow_delete属性设置为null
    PUT _settings
    {  
       "index.blocks.read_only_allow_delete": null
    }

    以上设置,将集群中所有索引的index.blocks.read_only_allow_delete都设置为null,因此集群中不会存在read_only状态的索引。

  3. 检测集群是否依然为Red状态,如果是,可使用_cat/allocation?v命令查看集群中是否存在未分配的分片。
  4. 如果存在未分配的分片,可执行GET _cluster/allocation/explain命令查看未分配分片的原因。如果原因如下图,请手动执行POST /_cluster/reroute?retry_failed=true命令。未分配分片的原因
  5. 等待分片下发完成后,查看集群状态。如果集群状态依然为Red,请联系阿里云技术支持工程师解决。

注意事项

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