目录
场景:
分析报错日志:
es索引只读模式分析:
查看es的内存使用:
查看es的磁盘使用:
解决方法:
测试保存:
参考:
文章来源:https://uudwc.com/A/a9bgG
场景:
再测试环境今天有同事问我es保存数据报错了很奇怪,服务又没有挂掉,前端es服务的数据还能正常显示,怎么突然就写不进去数据了呢,es的日志提示如下 。后面研究了很久记录一下。
{"error":{"root_cause":[{"type":"cluster_block_exception","reason":"index [esbizlog] blocked by:
[TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark, index has read-only-allow-delete block];"}],"type":"cluster_block_exception","reason":"index [esbizlog] blocked by: [TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark, index has read-only-allow-delete block];"},"status":429}
分析报错日志:
意思说请求量比较多磁盘空间满了导致es的这个索引变成只读模式了。
es索引只读模式分析:
Elasticsearch 将索引锁定为只读模式,可能会由以下原因导致:
内存使用率过高:如果 Elasticsearch 节点的内存使用率过高,可能会导致 Elasticsearch 将索引锁定为只读模式,以防止对其进行写操作。
磁盘空间不足:如果 Elasticsearch 节点的磁盘空间不足,可能会导致 Elasticsearch 将索引锁定为只读模式,以防止对其进行写操作。
索引恢复中:如果 Elasticsearch 节点正在从故障中恢复,可能会导致 Elasticsearch 将索引锁定为只读模式,以防止对其进行写操作。
索引刷新中:如果 Elasticsearch 节点正在刷新索引,可能会导致 Elasticsearch 将索引锁定为只读模式,以防止对其进行写操作。
索引合并中:如果 Elasticsearch 节点正在合并索引段,可能会导致 Elasticsearch 将索引锁定为只读模式,以防止对其进行写操作。
索引正在被备份或复制:如果 Elasticsearch 索引正在被备份或复制,可能会导致 Elasticsearch 将索引锁定为只读模式,以防止对其进行写操作。
在这些情况下,Elasticsearch 将索引锁定为只读模式,以避免对索引的写操作。这可以保护索引的完整性,并防止数据丢失。如果您需要对索引进行写操作,您可以尝试解锁索引或调整 Elasticsearch 节点的资源使用情况。
由于测试环境之前正常并没有动因此上述情况 直接排除了索引恢复、索引刷新、索引合并及索引备份或复制,只剩下内存使用率过高及磁盘空间不足两种情况了。
查看es的内存使用:
docker stats 查看如下发现使用率很低.只有9%
查看es的磁盘使用:
docker exec -it dd34534ada6b /bin/bash
df -h
存在磁盘使用超过95%
解决方法:
Elasticsearch 将索引锁定为只读模式,把锁定的只读模式去掉就可了,执行如下命令
curl -X PUT "http://localhost:9200/esbizlog/_settings" -H "Content-Type: application/json" -u "username:password" -d '{"index.blocks.read_only_allow_delete": null}'
测试保存:
再次向es数据中插入数据Ok,测试完成
参考:
Error: disk usage exceeded flood-stage watermark, index has read-only-allow-delete block | Elasticsearch Guide [8.5] | Elastic文章来源地址https://uudwc.com/A/a9bgG