zookeeper 配置说明

前言

在上一篇,我们讲解了zookeeper单机伪集群的配置方式,本篇我们着重介绍zookeeper的各种配置,弄清楚每个配置项的具体含义,这对我们后期优化是大有裨益的。

常用配置

1. tickTime
zk使用的基本时间单位(毫秒),是client与服务器之间以及服务器各节点之间TCP心跳链路保活间隔时间,
默认client与服务器最小会话时间是tickTime的两倍。
例如:tickTime=2000,那么默认最小会话时间则是4秒。

2. dataDir
用于存储内存数据库快照文件的位置,除非特别配置说明,事务日志也会被存储到这个目录。

3. dataLogDir
事务日志存储目录,如果未指定则存储在dataDir目录。

4. clientPort
监听客户端连接的端口

5. initLimit(单位:tickTime)
Amount of time, in ticks (see tickTime), to allow followers to connect and sync to a leader.
Increased this value as needed, if the amount of data managed by ZooKeeper is large.
例如:tickTime=2000,initLimit=5; 那么超时时间是10秒。

6. syncLimit(单位:tickTime)
Amount of time, in ticks (see tickTime), to allow followers to sync with ZooKeeper.
If followers fall too far behind a leader, they will be dropped.
例如:tickTime=2000,syncLimit=2; 那么超时时间是4秒

7. maxClientCnxns
client连接该服务器的最大TCP连接数,设置为0表示不限制,默认是60。

8. preAllocSize
设置单个事务日志文件的大小(单位:KB),默认是64M。

9. snapCount
设置每个事务日志文件存放日志的条数,默认是10000。

10. autopurge.purgeInterval
自动清除dataDir目录下文件快照的时间间隔(单位:小时),0表示禁用自动清除功能,
默认是0(禁用)

11. autopurge.snapRetainCount
当启用自动清除快照文件功能时,在dataDir快照目录下,保留的快照个数,
默认是3。

12. minSessionTimeout
当client与zk服务器建立连接时,要协商会话的超时时间,
minSessionTimeout用于约定协商的最小会话时间(即:当客户端传的会话时间小于此时间时,协商的会话时间则以minSessionTimeout为准)
默认是tickTime的2倍。

13. maxSessionTimeout
与minSessionTimeout类似,限制会话时间的上限。
用于约定协商的最大会话时间(即:当客户端传的会话时间大于此时间时,协商的会话时间则以maxSessionTimeout为准)
默认是tickTime的20倍。

14. globalOutstandingLimit
为了防止zk服务器由于排队的请求过多而耗尽内存,用于限制请求队列的长度,
默认为1000。

15. leaderServes
leader节点是否支持client连接提供服务,yes表示允许,no表示不对外服务
仅协调各follower,observer节点;默认是yes。

16. syncEnabled
是否启用observer节点保存事务日志及快照文件到磁盘。
启用的好处:当observer节点宕机重启时,节点数据能够快速的追上leader,follower节点,缩短重启的时间
默认值为true。

17. server.A=ip:port1:port2
A:zk服务器编号,存放在dataDir据目录下的myid文件中
ip:zk服务器访问ip
port1:follower节点与leader节点信息交换时所用的端口
port2:各follower节点进行选举通信时所用的端口
例如:
server.1=192.168.0.100:2888:3888
server.2=192.168.0.101:2888:3888
server.3=192.168.0.102:2888:3888

分层仲裁

分层仲裁,基本思想非常简单,首先,将所有的zk服务进行分组,然后给每个组设置一个编号,再为每个zk服务器分配权重weight。

1. group.x=nnnnn[:nnnnn] x:分组编号,zk服务节点编号1,zk服务节点编2...
2. weight.x=nnnnn x:zk服务节点编号,nnnnn:权重

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

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

权重为0的服务不参与仲裁,在这个示例中,集群启动的时候,一旦我们从非零权重组里获得大多数投票,我们就能够形成一个仲裁。

参考链接

  1. http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
  2. http://zookeeper.majunwei.com/document/3.4.8/GettingStarted.html
  3. http://zookeeper.apache.org/doc/current/zookeeperStarted.html
  4. http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_configuration