zookeeper配置文件详解

时间:2022-02-10 12:22:40

必填配置参数

clientPort

该端口监听客户端的连接。也就是说,客户端都会尝试连接该端口。

dataDir

该路径用于存储zookeeper内存数据库快照。除非有特殊设定,否则也会存储数据库更新的事物日志。事物日志的存放位置是很有讲究的。有一台专门用于存放事物日志的设备,可以产生持久的高性能。讲日志放在高负荷的设备上,会对性能产生副作用。

tickTime

一个心跳的长度,它是zookeeper毫秒级的一个基本时间单位。它用来设定心跳间隔和超时时间。例如,最小会话超时时间是两倍的心跳长度。

可选配置参数

dataLogDir

这个选项指定将事物日志存储于该路径,代替了dataDir。目的是可以用专门的设备来存储日志,这样可以避免日志和快照的资源竞争。有一个专门的日志存储设备,可以导致高的吞吐量和稳定性。我们更推荐使用一台专用日志设备并用dataLogDir在该设备上指定目录来存放日志,这样可以保证dataDir指定的目录不在该设备上(dataDir指定存放快照的目录,快照和日志会竞争资源)。

globalOutstandingLimit(java:zookeeper.globalOutstandingLimit)

客户端提交请求的速度可能会超过zookeeper处理请求的速度,尤其是存在大量的客户端。为了避免由于排队的请求导致的内存溢出,zookeeper将会对客户端进行限流,将请求的数量保持在globalOutstandingLimit以下。globalOutstandingLimit的默认值是1000。

preAllocSize(java:zookeeper.preAllocSize)

zookeeper将事务日志文件分割成preAllocSize kb大小的模块,这样可以避免查询带来的消耗。默认的模块大小是64M。当快照频繁产生时,我们可以肩上模块的大小来提高系统的效率(这段好难翻译,还不知道对不对)。

snapCount(java:zookeeper.snapCount)

zookeeper将所有事务记录到日志中。当记录了snapCount数量的事务后,会生成新的快照和事务日志文件。snapCount默认值是100000。

traceFile(Java:requestTraceFile)

如果使用该选项,我们会将请求记录在追踪文件中,并将其以traceFile.year.month.day格式命名。这个选项可以提供调试信息,但会影响性能。

maxClientCnxns

一个客户端的最大并发连接数(接口级别),每台客户端用IP地址区分,成为zookeeper总体中的一个成员(貌似翻译的不对)。它用来防止某些DoS攻击,包括文件描述符耗尽(不懂-_-||)。默认值是60。将其设定为0,则取消并发连接数的限制。

clientPortAddress

监听客户端连接的地址(ipv4,ipv6,hostname),也就是说,客户端会尝试连接该地址。可选配置,默认情况下,客户端都会连接到clientPort上(address,interface,nic)。

minSessionTimeout

最小会话超时时间(毫秒级),默认是2倍的tickTime。

maxSessionTimeout

最大会话超时时间(毫秒级),默认是20倍的tickTime。(在代码中会设置超时时间,但是必须在这里设定的最小与最大值之间,否则直接取最小/最大值)

fsync.warningthresholdms(java:fsync.warningthresholdms)

当日志中的fsync函数超出了该值的长度,就会在日志出输出警告信息。默认值是1000(毫秒级),是系统属性。

autopurge.snapRetainCount

当启用时,zookeeper将自动储存最近autopurge.snapRetainCount次的快照和事务日志,分别放在dataDir和dataLogDir中,其余部分将被删除。默认值是3,最小值是3。

autopurge.purgeInterval

设置该定时器,能定时触发净化任务(清理快照和日志),单位为小时,值为大于等于1的正整数,默认值是0。

集群选项

electionAlg

作用是实现选举。0是基于UDP的传统版本,1是基于未认证UDP的快速选举版本,2是基于已认证UDP的快速选举版本,3是基于TCP的快速选举版本。默认值是3。(0/1/2已经不建议使用,在下个版本准备取消)

initLimit

在心跳连接中,允许followers连接leader和与leader同步数据的时间。如果zookeeper管理的数据比较大,可以增加此值。

leaderServes(zookeeper.leaderServes)

leader接受客户端的连接。默认值是“yes”。leader主机的坐标更新。要实现使用很少的读取量而达到更高的更新量,leader可以不接受客户端的连接而是只专注于负载的均衡。默认值是“yes”,就是可以接受连接。(当集群中存在3台以上的zookeeper服务端时,推荐使用“no”)

server.x=[hostname]:nnnnn[:nnnnn],etc

配置的服务端组成zookeeper集群。集群启动时,将在配置的服务端上寻找myid文件。该文件包含服务器编号,于server.x中的x值相匹配。

每台zookeeper服务器都持有这个服务器列表,客户端必须根据这个列表进行连接。

配置中还存在两个端口号nnnnn。第一个端口号用于follower连接leader,第二个端口号用于leader的选举。当electionAlg=1,2,3时,选举端口是必要的。当=0时,不是必要的。加入想要在单机上测试集群,可以使用不同端口号来模拟。

syncLimit

在心跳连接中,允许followers同步zookeeper数据的时间。如果followers与leader长久失去连接,它将被丢弃。

group.x=nnnnn[:nnnnn]

实现一个分层的法定人数的构造。“x”是组的标识,“=”后边是服务器的标识。

例:group.2=4:5:6
        group.3=7:8:9

weight.x=nnnnn[:nnnnn]

要与group搭配使用,为服务器设置一个比重。这个比重就是选举投票时一台服务器的比重。group.1=1:2:3

例:weight.1=1
    weight.2=1
    weight.3=1
    weight.4=1
    weight.5=1
    weight.6=1
    weight.7=1
    weight.8=1
    weight.9=1

cnxTimeout

leader选举的超时时间,electionAlg=3时才起作用。默认值是5秒。

原文地址:http://zookeeper.apache.org/doc/r3.4.5/zookeeperAdmin.html