小型化硬盘占用过大问题排查
问题描述
小型化在部署好后,硬盘占用逐渐增大,直至机器整个硬盘耗尽
初步排查
该机器硬盘20g ,可见volumes目录占用空间巨大

执行df -h可见剩下2.3g空间,服务停掉后执行docker volume prune(清除未使用volume),可用空间增大到11g

换到另一台部署小型化具有同样问题的机器,查看可发现有两个volume的占用空间很大,经比对,定位到这两个volume分别属于zookeeper和rabbitmq


问题分析
zookeeper问题分析
是什么文件占用大量硬盘?
进入zookeeper的这个volume内,可见这里面有很多日志

在使用zookeeper过程中,我们知道,会有dataDir和dataLogDir两个目录,分别用于snapshot和事务日志的输出(默认情况下只有dataDir目录,snapshot和事务日志都保存在这个目录中)
正常运行过程中,ZK会不断地把快照数据和事务日志输出到这两个目录,并且如果没有人为操作的话,ZK自己是不会清理这些文件的,需要管理员来清理
如何清理日志?
1)linux命令+定时器
ZK的bin目录下有一个脚本zkCleanup.sh,设置定时器去执行这个脚本,但必须要在ZK容器内执行,这样就涉及到改镜像,过于麻烦,排除掉改方案
另外还有一种方案是在宿主机上跑一个定时器,直接rm -rf 日志目录,涉及到改启动脚本以及考虑不同系统的兼容性,排除掉该方案
2)配置文件
从3.4.0开始,zookeeper提供了自动清理snapshot和事务日志的功能,通过配置 autopurge.snapRetainCount 和 autopurge.purgeInterval 这两个参数能够实现定时清理了。这两个参数都是在zoo.cfg中配置
dataDir=/data
dataLogDir=/datalog
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=1
maxClientCnxns=60
standaloneEnabled=true
admin.enableServer=true
server.1=localhost:2888:3888;2181
这样处理后,启动后每隔半小时观察,volume目录占用空间逐渐增大后又变小,总的占用空间长期不超过600M

Rabbitmq问题分析
是什么文件占用大量空间?
最终找到一个名为00000001.wal的文件占用巨大的空间

在rabbitmq的官方文档中查到,改文件存放的是Quorum Que所有操作,但占用硬盘大小不会超过512M

而之前有机器出现volume占用几十G的情况,除了zookeeper的日志持续增大的问题外,还有就是创建的volume废弃后未清理,这些废弃的volume中特别是rabbitmq的废弃volume每个会占用500M左右空间
总结
废弃volume怎么产生?
执行docker-compose up -d 后,再执行docker-compose down。此过程会创建容器,再销毁容器,下次执行docker-compose up -d后又会重新创建volume(未绑定的),而之前创建容器时创建的volume(未绑定的)在容器销毁后就废弃了
小型化的启动和停止,用的就是docker-compose up -d和docker-compose down,因此会出现这个问题
废弃volume如何清理?
执行docker volume prune
还没有评论,来说两句吧
