天天看點

Zookeeper事務日志和snapshot清理方式

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 國際許可協定進行許可。

    轉載請保留以上聲明資訊!