Zookeeper自动清除不起作用

fag*_*ani 9 apache-zookeeper

在开发阶段使用zookeeper大约6个月后,虽然它工作正常,但其数据目录的大小增长到6 GIG!而且还在增加.下面列出了一些系统规范:

zookeeper版本:3.4.6
客户端数量:<10
个znode数量:<400
还...
dataDir/version-2中
有90个log.*文件,dataDir/version-2 中没有快照.*文件!

通过谷歌搜索此问题我在页面的高级配置部分找到了自动清除选项ZooKeeper Administrator's Guide.然后我使用以下conifguration(zoo.cfg)将zookeeper输出:

tickTime = 2000
dataDir =/home/faghani/software/zookeeper/zkdata
clientPort = 2181
authProvider.1 = org.apache.zookeeper.server.auth.SASLAuthenticationProvider requireClientAuthScheme = sasl
autopurge.snapRetainCount = 3
autopurge.purgeInterval = 1

但是,即使purgeInterval多次到期也没有发生任何变化,即仍然是zookeeper数据目录的大小是6G并且没有删除任何文件.这是一个ls -laht${dataDir}/version-2.这里有一个奇怪的地方,Nautilus说数据目录的大小是6G,但ls -laht它说只有3.4G!

faghani@node255:~/software/zookeeper/zkdata/version-2$ ls -laht  
total 3.4G  
-rw-rw-r-- 1 faghani faghani  65M Dec 20 10:09 log.1061d  
drwx------ 2 faghani faghani 4.0K Dec 20 10:09 .  
-rw-rw-r-- 1 faghani faghani  65M Dec 19 17:28 log.105f2  
-rw-rw-r-- 1 faghani faghani  65M Dec 15 18:37 log.105c1  
-rw-rw-r-- 1 faghani faghani  65M Dec 14 16:17 log.105bc  
-rw-rw-r-- 1 faghani faghani  65M Dec  9 18:08 log.10576  
drwx------ 3 faghani faghani 4.0K Dec  9 16:57 ..    
-rw-rw-r-- 1 faghani faghani  65M Dec  9 16:56 log.10565
-rw-rw-r-- 1 faghani faghani  65M Dec  8 18:31 log.1048c
and many more until ...  
-rw------- 1 faghani faghani  65M Sep  2 16:41 log.1d03  
Run Code Online (Sandbox Code Playgroud)

此外,以下命令(如" 维护"部分中所述)对数据目录中的文件没有任何影响.

java -cp zookeeper.jar:lib/slf4j-api-1.7.5.jar:lib/slf4j-log4j12-1.7.5.jar:lib/log4j-1.2.16.jar:conf org.apache.zookeeper.server.PurgeTxnLog <dataDir> <snapDir> -n <count>
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我发现了这个问题,但遗憾的是在该页面中没有解决方案.

问题:

1-快照.*文件在哪里?
2-如果SASL设置可能会妨碍自动清除?(我认为没有)
3-配置出了什么问题?

编辑:似乎解决方案是围绕snapCount属性.此属性的默认值为100000,只需将其减小到非常小的数字,例如10,然后测试系统.

gar*_*ary 5

您可以使用源文件夹(子文件夹)内的zkCleanup.sh脚本。./bin如果您找不到它,您可以在这里找到它。该脚本的用法:

zkCleanup.sh <snapshotDir> -n <count>
for example:
# ./zkCleanup.sh /tmp/zookeeper -n 6 
Run Code Online (Sandbox Code Playgroud)

<snapshotDir>是zookeeper快照文件位置,就我而言,我的快照文件位于文件夹中/tmp/zookeeper/version-2/

<count>是保留的日志和快照文件数量,其值<count>通常应大于3。

有关更多详细信息,您可以参考此文档:正在进行的数据目录清理

这可以作为 ZooKeeper 服务器计算机上的 cron 作业运行,以每天清理日志。就我而言,我每周清理一次:

0 7 * * 0 ( cd /root/otter/zookeeper/zookeeper-3.4.10/bin && ./zkCleanup.sh /tmp/zookeeper -n 5 ) >> /tmp/zookeeper/cron.log 2>&1
Run Code Online (Sandbox Code Playgroud)

您可以添加此功能,crontab -e但请记住根据您的要求更改频率。


小智 0

如果您的问题与使用 Solr 运行 ZK 直接相关,那么阅读 Solr 邮件列表中的以下电子邮件链将会很有用:Auto purge for ZK transaction log in Solr

简而言之,Solr 嵌入了 ZK,通过它们自己的运行SolrZKServer,但没有考虑到autopurge.snapRetainCount=3autopurge.purgeInterval=1