elasticsearch磁盘占用问题
我什么也没忘,但是有些事只适合收藏。不能说,也不能想,却又不能忘
问题出现
当Elasticsearch所在磁盘占用大于等于95%时,Elasticsearch会把所有相关索引自动置为只读。无法插入新的数据,错误信息如下:
1 | { |
解决方案
查看index信息
1 | curl -GET 'localhost:9200/index_name/_settings?pretty' |
返回信息
1 | { |
发现确实这个索引的 read_only_allow_delete
属性是 true
,由此导致了无法再向其中插入文档。
解决方案有两种:
- 1.清理磁盘,使占用低于95%。
- 2.调整自动锁阀值,官方文档中有详尽方法。
建议采用第一种,注意解决之后,需要手动把被锁的索引的只读模式关闭。
1 | curl -XPUT -H "Content-Type: application/json" http://127.0.0.1:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}' |
返回成功
1 | {"acknowledged":true} |
清理磁盘占用
删除文档并没有真正删除,仅作了删除标记,从而不能再被搜索到
查看磁盘占用
1 | curl -XGET 127.0.0.1:9200/_cat/allocation?v |
结果
1 | shards disk.indices disk.used disk.avail disk.total disk.percent host ip node |
使用df -h命令,发现docker下的overlay磁盘占用很大
1 | 文件系统 容量 已用 可用 已用% 挂载点 |
使用docker ps -a查看是否存在已经死掉的容器没有被删除,发现果然存在
1 | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
使用docker system df命令查看Docker的磁盘使用情况
1 | TYPE TOTAL ACTIVE SIZE RECLAIMABLE |
使用docker system prune自动清理空间
1 | docker system prune命令只能清除悬空镜像,未被使用的镜像不会被删除。 |
拓展API
查看所有index
1 | curl '127.0.0.1:9200/_cat/indices?v' |
删除index
1 | curl -XDELETE http://127.0.0.1:9200/indexname1,indexname2 |