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

问题:

使用Elasticsearch记录服务api请求记录时,后台突然一直报错该问题
原因是:ElasticSearch进入“只读”模式,只允许删除,导致插入请求记录数据时报错。
当ES数据所在目录磁盘空间使用率超过90%后,ES将修改为只读状态,所以可能是磁盘空间不足导致ES不允许写入。
可以使用命令:df -hl /查看内存情况

解决方式:

  1. 先取消只读模式
    # 修改配置,取消只读模式
    # _all: 指所有索引,可以针对单个索引,将其改为对应索引名就行
    curl -XPUT -H "Content-Type: application/json" http://127.0.0.1/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'
    
  2. 删掉很久以前没用的日志,这里是用条件删除,好像还有其他方法,没有去试,这种删除必须先取消只读模式才能删除
    # 删除记录,删除必须带上索引名,这里是api,
    # _delete_by_query:根据条件删除
    curl -X POST "http://127.0.0.1:9200/api/_delete_by_query" -H 'Content-Type: application/json' -d
    '
    {
      "query": {
        "bool": {
          "must": [
            {
              "range": {
                "createTime": {
                  "lt": "2021-05-01"
                }
              }
            }
          ],
          "must_not": [],
          "should": []
        }
      }
    }
    '
    
  3. _delete_by_query删除只是标记这条数据删除了,实际没有删除,可以手动清空一下
    这个对这块写的很完整,参考
    curl -XPOST -H "Content-Type: application/json" 'http://127.0.0.1:9200/api/_forcemerge?only_expunge_deletes=true&max_num_segments=1'
    

参考:https://cloud.tencent.com/developer/article/1737025

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐