【ZooKeeper Notes 9】ZooKeepr日志清理

    转载请用注明:@ni掌柜 nileader@gmail.comhtml

在使用zookeeper过程当中,咱们知道,会有dataDir和dataLogDir两个目录,分别用于snapshot和事务日志的输出(默认状况下只有dataDir目录,snapshot和事务日志都保存在这个目录中,关于这两个目录的详细说明,请看《ZooKeeper管理员指南java

》)。apache

     正常运行过程当中,ZK会不断地把快照数据和事务日志输出到这两个目录,而且若是没有人为操做的话,ZK本身是不会清理这些文件的,须要管理员来清理,这里介绍4种清理日志的方法。在这4种方法中,推荐使用第一种方法,对于运维人员来讲,将日志清理工做独立出来,便于统一管理也更可控。毕竟zk自带的一些工具并不怎么给力,这里是社区反映的两个问题:api

https://issues.apache.org/jira/browse/ZOOKEEPER-957bash

http://zookeeper-user.578899.n2.nabble.com/PurgeTxnLog-td6304244.html运维

第一种,也是运维人员最经常使用的,写一个删除日志脚本,天天定时执行便可:ide

 
 
#!/bin/bash
          
#snapshot file dir
dataDir=/home/nileader/taokeeper/zk_data/version-2
#tran log dir
dataLogDir=/home/nileader/taokeeper/zk_log/version-2
#zk log dir
logDir=/home/nileader/taokeeper/logs
#Leave 60 files
count=60
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

            以上这个脚本定义了删除对应两个目录中的文件,保留最新的60个文件,能够将他写到crontab中,设置为天天凌晨2点执行一次就能够了。
工具

第二种,使用ZK的工具类PurgeTxnLog,它的实现了一种简单的历史文件清理策略,能够在这里看一下他的使用方法:http://zookeeper.apache.org/doc/r3.4.3/api/index.html,能够指定要清理的目录和须要保留的文件数目,简单使用以下:spa

 
 
  1. java -cp zookeeper.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4j12-1.6.1.jar:lib/log4j-1.2.15.jar:conf org.apache.zookeeper.server.PurgeTxnLog <dataDir><snapDir> -n <count>日志


第三种,对于上面这个Java类的执行,ZK本身已经写好了脚本,在bin/zkCleanup.sh中,因此直接使用这个脚本也是能够执行清理工做的。

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

autopurge.purgeInterval  这个参数指定了清理频率,单位是小时,须要填写一个1或更大的整数,默认是0,表示不开启本身清理功能。

autopurge.snapRetainCount 这个参数和上面的参数搭配使用,这个参数指定了须要保留的文件数目。默认是保留3个。

相关文章
相关标签/搜索