RICH-ATONE

zkCleanup.sh工具解决zk占据磁盘过多问题

公司测试环境服务器用户主目录磁盘空间使用率100%,主目录下使用命令:du -h --max-dept=1 |sort -rh |head -n 10,查看占据磁盘最多的目录或文件,发现zookeeper目录占了150G,再细看,zk快照数据占了150G。
据资料显示,zk每次快照都是将内存数据全量进行快照,因此,“历史”快照可删除,删除方法如下。

 

 snapshot保存的是内存快照,可以理解为版本号,保留近10个或者5个都是可以的

方法一,手动清理:

./zkCleanup.sh 参数1 -n 参数2。其中:
	参数1,zk data目录,即zoo.cfg文件中dataDir值
	参数2,保存最近的多少个快照      
示例:zkCleanup.sh -n 10

  

方法二,自动清理:

	zoo.cfg配置文件中添加如下两个参数:
		autopurge.purgeInterval=3
				该参数单位为小时
	autopurge.snapRetainCount=3
	这样,zk会周期性的清理过期的快照。

  注:更改配置文件后,需要重启zk

方法三,使用自定义删除文件清除:

clean_zook_log.sh脚本内容如下:

#!/bin/bash
            
#snapshot file dir
dataDir=/var/zookeeper/version-2
#tran log dir
dataLogDir=/var/zookeeper/version-2
logDir=/usr/local/zookeeper/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点?或者其他时间执行即可。

 
crontab -e 2 2 * * * /bin/bash /usr/local/zookeeper/bin/clean_zook_log.sh > /dev/null 2>&1

  

参考:

面试中遇到的 ZooKeeper 问题 (全,重要)

Zookeeper事务日志和snapshot清理方式

zkCleanup.sh清理zookeeper事务日志(log)文件和快照(snapshot)文件

https://blog.csdn.net/njuptcyd/article/details/90083795

posted on 2022-06-20 19:09  RICH-ATONE  阅读(1588)  评论(0编辑  收藏  举报

导航