zookeeper配置
zoo.cfg
tickTime=2000
zk中Follower与Leader之间进行心跳检测的时间间隔,以毫秒为单位,每隔该时间间隔, Leader将向Follower发送一次心跳检测。
initLimit=10
Follower第一次连接Leader时,zk所能忍受的最大失败连接次数。当值为5时,如果Follower连接Leader的时间超过5*2000ms=10s,那么连接失败。
syncLimit=5
在zk运行过程中,Follower和Leader之间进行心跳检测,所能忍受的最大失败连接次数。
dataDir=/opt/zookeeper/zkdata
快照日志的存储路径
dataLogDir=/opt/zookeeper/zkdatalog
事务日志的存储路径。如果不配置,那么事务日志默认存储到dataDir指定的目录,这样会严重影响zk的性能,当zk吞吐量较大时,产生的快照日志、事务日志太多。
clientPort=2181
客户端连接zk服务器的端口,默认为2181
server
单个zk节点的标识,由IP地址、Leader和Follewer的通信端口、Leader选举端口组成。单个节点时(独立模式下)不需要配置:
server.1=192.168.7.100:12888:13888
server.2=192.168.7.101:12888:13888
server.3=192.168.7.107:12888:13888
server.1中的1用来标识服务器,这个标识要写到快照目录下的myid文件中。通信端口默认为2888,可自行修改。选举端口默认为3888,为集群启动时或者Leader挂掉后进行选举所使用的端口。
maxClientCnxns=60
客户端连接的最大数量
autopurge.snapRetainCount=3
保留在dataDir目录中快照的数量
autopurge.purgeInterval=1
日志的清除间隔时间,以小时为单位。设置为0时,则不开启自动清除功能。
关于日志的清除
zk不会主动的清除就的快照和日志文件,这是操作者的责任。可以有以下几种方法:
方法一:自定义脚本
1 #!/bin/bash 2 3 #snapshot file dir 4 dataDir=/opt/zookeeper/zkdata/version-2 5 #tran log dir 6 dataLogDir=/opt/zookeeper/zkdatalog/version-2 7 8 #Leave 66 files 9 count=66 10 count=$[$count+1] 11 ls -t $dataLogDir/log.* | tail -n +$count | xargs rm -f 12 ls -t $dataDir/snapshot.* | tail -n +$count | xargs rm -f
这个脚本定义了删除对应两个目录中的文件,保留最新的66个文件。可以将它写入到crontab中,定期执行。
方法二:使用ZK的工具类PurgeTxnLog
http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
java -cp zookeeper.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4j12-1.6.1.jar:lib/log4j-1.2.15.jar:conf org.apache.zookeeper.server.PurgeTxnLog <dataDir> <snapDir> -n <count>
方法三:bin/zkCleanup.sh
执行脚本./ bin/zkCleanup.sh,定期执行。
方法四:zoo.cfg配置
从3.4.0开始,zk提供了自动清理snapshot和事务日志的功能。通过配置 autopurge.snapRetainCount和autopurge.purgeInterval这两个参数能够实现定时清理。