ZooKeeper服务器在启动时从一个名为zoo.cfg的配置文件读取所有选项,多个服务器如果角色相似,同时基本配置信息一样,就可以共享一个文件。data目录下的myid文件用于区分各个服务器,对每个服务器来说,data目录必须时唯一的,因此这个目录可以更加方便地保存一些差异化文件。服务器ID将myid文件作为一个索引引入到配置文件中,一个特定的ZooKeeper服务器可以知道如何配置自己参数。
客户端所连接的服务器所监听的TCP端口,默认情况下,服务端会监听在所有的网络连接接口的这个端口上,除非设置了clientPortAddress参数。客户端口可以设置为任何值。不同的服务器也可以监听在不同的端口上。默认端口2181
dataDir用于配置内存数据库保存的模糊快照的目录,如果某个服务器为集群中的一台,id文件也保存在该目录下。dataDir并不需要配置到一个专用存储设备上,快照将会以后台线程的方式写入。且并不会锁定数据库,而且快照的写入方式并不是同步方式,直到写完整快照为止。
事务日志对该目录所处的存储设备上的其他活动更加敏感,服务端会尝试进行顺序写入事务日志,以为服务端在确认一个事务前必须将数据同步到存储中,该设备的其他活动(尤其时快照的写入)可能导致同步时磁盘过于忙碌,从而影响写入的吞吐能力。因此,最佳实践时使用专用的日志存储设备,将dataLogDir的目录配置指向该设备。
tick的时长单位为毫秒,tick为ZooKeeper使用的基本的时间度量单位。ZooKeeper集群中使用的超时时间单位通过tickTime指定,也就是说,实际上tickTime设置了超时时间的下限值,因为最小的超时时间为一个tick时间,客户端最小会话超时事件为两个tick时间。
tickTime的默认值为3000毫秒,更低的tickTime值可以更快的发现超时问题,但也会导致更高的网络流量和更高的CPU使用率。
讲解一些更高级的配置参数,这些参数不仅适用于独立模式的服务,也适用于集群模式下的配置
用于设置预分配的事务日志文件(zookeeper.preAllocSize)的大小之,以KB为单位。当写入事务日志文件时,服务端每次会分配preAllocSize的存储大小,通过这种方式可以分摊文件系统将磁盘分配存储空间和更新元数据的开销。更重要的是,该方式也减少了文件寻址操作的次数。
默认情况下preAllocSize的值为64MB,缩小该值的一个原因是事务日志永远不会达到这么大,因为每次快照后都会重新启动一个新的事务日志,如果每次快照直接的日志数量很小,而且每个事务本身也很小,64MB的默认值显然就太大了。例如,如果我们每1000个事务进行一次快照,每个事务的平均大小为100字节,那么100KB的preAllocSize值则更加合适。默认的preAllocSize设置适用于默认的snapCount值和平均事务超过512字节的情况
指定每次快照之间的事务数(zookeeper.snapCount)。当ZooKeeper服务器重启后需要回复其状态,恢复时两大时间因素分别是为恢复状态而读取快照的时间以及快照启动后所发生的事务的执行时间。执行快照可以减少读入快照文件后需要应用的事务数量,但是进行快照时也会影响服务器性能,即便是通过后台线程的方式进行写入操作。
sanpCount的默认值为100000,因为进行快照时会影响性能,所以集群中所有服务器最好不要在同一时间进行快照操作,只要仲裁服务器不会一同进行快照,处理时间就不会受影响,因此每次快照中实际的事务数为一个接近sanpCout值的随机数。
当进行清理数据操作时,需要保留在快照数量和对应的事务日志文件数量。ZooKeeper将会定期对快照和事务日志进行垃圾回收操作,autopurfe.snapRetainCount值指定了垃圾回收时需要保留的快照数,显然,并不是所有的快照都可以被删除,因为那样就不可能进行服务器的回复操作。最小值为3,也就是默认值的大小
对快照和日志进行垃圾回收操作的时间间隔的小时数。如果设置为一个非0的数字,autopurge.purgeInterval指定了垃圾回收周期的时间间隔。如果设置为0,默认情况下,垃圾回收不会自动执行,而需要通过ZooKeeper发行包中的zkCleanup.sh脚本手动运行。
触发警告的存储同步时间阈值,以毫秒为单位。ZooKeeper服务器在应答变化消息前会同步变化情况到存储中。如果同步系统调用消耗了太长时间。系统性能就会受到严重影响。服务器会跟踪同步调用的持续时间,如果fsync.warningthresholdms只会产生一个警告信息。默认情况下该值为1000毫秒。
该选项常常以一组参数进行配置,该选项指定组成一个仲裁机构的某个服务器的权重为n,其权重n值指示了该服务器在进行投票时的权重值。在ZooKeeper中一些部件需要投票值,比如群首选举中和原子广播协议中。默认情况下,一个服务器的权重值为1,如果定义的一组服务器没有权重值,所有服务器的权重值默认为1.
持续跟踪ZooKeeper的操作,并将操作记录到跟踪日志中,跟踪日志的文件名为traceFile.year.month.day。除非设置了该选项(requestTraceFile),否则跟踪功能将不会启用。
该选项用来提供ZooKeeper所进行的操作的详细视图,不过,想要记录这些日志。ZooKeeper服务器必须进行序列化操作,并将操作写入磁盘,这将争用CPU和磁盘的时间,如果使用该选项,请确保不要将跟踪文件放到日志文件的存储设备中。