ElasticSearch系列---【Es报错:blocked by: [TOO MANY_REQUESTS/12/disk usage exceeded flood-stage watermark,index has read-only-allow-delete】
1.问题
ES突然无法写入了,查看报错日志如下:
blocked by: [TOO MANY_REQUESTS/12/disk usage exceeded flood-stage watermark,index has read-only-allow-delete
2.分析
这个错误通常出现在Elasticsearch中,意味着磁盘使用量已经超过了Elasticsearch为索引设置的水位线限制,该限制被称为洪峰水位线(flood-stage watermark)。当磁盘使用量超过这个限制时,Elasticsearch会自动将索引设置为只读,并且不允许删除操作,以防止进一步的数据丢失。
查看read_only_allow_delete的值,默认是true
# kibana
GET /<index_name>/_settings?pretty
3.解决方案
3.1生产环境直接申请增加磁盘
3.2非生产环境可以采用下面的临时方案
3.2.1把索引副本数改成0个,索引大小直接少一半
如果执行失败,则先解锁索引或删除无用的索引释放一部分空间
PUT 索引名/_settings
{
"number_of_replicas": 0
}
3.2.2 直接解锁索引
# kibana
PUT _all/_settings
{
"index.blocks.read_only_allow_delete":null
}
# shell
curl -XPUT http://localhost:9200/_all/_settings -H 'Content-Type: application/json' -d '{ "index.blocks.read_only_allow_delete": null }
_all表示解除所有索引,如果要解锁指定索引,则把_all改成具体的索引名称。
3.2.3 先用剩下的磁盘顶一阵
1.关闭磁盘分配保护
# kibana
PUT _cluster/settings
{
"transient": {
"cluster.routing.allocation.disk.threshold_enabled": false
}
}
2.关闭索引的只读状态
# kibana
PUT _all/_settings
{
"index.blocks.read_only_allow_delete": null
}
3.磁盘清理或者扩容完毕后,启用磁盘分配保护
# kibana
PUT _cluster/settings
{
"transient": {
"cluster.routing.allocation.disk.threshold_enabled": true
}
}
3.2.4清除服务器无用的磁盘大日志文件
3.2.5reindex已有的大索引,迁移之后会释放至少三分之一的空间
1.打开kibana的索引管理页面,按存储大小排序,找到大索引。
2.根据原有mapping,新建备份索引。
3.reindex现有的索引到备份索引。
4.删除原索引。
5.给备份索引添加别名为原有索引名。
愿你走出半生,归来仍是少年!
浙公网安备 33010602011771号