启动Zookeeper只是开始,灵活配置才是关键,留着查阅。

Zookeeper参数配置说明

参数名 必须配置 默认值 说明
clientPort 用于配置当前服务器对外的服务端口,不支持系统属性方式配置。
客户端会通过该端口和ZK服务器创建连接,一般设置为2181。
每台ZK服务器都可以配置任意可用的端口,
同时,集群中的所有服务器不需要保持该端口一致。
dataDir 用于配置ZK服务器存储快照文件的目录。
不支持系统属性方式配。
默认情况下,如果没有配置参数dataLogDir,
那么事务日志也会存在这个目录中。
考虑到事务日志的写性能直接影响ZK整体的服务能力,
因此建议同时通过参数 dataLogDir来配置ZK事务日志的存储目录。
tickTime 3000 单位毫秒,用于配置ZK中最小时间单元的长度,
不支持系统属性方式配。
很多运行时的时间间隔都是使用tickTime的倍数来表示的。
dataLogDir dataDir 配置ZK服务器存储事务日志文件的目录。
不支持系统属性方式配。
initLimit 10 默认为tickTime的10倍,需要配置一个正整数。
不支持系统属性方式配。
用于配置 Leader服务器等待 Follower启动,并完成数据同步的时间。
Follower服务器在启动过程中,会与 Leader建立连接
并完成对数据的同步,从而确定自己对外提供服务的起始状态。
Leader服务器允许 Follower在 initlimit时间内完成这个工作。
通常情况下,运维人员不用太在意这个参数的配置,使用其默认值即可。
但如果随着 Zookeeper集群管理的数据量增大,
Follower服务器在启动的时候,从 Leader上进行同步数据的时间
也会相应变长,于是无法在较短的时间完成数据同步。
因此,在这种情况下,有必要适当调大这个参数。
syncLimit 5 该参数有默认值:5,即表示是参数 ticktime值的5倍
且需要配置一个正整数,不支持系统属性方式配。
该参数用于配置 Leader服务器和 Follower之间进行心跳检测的
最大延时时间。在ZK集群运行过程中, Leader 服务器会与所有的
Follower进行心跳检来确定该服务器是否存活。
如果Leader服务器在 synclimit时间内无法获取到 Follower的
心跳检测响应,那么 Leader就会认为该 Follower已经脱离了
和自己的同步。
通常情况下,运维人员使用该参数的默认值即可,
但如果部ZK集群的网络环境质量较低(例加网络延时大
或丢包严重),那么可以适当调大这个参数
snapCount 100000 仅支持系统属性方式配置: zookeeper. snapCount。
参数snapCount用于配置相邻两次数据快照之间的事务操作次数,即ZooKeeper会在snapCount次事务操作之后进行一次数据快照。
preAllocSize 65536 该参数有默认值: 65536,单位是KB,即64MB,
仅支持系统属性方式配置: zookeeper.preAllocSize。
参数preAllocSize用于配置ZooKeeper事务日志文件预分配的磁盘空间大小。通常情况下,我们使用ZooKeeper的默认配置65536KB即可,但是如果我们将参数snapCount 设置得比默认值更小或更大,那么preAllocSize参数也要随之做出变更。举个例子来说:如果我们将snapCount 的值设置为500, 同时预估每次事务操作的数据量大小至多1KB,那么参数preAllocSize设置为500就足够了。
minSessionTimeout
maxSessionTimeout
2
20
这两个参数有默认值,分别是参数tickTime值的2倍和20倍,即默认的会话超时时间在2 * tickTime ~ 20 * tickTime 范围内,单位毫秒,可以不配置,不支持系统属性方式配置。
这两个参数用于服务端对客户端会话的超时时间进行限制,如果客户端设置的超时时间不在该范围内,那么会被服务端强制设置为最大或最小超时时间。
maxClientCnxns 60 该参数有默认值: 60.可以不配置,不支持系统属性方式配置从Socket层面限制单个客户端与单台服务器之间的并发连接数,即以IP地址粒度来进行连接数的限制,如果将该参数设置为0.则表示对连接数不作任何限制。
jute. maxbuffer 1048575 该参数有默认值: 1048575.单位是字节,可以不配置。仅支持系统属性方式配置: jute.maxbuffer,
该参数用于配置单个数据节点(ZNode)上可以存储的最大数据量大小。通常情况下,运维人员不需要改动该参数:同时考虑到ZooKeeper上不适宜存储太多的数据,往往还需要将该参数设置的更小。需要注意的是,在变更该参数的时候,需要在ZooKeeper集群的所有机器以及所有的客户端上均设置才能生效。
clientPortAddress 该参数没有默认值,可以不配置,不支持系统属性方式配置。针对那些多网卡的机器,该参数允许为每个IP地址指定不同的监听端口。
server.id=host:port:port 该参数没有默认值,在单机模式下可以不配置,不支持系统属性方式配置。
该参数用子配置组成ZooKeeper集群的机器列表,其中id即为ServerID), 与每台服务器myid文件中的数字相对应。同时,在该参数中,会配置两个端口,第一个端口用于指定Follower服务器与Leader进行运行时通信和数据同步时所使用的端口,第二个端口则专门用于进行Leader选举过程中的投票通信。在ZooKeeper服务器启动的时候,其会根据myid文件中配置的ServerID来确定自己是哪台服务器,并使用对应配置的端口来进行启动。如果在实际使用过程中,需要在同一台服务器上部署多个ZooKeeper实例来构成伪集群的话,那么这些端口都需要配置成不同,例如:
server.1-192.168.0.12777:3777
server.2 192.168.0.1:2888:3888
server.3=192.168.0. 1:2999:3999
autopurge.snapRetainCount 3 该参数有默认值: 3,可以不配置,不支持系统属性方式配置,从3.4.0版本开始,ZooKeeper 提供了对历史事务日志和快照数据自动清理的支持。参数autopurge . snapRetainCount用于配置ZooKeeper在自动清理的时候需要保留的快照数据文件数量和对应的事务日志文件。需要注意的是,并不是磁盘上的所有事务日志和
快照数据文件都可以被清理掉 那样的话将无法恢复数据。因此参数autopurge. snapRetainCount的最小值是3,如果配置的autopurge. snapRetainCount值比3小的话,那么会被自动调整到3,即至少需要保留3个快照数据文件和对应的事务日志文件。
autopurge.purgeInterval 0 该参数有默认值: 0,单位是小时,可以不配置,不支持系统属性方式配置。参数autopurge.purgeInterval和参数autopurge. snapRetainCount配套使用,用于配置ZooKeeper进行历史文件自动清理的频率。如果配置该值为0或负数,那么就表明不需要开启定时清理功能。Z.ooKeeper 默认不开启这项功能。
fsync. warningthresholdms 1000 该参数有默认值: 1000, 单位是毫秒,可以不配置,仅支持系统属性方式配置: fsync.warningthresholdms。参数fsync . warningthresholdms用于配置ZooKeeper进行事务日志fync操作时消耗时间的报警阈值。一 旦进行一个 fisyn操作消耗的时间大于参数fsync .warningthresholdms指定的值,那么就在日志中打印出报警日志。
forceSync yes 该参数有默认值: yes,可以不配置,可选配置项为”yes”和“no”,仅支持系统属性方式配置: zokeeper.forceSync.该参数用于配置ZooKeeper服务器是否在事务提交的时候,将日志写入操作强制刷入磁盘。默认情况下是”yes”, 即每次事务日志写入操作都会实时刷入磁盘。如果将其设置为“no”,则能一定程度的提高ZooKeeper的写性能,但同时也会存在类似于机器断电这样的安全风险。
globaloutstandingLimit 1000 该参数有默认值: 1000, 可以不配置,仅支持系统属性方式配置:zookeeperglobalOutstandingLimit.参数globa l0utstandingLimit用于配置ZooKeeper服务器最大请求堆积数量。在ZooKeeper服务器运行的过程中,客户端会源源不断的将请求发送到服务端,为了防止服务端资源(包括CPU、内存和网络等)耗尽,服务端必须限制同时处理的请求数,即最大请求堆积数量。
leaderServes yes 该参数有默认值: yes,可以不配置,可选配置项为“yes”和“no”。仅支持系统属性方式配置: zookeerlecaderServes。该参数用于配置Leader服务器是否能够接受客户端的连接,即是否允许Leader向客户端提供服务,默认情况下,Leader服务器能够接受并处理客户端的所有读写请求。在ZooKeeper的架构设计中,Leader服务器主要用来进行对事务更新请求的协调以及集群本身的运行时协调.因此,可以设置让Leader服务器不接受客户端的连接,以使其专注于进行分布式协调。
SkipAcl no 该参数有默认值: no,可以不配置,可选配置项为”yes和“no“。仅支持系统属性方式配置: zookeeper.skipACL。该参数用于配置Zookeeper服务器是否跑过ACL权限检查,默认情况下是”no’”, 即会对每一个客户端请求进行权限检查。如果设置为”yes”, 则能一定程度的提高Zookeeper的数据, 包括那些之前设置过ACL权限的数据节点,也将不再接受权限控制。
cnxTimeout 5000 该参数有默认值:5000,单位是毫秒,可不配置,仅支持系统属性方式配置:zookeeper.cnxTimeout。用于配置在Leader选举过程中,各服务器之间进行TCP连接创建的超时时间。
electionAlg 在之前的版本中,可以用该参数来配置选择ZK进行Leader选举时所使用的的算法,但从3.4.0版本开始,ZK废弃了其他选举算法,只留了FastLeaderElection算法,因此目前无效了。

参考文献

[1] 《从Paxos到Zookeeper分布式一致性原理与实践》