2.1.1 ZooKeeper的核心配置文件
ZooKeeper的核心配置文件是在其conf目录下的zoo.cfg文件。需要注意的是,在默认的情况下是没有这个文件的,需要根据ZooKeeper的Sample文件生成这个文件。
下面我们对这个文件中的配置参数进行相应的说明,以方便后续的配置。下面列出了这个文件的内容。
其中每个参数的具体含义如下。
(1)tickTime。
tickTime是ZooKeeper中的一个时间单元。ZooKeeper中的所有时间都是以这个时间单元为基础进行整数倍配置的。例如,session的最小超时时间是2×tickTime。
(2)initLimit。
Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。Leader允许Follower在initLimit时间内完成这个工作。在通常情况下,我们不用太在意这个参数的设置。如果ZooKeeper集群的数据量确实很大,Follower在启动的时候,从Leader上同步数据的时间也会相应变长,因此在这种情况下,有必要适当调大这个参数。
(3)syncLimit。
在运行过程中,Leader负责与ZooKeeper集群中的所有机器进行通信,例如,通过一些心跳检测机制来检测机器的存活状态。如果Leader在syncLimit之后发出心跳包,还没有从Follower收到响应,那么就认为这个Follower已经不在线了。注意,不要把这个参数设置得过大,否则可能会掩盖一些问题。
(4)dataDir。
dataDir是ZooKeeper存储快照文件snapshot的目录。在默认情况下,事务日志也会存储在这里。建议同时配置参数dataLogDir,事务日志的写性能直接影响ZooKeeper性能。可以把这个参数所指向的目录理解为ZooKeeper存储数据的目录。注意,这个参数的默认值是/tmp目录,所以在生产环境中,一定要修改这个参数的值。
(5)clientPort。
clientPort是客户端连接ZooKeeper Server的端口,对外服务器端口一般将其设置为2181。
(6)maxClientCnxns。
maxClientCnxns是单个客户端与单台服务器之间的连接数的限制,是IP级别的,默认是60,如果将其设置为0,那么表明不做任何限制。注意这个限制的使用范围,仅仅是单台客户端机器与单台ZooKeeper服务器之间的连接数限制,不是针对指定客户端IP,不是ZooKeeper集群的连接数限制,也不是单台ZooKeeper对所有客户端的连接数限制。
(7)autopurge.snapRetainCount。
这个参数指定了需要ZooKeeper保留的文件数目,默认保留3个。
(8)autopurge.purgeInterval。
从ZooKeeper 3.4.0及之后版本,ZooKeeper提供了自动清理事务日志和快照文件的功能,这个参数指定了清理频率,单位是小时,需要设置为1或更大的整数,默认值是0,表示不开启自动清理功能。
除了上面的配置参数,ZooKeeper还有一些扩展参数,下面列举出来这些扩展的参数,以及它们的含义。
(1)globalOutstandingLimit。
这个参数默认值是1000。如果有大量的client,不仅会造成ZooKeeper Server对请求的处理速度小于client的提交请求的速度,还会造成服务器端大量请求queue滞留而导致内存溢出,此参数能够控制server最大持有未处理请求的个数。
(2)preAllocSize。
为了避免大量磁盘检索,ZooKeeper对log文件进行空间预分配,默认为64MB。每当剩余空间小于4KB时,将会再次“预分配”。
(3)snapCount。
snapCount的默认值为100 000,在新增的log条数达到snapCount/2 + Random.nextInt(snapCount/2)时,将会对ZooKeeper中存储的数据执行快照,将内存中DataTree反序为快照文件数据,同时log计数置为0,以此循环。在执行快照的过程中,同时也伴随log的新文件创建。snapCount参数让每个server创建快照的时机随时可控,避免所有server同时创建快照。
(4)traceFile。
traceFile用于请求跟踪文件,如果设置了此参数,所有请求将会被记录在traceFile文件中。这个参数的配置会带来一定的性能问题。
(5)ClientPortAddress。
这个参数是ZooKeeper 3.3.0以后引入的参数,用于指定侦听clientPort的地址。此参数是可选的,默认clientPort会绑定到所有IP上,在物理server具有多个网络接口时,可以设置特定的IP。
(6)minSessionTimeout。
minSessionTimeout是ZooKeeper 3.3.0中引入的新参数,其默认值是2×tickTime,也是server允许的会话超时最小值,如果设置的值过小,将会采用默认值。
(7)maxSessionTimeout。
maxSessionTimeout是ZooKeeper 3.3.0中引入的新参数,其默认值是20×tickTime,也是server允许的会话超时最大值。