Zookeeper 运行过程会产生大量的事务日志和 snapshot 镜像文件,讨论下如何清理事务日志和snapshot
日志文件
在使用ZK过程中,会有dataDir和dataLogDir两个目录,分别用于snapshot和事务日志的输出(默认情况下只有dataDir目录,snapshot和事务日志都保存在这个目录中)
ZK在完成若干次事务日志之后(在ZK中,凡是对数据有更新的操作,比如创建节点,删除节点或是对节点数据内容进行更新等,都会记录事务日志),ZK会触发一次快照(snapshot),将当前server上所有节点的状态以快照文件的形式dump到磁盘上去,即snapshot文件。这里的若干次事务日志是可以配置的,默认是100000,具体参看配置参数”snapCount”的介绍
日志清理
配置自动清理
ZK在3.4.0版本以后提供了自动清理snapshot和事务日志的功能通过配置 autopurge.snapRetainCount
和 autopurge.purgeInterval
这两个参数能够实现定时清理了。
当前ZK版本为3.4.6,因此可以使用自带的清理功能
- autopurge.purgeInterval: 这个参数指定了清理频率,单位是小时,需要填写一个1或更大的整数,默认是0,表示不开启自己清理功能。
- autopurge.snapRetainCount: 这个参数和上面的参数搭配使用,这个参数指定了需要保留的文件数目。默认是保留3个。
1 | autopurge.snapRetainCount=50 |
每一个小时清理一次,一次保留50个文件
自定义清理脚本
clean_zook_log.sh 脚本内容如下
1 | #!/bin/bash |
这个脚本保留最新的50个文件,可以将这个脚本添加到crontab中,设置为每30分钟执行
1 | 30 * * * * /bin/bash /home/tu/zookeeper/bin/clean_zook_log.sh > /dev/null 2>&1 |
zkCleanup.sh清理
ZK自己有自带的清理文件 bin/zkCleanup.sh,可以直接使用这个脚本也是可以执行清理工作的,是使用的zookeeper.jar里的org.apache.zookeeper.server.PurgeTxnLog
来做的
参考链接