zookeeper服务器文件清理

分享到:

zookeeper主要存放了三类文件,他们都可以在配置文件中指定存储路径:

  • snapshot: 内存数据的快照,配置项为dataDir
  • 事务日志:所有与修改数据相关的操作记录,配置项为dataLogDir。在没有dataLogDir配置项的时候,zookeeper默认将事务日志文件和快照日志文件都存储在dataDir对应的目录下。
  • log4j日志:记录zookeeper集群服务器运行日志。日志的配置地址在conf/目录下的log4j.properties文件中,该文件中有一个配置项为"zookeeper.log.dir=."

正常运行过程中,zookeeper会不断地把快照数据和日志输出到这些目录。如果没有专门做配置或者人为清理,日志文件不会自动清理,磁盘会越占越多。

主要的清理方法有下面几种。

(1) 写脚本删除

写一个删除日志脚本,每天定时执行

 1#!/bin/bash 
 2#snapshot file dir 
 3dataDir=/home/yinshi.nc/test/zk_data/version-2
 4#tran log dir 
 5dataLogDir=/home/yinshi.nc/test/zk_log/version-2
 6#zk log dir 
 7logDir=/home/yinshi.nc/test/logs
 8#Keep 66 files 
 9count=66 
10count=$[$count+1] 
11
12ls -t $dataLogDir/log.* | tail -n +$count | xargs rm -f 
13ls -t $dataDir/snapshot.* | tail -n +$count | xargs rm -f 
14ls -t $logDir/zookeeper.log.* | tail -n +$count | xargs rm -f 

写到crontab中,设置为每天凌晨2点执行一次就可以了

1crontab -e
22 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这个工具类,所以直接使用这个脚本也是可以执行清理工作的,也更方便。比如:

1/usr/lib/zookeeper/bin/zkCleanup.sh /hadoop/zookeeper/version-2/ 5

(3) Zookeeper自动清理配置项

从3.4.0开始,zookeeper提供了自动清理snapshot和事务日志的功能,通过配置 autopurge.snapRetainCount 和 autopurge.purgeInterval 这两个参数能够实现定时清理了。这两个参数都是在zoo.cfg中配置的:

1# 指定清理频率,单位是小时,默认是0,表示不开启自己清理功能。
2autopurge.purgeInterval=6
3 
4# 和上面的参数搭配使用,指定需要保留的文件数目,默认是保留3个。
5autopurge.snapRetainCount=5

参考: