zookeeper服务器文件清理
zookeeper服务器文件清理
July 29, 2020
zookeeper主要存放了三类文件,他们都可以在配置文件中指定存储路径:
- snapshot: 内存数据的快照,配置项为dataDir
- 事务日志:所有与修改数据相关的操作记录,配置项为dataLogDir。在没有dataLogDir配置项的时候,zookeeper默认将事务日志文件和快照日志文件都存储在dataDir对应的目录下。
- log4j日志:记录zookeeper集群服务器运行日志。日志的配置地址在conf/目录下的log4j.properties文件中,该文件中有一个配置项为"zookeeper.log.dir=."
正常运行过程中,zookeeper会不断地把快照数据和日志输出到这些目录。如果没有专门做配置或者人为清理,日志文件不会自动清理,磁盘会越占越多。
主要的清理方法有下面几种。
(1) 写脚本删除
写一个删除日志脚本,每天定时执行
#!/bin/bash
#snapshot file dir
dataDir=/home/yinshi.nc/test/zk_data/version-2
#tran log dir
dataLogDir=/home/yinshi.nc/test/zk_log/version-2
#zk log dir
logDir=/home/yinshi.nc/test/logs
#Keep 66 files
count=66
count=$[$count+1]
ls -t $dataLogDir/log.* | tail -n +$count | xargs rm -f
ls -t $dataDir/snapshot.* | tail -n +$count | xargs rm -f
ls -t $logDir/zookeeper.log.* | tail -n +$count | xargs rm -f
写到crontab中,设置为每天凌晨2点执行一次就可以了
crontab -e
2 2 * * * /bin/bash /root/clean_zook_log.sh > /dev/null 2>&1
(2) Zookeeper自带工具
使用ZK的工具类PurgeTxnLog,它的实现了一种简单的历史文件清理策略,可以参考API文档看一下使用方法:http://zookeeper.apache.org/doc/r3.4.3/api/index.html
其实在bin/zkCleanup.sh中,就直接调用了PurgeTxnLog这个工具类,所以直接使用这个脚本也是可以执行清理工作的,也更方便。比如:
/usr/lib/zookeeper/bin/zkCleanup.sh /hadoop/zookeeper/version-2/ 5
(3) Zookeeper自动清理配置项
从3.4.0开始,zookeeper提供了自动清理snapshot和事务日志的功能,通过配置 autopurge.snapRetainCount 和 autopurge.purgeInterval 这两个参数能够实现定时清理了。这两个参数都是在zoo.cfg中配置的:
# 指定清理频率,单位是小时,默认是0,表示不开启自己清理功能。
autopurge.purgeInterval=6
# 和上面的参数搭配使用,指定需要保留的文件数目,默认是保留3个。
autopurge.snapRetainCount=5
参考:
最后更新于