在开发阶段使用Zookeeper大约6个月后,虽然它工作正常,但其数据目录的大小增长到6 GIG!并且仍在增加。下面列出了一些系统规格:
动物园管理员版本:3.4.6
客户端数量: <10
Znode数量:<400
也。。。
dataDir/version-2
中有 90 个日志。 dataDir/version-2 中没有快照 * 文件!
通过谷歌搜索此问题,我在ZooKeeper Administrator's Guide
页面的高级配置部分找到了自动清除选项。然后我使用以下针叶(zoo.cfg(将动物园管理员推出:
刻度时间=2000
dataDir=/home/faghani/software/zookeeper/zkdata
客户端端口 = 2181
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider requireClientAuthScheme=sasl
autopurge.snapRetainCount=3
自动清除.清除间隔=1
但是即使purgeInterval
多次过期也没有发生任何变化,即动物园管理员数据目录的大小仍然是6G,没有文件被删除。这是关于${dataDir}/version-2
ls -laht
。这里有一个奇怪的点,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
此外,以下命令(如维护部分中的建议(对数据目录中的文件没有影响。
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>
顺便说一句,我找到了这个问题,但不幸的是,该页面中没有解决方案。
问题:
1- 快照*文件在哪里?
2- 如果 SASL 设置会阻碍自动清除?(我认为没有(
3-配置有问题吗?
编辑:似乎解决方案是围绕snapCount属性的东西。此属性的默认值为 100000,只需将其减小到非常小的数字,例如 10,然后测试系统。
您可以使用源文件夹(./bin
子文件夹(内的 zkCleanup.sh 脚本。如果你找不到它,你可以在这里找到它。此脚本的用法:
zkCleanup.sh <snapshotDir> -n <count>
for example:
# ./zkCleanup.sh /tmp/zookeeper -n 6
<snapshotDir>
是 Zookeeper 快照文件位置,就我而言,我的快照文件位于文件夹 /tmp/zookeeper/version-2/
<count>
是保留的日志和快照文件编号,<count>
的值通常应大于 3。
有关更多详细信息,您可以参考此文档:正在进行的数据目录清理。
这可以作为 cron 作业在 ZooKeeper 服务器机器上运行,以每天清理日志。就我而言,我每周清理一次:
0 7 * * 0 ( cd /root/otter/zookeeper/zookeeper-3.4.10/bin && ./zkCleanup.sh /tmp/zookeeper -n 5 ) >> /tmp/zookeeper/cron.log 2>&1
您可以通过crontab -e
添加它,但请记住根据您的要求更改频率。
如果您的问题与使用 Solr 运行 ZK 直接相关,那么阅读 Solr 邮件列表中的以下电子邮件链会很有用: 在 Solr 中自动清除 ZK 事务日志。
简而言之,Solr已经嵌入了ZK,通过他们自己的SolrZKServer
运行,这既没有考虑到autopurge.snapRetainCount=3
也没有考虑。 autopurge.purgeInterval=1
.
一些有用的信息,运行以下命令对我有用[动物园管理员版本:3.5.5]。参考 https://zookeeper.apache.org/doc/r3.6.1/zookeeperTools.html#zkCleanup
zkCleanup.sh -n 5
zKCleanup 脚本存在于 zookeeper bin 文件夹中。[/阿帕奇动物园管理员-3.5.5-bin/bin]
自动清除变量信息可在以下位置找到:https://zookeeper.apache.org/doc/r3.4.5/zookeeperAdmin.html#sc_advancedConfiguration