美文网首页
记一次线上cluster_block_exception blo

记一次线上cluster_block_exception blo

作者: 老苏GO | 来源:发表于2019-12-03 19:57 被阅读0次

背景

用户在使用线上某服务时(涉及到es已有索引写入操作), 反馈服务总是失败. 而其他服务(涉及es的读/新索引的写入)均正常.

排查过程

经过对后台日志的分析, 发现如下错误日志:

{'index': {'_index': 'bi_4769dcd50ba048cd163bfd48e2f500f7', '_type': 'doc', '_id': 'evoOy24BgwL6ozngNCWG', 'status': 403, 'error': {'type':'cluster_block_exception', 'reason': 'blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];'}}

经过Google, 发现此问题是由于es数据存储磁盘剩余空间过少导致的. 官网对此的说明如下:

cluster.routing.allocation.disk.watermark.flood_stage

Controls the flood stage watermark. It defaults to 95%, meaning that Elasticsearch enforces a read-only index block (index.blocks.read_only_allow_delete) on every index that has one or more shards allocated on the node that has at least one disk exceeding the flood stage. This is a last resort to prevent nodes from running out of disk space. The index block must be released manually once there is enough disk space available to allow indexing operations to continue.

即es存在一种flood_stage的机制. 默认磁盘空间设置为95%, 当磁盘占用超过此值时, 将会触发flood_stage机制, es将强制将各索引index.blocks.read_only_allow_delete设置为true, 即仅允许只读只删, 不允许新增.

以上排查结果表明: 线上服务出问题的原因在于es索引均被设置为只读只删模式. 所以导致索引数据写入时失败.

问题原因

前两周, 在线上服务所在机器上, 进行了涉及MySQL大量数据(涉及数据量达1亿量级)的读写操作, 当时磁盘空间被耗尽. 触发es的flood_stage, 全部索引被设置为只读只删.

但因近期(一个月左右), 没有用户使用对es索引写入数据服务, 导致一直未发现此问题.

解决方法

解决方法很简单, 仅需将对应es节点上的索引设置进行如下设置即可.

PUT _settings
{
  "index": {
      "blocks": {
          "read_only_allow_delete": "false"
      }
  }
}

反思!!!

在线上进行某些操作时, 应对服务器资源占用有个粗略的估计或对服务器资源进行监控.

避免在执行某些操作时, 耗尽服务器资源而导致其他一些服务的异常

引用

ES报错 [FORBIDDEN/12/index read-only / allow delete (api)] - read only elasticsearch indices

Disk-based Shard Allocation

相关文章

  • 记一次线上cluster_block_exception blo

    背景 用户在使用线上某服务时(涉及到es已有索引写入操作), 反馈服务总是失败. 而其他服务(涉及es的读/新索引...

  • Mac 启动项目变慢(记一次本机InetAddress.getL

    记一次本机InetAddress.getLocalHost()引起的项目启动变慢及解决过程[https://blo...

  • 番外:异常处理

    kibana 403:[cluster_block_exception]index [.kibana_task_m...

  • blo

    入门级 此处只简单举例并不深究。对于初学者来说delegate或block都不是一下子能理解的,所以我的建议和体会...

  • 记一次线上update数据报错ERROR 1062 (23000

    记一次线上update数据报错ERROR 1062 (23000): Duplicate entry '1764-...

  • 记一次线上bug

    问题描述 测试和预生产都没有问题,但是生产环境上,会偶尔出现用户的登录信息获取不到的情况 分析问题 查看日志发现是...

  • 记一次线上死锁

    项目做了什么 这个项目是为了处理一些任务,实现是启动定时任务去处理这些数据,因为项目上线后是集群的,所以为了避免多...

  • 记一次线上事故

    今天服务忽然炸了,log没有记录,服务一直重启导致数据库压力暴增。

  • SpringBoot连接Elasticsearch实战总结

    记一次线上的elasticsearch查询采坑 第一次使用elasticsearch,于是从网上找轮子复制粘贴。早...

  • 记一次线上问题排查

    问题描述 环境描述:后台服务部署了两个Tomcat实例 问题描述:调用Http接口(使用域名方式调用),有时候会成...

网友评论

      本文标题:记一次线上cluster_block_exception blo

      本文链接:https://www.haomeiwen.com/subject/prshgctx.html