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清理方式posted on 2022-06-20 19:09 RICH-ATONE 阅读(1588) 评论(0) 编辑 收藏 举报