ES 写入全线 403:磁盘刚到 95%,整个集群就“只读”了——水位线三兄弟与 read_only_allow_delete
日志写入突然全部失败,报 index read-only / allow delete (api),集群还变了 yellow。顺着 _cluster/health、_cat/allocation、allocation/explain 一路查到磁盘水位线,讲清 85/90/95 三道线、解除只读的正确姿势,以及分片过多这个隐形推手。
从一个关键词,发现新的思路。
日志写入突然全部失败,报 index read-only / allow delete (api),集群还变了 yellow。顺着 _cluster/health、_cat/allocation、allocation/explain 一路查到磁盘水位线,讲清 85/90/95 三道线、解除只读的正确姿势,以及分片过多这个隐形推手。
凌晨磁盘告警,df 显示根分区 100%,罪魁是 /var/lib/docker。用 docker system df -v、du 逐层下钻,定位到 json-file 日志无限增长,讲清 max-size/max-file 配置、docker system prune 各选项的风险(--volumes 会删数据)与构建缓存清理。
监控里 load 飙到几十,top 里 CPU 却几乎空闲。原来 Linux 的 load 也统计 D 状态进程。用 vmstat、iostat -x、pidstat -d、iotop 和 ps 找出是磁盘慢还是 NFS 卡死,并讲清 await 与 %util 怎么读。
磁盘告警 100%,du 加起来却只有一半。原来是日志被 rm 了,Java 进程还握着文件句柄。用 lsof +L1 找到它,/proc/PID/fd 截断止血,再顺带讲 inode 耗尽、大文件定位和 logrotate copytruncate。