ES集群修改index副本数,报错 :index read-only / allow delete (api)

原因:

es集群数据量增速过快,导致个别es node节点磁盘使用率在%80以上,接近%90 ,由于ES新节点的数据目录data存储空间不足,导致从master主节点接收同步数据的时候失败,此时ES集群为了保护数据,会自动把索引分片index置为只读read-only.

故障处理办法:

1:集群加节点,简单粗暴;

2:降低集群index副本数量;

3:其它:增加磁盘、删除历史数据等;

我们采用方案2,作为临时应对方案,待集群可以正常数据写入后,再指向步骤 1或者3的操作彻底解决问题;

操作步骤:

1:在Kibana的开发工具Dev Tools中执行(或在服务器上通过curl工具发起PUT请求,下文同)

修改索引副本数量为1

PUT 48_hot_v1/_settings
{
  "index": {
        "number_of_replicas": "1"
        }
}

报错如下:

api接口执行操作

{
  "type": "cluster_block_exception",
  "reason": "blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];"
}

报错原因:

es磁盘已满而无法索引更多文档,则elasticsearch将切换为只读。它确保了只读查询的可用性。Elasticsearch不会自动切换回来,可以使用如下方法切换回正常模式:

curl -XPUT -H "Content-Type: application/json" http://localhost:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'

或者,在Kibana的开发工具Dev Tools中执行

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

验证 :查看指定索引的设置信息

GET 48_hot_v1/_settings

查找内容如下:
        },
        "blocks": {
          "read_only_allow_delete": "false"
        },

配置生效后集群开始删除index副本数据,datanode 节点磁盘空间逐步释放。