我使用的服务器集群架构是三节点Docker Swarm,一主二从。基于Percona XtraDB Cluster(PXC),以及haproxy+keepalived配置了MySQL高可用架构,当然也是三节点的MySQL。今天我通过Haproxy面板,看到第三台服务器的MySQL离线了(pxc03),于是登录到服务器上查看容器的运行日志,别的英文没细看,一眼就看到了no space left
,无存储空间了,df -h
查看目录占用百分比100%
,显然是/
目录的磁盘空间满了,下一步就是排查是哪些程序占用了大部分磁盘。
linux怎么查看文件夹多大
- 1、利用ls命令查看,该命令可将结果以KB、MB等为单位进行显示,语法为
ls -ll
或ls-lh
; - 2、利用
du -h –max-depth=1 *
命令,该命令可查看当前目录下的各个文件和文件夹的大小; - 3、利用
du -sh
命令,可查看当前文件夹的总大小; - 4、利用
du -h –max-depth=0 *
命令,可查看直接子目录文件及文件夹大小。
通过查看是/var/lib/docker
占用空间过大,通过进一步查看是/var/lib/docker/overlay2
目录占用空间大,高达12GB。我之前在另外一台服务器上遇到了这种情况,
当时我的解决方案是把安装在根目录的docker迁移到home
下,因为home
挂在的磁盘容量较大,但是这种做法是错误的,治标不治本
第一种情况:是因为docker中部署的系统中日志内容的不断扩大。
这种情况下,我们可手动,或定时任务清理。
对于/var/lib/docker/overlay2 空间占用,存在很多误导的方法是去迁移路径等。。
其实磁盘空间的占用和overlay没关系,它的使用和真实的disk使用相同,overlay只是一个docker的虚拟文件系统,真实的文件系统是前者/dev/vda1,可以看到路径所指为根目录。
所以,通过该目录去查找哪里占用资源过大。
通常情况下与overlay2的同级目录下会有如下的目录:
占用大量空间的日志文件位于containers下,该目录下存在如下目录:
在该目录下,会存在以目录名为前缀,以“-json.log”为后缀的目录文件。
例如:
使用如下命令会看到该文件的大小:ll -h
然后,使用> *-json.log
,将该文件进行清理
清理完成可不重启服务,重启更好
清理完后,可通过df -h
查看磁盘占用情况
第二种情况:可通过执行docker system prune
命令可用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像),我的情况就是这种情况,docker中存在大量废弃的镜像
docker system prune
Docker中查询磁盘占用情况:
这个图片是清理后的截图,清理之前多出来10G+,忘记截图了
docker system prune -a
【慎用】命令清理更干净、彻底,可以将没有容器使用的Docker镜像都删掉。
也可以使用Docker的图形化管理工具——Portainer进行查看清理
参考资料
- Docker篇之Overlay2磁盘空间占用过大清理