Zookeeper運作過程會産生大量的事務日志和snapshot鏡像檔案,檔案的目錄是通過
zoo.conf
的
datadir
參數指定的,下面我們就說一下如何清理事務日志和snapshot。
清理的方式有如下三種:
- 一、zookeeper配置自動清理
- 二、使用自定義清理腳本
- 三、使用zkCleanup.sh清理
下面我們一一介紹每種清理方式是如何使用的。
zookeeper配置自動清理
zookeeper在3.4.0版本以後提供了自動清理snapshot和事務日志的功能通過配置 autopurge.snapRetainCount 和 autopurge.purgeInterval 這兩個參數能夠實作定時清理了。這兩個參數都是在zoo.cfg中配置的:
我們使用的zk版本是:3.4.6,是以可以使用自帶的清理功能
autopurge.purgeInterval 這個參數指定了清理頻率,機關是小時,需要填寫一個1或更大的整數,預設是0,表示不開啟自己清理功能。
autopurge.snapRetainCount 這個參數和上面的參數搭配使用,這個參數指定了需要保留的檔案數目。預設是保留3個。
示例:
autopurge.snapRetainCount=60
autopurge.purgeInterval=48
保留48小時内的日志,并且保留60個檔案
ps.但是修改conf需要重新開機服務,生産可能不會考慮重新開機服務是以使用其他方法。
使用自定義清理腳本
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
ps.不用修改配置,不需要重新開機zk叢集,推薦使用
使用zkCleanup.sh清理
這個腳本是使用的zookeeper.jar裡的
org.apache.zookeeper.server.PurgeTxnLog
這個class的main函數清理的,是以需要啟動一個java程序,比shell清理要重一些。
org.apache.zookeeper.server.PurgeTxnLog文檔
sh /usr/local/zookeeper/bin/zkCleanup.sh 資料目錄 -n 20
參數說明
資料目錄: /var/zookeeper 20: 保留快照日志的數量
- 本文作者: 凝雨-Yun
- 本文标題: Zookeeper事務日志和snapshot清理方式
- 本文連結: https://ningyu1.github.io/site/post/89-zookeeper-cleanlog/
- 釋出時間:2018-06-15
-
版權聲明: 本文由 凝雨-Yun 原創,采用知識共享署名-相同方式共享 4.0 國際許可協定進行許可。
轉載請保留以上聲明資訊!