在使用zookeeper过程中,我们知道,会有dataDir和dataLogDir两个目录,分别用于snapshot和事务日志的输出(默认情况下只有dataDir目录,snapshot和事务日志都保存在这个目录中,正常运行过程中,ZK会不断地把快照数据和事务日志输出到这两个目录,并且如果没有人为操作的话,ZK自己是不会清理这些文件的,需要管理员来清理,这里介绍4种清理日志的方法。在这4种方法中,推荐使用第一种方法,对于运维人员来说,将日志清理工作独立出来,便于统一管理也更可控。毕竟zk自带的一些工具并不怎么给力,这里是社区反映的两个问题:
第一种,也是运维人员最常用的,写一个删除日志脚本,每天定时执行即可:
#!/bin/bash
#snapshot file dir
dataDir=/home/yunva/zookeeper/bin/snapshot/version-2
#tran log dir
dataLogDir=/home/yunva/zookeeper/bin/snapshot/version-2
#zk log dir
#Leave 30 files
count=30
count=$[$count+1]
ls -t $dataLogDir/log.* | tail -n +$count | xargs rm -f
ls -t $dataDir/snapshot.* | tail -n +$count | xargs rm -f
crontab -e
2 2 * * * /bin/bash /root/clean_zook_log.sh > /dev/null 2>&1
以上这个脚本定义了删除对应两个目录中的文件,保留最新的30个文件,可以将他写到crontab中,设置为每天凌晨2点2分执行一次就可以了。
第二种,使用ZK的工具类PurgeTxnLog,它的实现了一种简单的历史文件清理策略,简单使用如下:
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 这个参数和上面的参数搭配使用,这个参数
详细解决方案
zookeeper3.4.6配置实现自动清理日志
热度:57 发布时间:2023-12-12 17:39:46.0
相关解决方案
- zookeeper3.5 linux安装
- 大数据导论 Apache Zookeeper3.4.6 好好看好好学
- centos7.2环境elasticsearch-5.0.1+kibana-5.0.1+zookeeper3.4.6+kafka_2.9.2-0.8.2.1部署详解
- zookeeper3.4.6配置实现自动清理日志
- Zookeeper3.4.9、Hbase1.3.1、Pig0.16.0安装及配置(基于Hadoop2.7.3集群)
- zookeeper3.5.8 + hadoop3.2.1+Hbase2.2.5完全分布式+高可用(HA)集群
- zookeeper3.6.1客户端指令
- Zookeeper3.6.1常用的Shell命令
- Centos7.4+zookeeper3.5.8 + hadoop3.2.1+Hbase2.2.5完全分布式+高可用(HA)完全分布式集群搭建