我什么也没忘,但是有些事只适合收藏。不能说,也不能想,却又不能忘
问题出现 当Elasticsearch所在磁盘占用大于等于95%时,Elasticsearch会把所有相关索引自动置为只读。无法插入新的数据,错误信息如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 { "error" : { "root_cause" : [ { "type" : "cluster_block_exception" , "reason" : "blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];" } ], "type" : "cluster_block_exception" , "reason" : "blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];" }, "status" : 403 }
解决方案 查看index信息
1 curl -GET 'localhost:9200/index_name/_settings?pretty'
返回信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 { "index_name" : { "settings" : { "index" : { "number_of_shards" : "5" , "blocks" : { "read_only_allow_delete" : "true" }, "provided_name" : "index_name" , "creation_date" : "1516454800021" , "number_of_replicas" : "1" , "uuid" : "6WjhtrARTOOjsEUaOqNzlw" , "version" : { "created" : "6010199" } } } } }
发现确实这个索引的 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 curl -XGET 127.0.0.1:9200/_cat/allocation?v
结果
1 2 3 shards disk.indices disk.used disk.avail disk.total disk.percent host ip node 12 72.9 kb 56.6 gb 2.3 gb 58.9 gb 96 172.18 .0 .2 172.18 .0 .2 elasticsearch 12 UNASSIGNED
使用df -h命令,发现docker下的overlay磁盘占用很大
1 2 3 4 5 6 7 8 9 10 11 12 文件系统 容量 已用 可用 已用% 挂载点 /dev/vda1 40G 35G 3.2G 92% / devtmpfs 3.9G 0 3.9G 0% /dev tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 3.9G 137M 3.7G 4% /run tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup tmpfs 783M 0 783M 0% /run/user/1000 overlay 40G 35G 3.2G 92% /var/lib/docker/overlay/110e4d61d36d50cee7c5990fb42a84f4c7ae6003ea30032e10f497f4bf535bbb/merged shm 64M 0 64M 0% /var/lib/docker/containers/2f532a830e88ca7d8483e34e3d940e25b371f09560dca4106900323da6943433/shm tmpfs 783M 0 783M 0% /run/user/0 overlay 40G 35G 3.2G 92% /var/lib/docker/overlay/f17d62b3550c9ec4138aab76bb1e2da0abf289bb378ef78e5a843dd8b3924902/merged shm 64M 0 64M 0% /var/lib/docker/containers/6d3e12fbf3137c6c11797957c2ee593ee068c3486397672965f6e8c5af31390f/shm
使用docker ps -a查看是否存在已经死掉的容器没有被删除,发现果然存在
1 2 3 4 5 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6d3e12fbf313 halcms "/bin/sh -c 'echo ..." 24 hours ago Up 24 hours 0.0.0.0:8083->8080/tcp docker_halcms-app_1 2f532a830e88 elasticsearch:2.3.5 "/docker-entrypoin..." 2 years ago Up 4 weeks 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp halcms-elasticsearch 8e73d3c2b62d 6fd9e186667b "/bin/sh -c 'sh -c..." 2 years ago Exited (127) 2 years ago adoring_curran cfc19946e8b6 817e3ed9255c "/bin/sh -c 'sh -c..." 2 years ago Exited (127) 2 years ago elated_banach
使用docker system df命令查看Docker的磁盘使用情况
1 2 3 4 TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 94 2 18.77GB 18.22GB (97%) Containers 4 2 60.17kB 0B (0%) Local Volumes 2 2 6.92MB 0B (0%)
使用docker system prune自动清理空间
1 2 3 docker system prune命令只能清除悬空镜像,未被使用的镜像不会被删除。 docker system prune -a命令可以清理
拓展API 查看所有index
1 curl '127.0.0.1:9200/_cat/indices?v'
删除index
1 curl -XDELETE http://127.0.0.1:9200/indexname1,indexname2
https://www.villagehead.cn/2019/11/19/docker%E4%B8%8B%E7%9A%84-var-lib-docker-overlay%E6%96%87%E4%BB%B6%E5%BE%88%E5%A4%A7%EF%BC%8C%E9%80%A0%E6%88%90%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%A3%81%E7%9B%98%E6%8A%A5%E8%AD%A6/