周末的時(shí)候在家收到了工作的告警通知,遠(yuǎn)程登錄后發(fā)現(xiàn)是自運(yùn)維的CK集群硬盤(pán)空間不足,通過(guò)命令查看各個(gè)目錄的大小,確定是Zookeeper的日志及snapshot占用了絕大部分空間。
Zookeeper主要存放了兩類(lèi)文件,snapshot和log,前者是內(nèi)存數(shù)據(jù)的快照,后者是記錄修改數(shù)據(jù)相關(guān)的操作記錄,類(lèi)似于mysql的binlog。
正常的運(yùn)行過(guò)程中,zk會(huì)不斷的將快照數(shù)據(jù)和日志記錄輸出到這兩個(gè)目錄,并且zk不會(huì)自動(dòng)清理這些文件,所以需要我們手動(dòng)清理。清理的腳本如下:
#! /bin/bash
# snapshot目錄
snapshotDir=xxxx
#log目錄
dataLogDir=xxxx
logDir=xxxx
#保留文件數(shù)量
leftFileNum=10
#刪除
ls -t $snapshotDir/snapshot.* | tail -n +$leftFileNum | xargs rm -f
ls -t $dataLogDir/log.* | tail -n +$leftFileNum | xargs rm -f
ls -t $logDir/zookeeper.log.* | tail -n +$leftFileNum | xargs rm -f
從3.4.0開(kāi)始,zookeeper提供了自動(dòng)清理snapshotlog的功能,在zoo.cfg文件中配置如下參數(shù):
# 指定保留文件數(shù)量
autopurge.snapRetainCount=10
# 指定清理頻率,單位是小時(shí),默認(rèn)0,表示不開(kāi)啟
autopurge.purgeInterval=12