15.2.2 配置ZooKeeper
ZooKeeper的功能特性是通过ZooKeeper配置文件来进行控制管理(zoo.cfg配置文件)的。这样的设计其实有其自身的原因。通过前面对ZooKeeper的配置可以看出,在对ZooKeeper集群进行配置的时候,它的配置文档是完全相同的(对于集群伪分布模式来说,只有很少的部分是不同的)。这样的配置方式使得在部署ZooKeeper服务的时候非常方便。如果服务器使用不同的配置文件,必须要确保不同配置文件中的服务器列表相匹配。
在设置ZooKeeper配置文档的时候,某些参数是可选的,但是某些参数是必需的。这些必需的参数就构成了ZooKeeper配置文档的最低配置要求。另外,如果需要对ZooKeeper进行更详细的配置,大家可以参考下面将要讲述的内容。
1.最低配置
下面是在最低配置要求中必须配置的参数:
1)clientPort:监听客户端连接的端口。
2)dataDir:存储内存中数据库快照的位置。
注意 应该谨慎地选择日志存放的位置,使用专用的日志存储设备能够大大地提高系统的性能,如果将日志存储在比较繁忙的存储设备上,那么将会在很大程度上影响系统的性能。
3)tickTime:基本事件单元,以毫秒为单位,用来控制心跳和超时,默认情况下最小的会话超时时间为两倍的tickTime。
2.高级配置
下面是高级配置要求中可选的配置参数,用户可以使用下面的参数来更好地规定ZooKeeper的行为:
(1)dataLogDir
这个操作让管理机器把事务日志写入“dataLogDir”所指定的目录中,而不是“dataDir”所指定的目录。这将允许使用一个专用的日志设备,并且帮助我们避免日志和快照之间的竞争。配置如下:
the location of the log file
dataLogDir=/root/hadoop-0.20.2/zookeeper-3.4.3/log/data_log
(2)maxClientCnxns
这个操作将限制连接到ZooKeeper的客户端的数量,并且限制并发连接的数量,它通过IP来区分不同的客户端。此配置选项可以用来阻止某些类别的Dos攻击。将它设置为0或忽略而不进行设置将会取消对并发连接的限制。
例如,此时我们将maxClientCnxns的值设置为1,如下所示:
set maxClientCnxns
maxClientCnxns=1
启动ZooKeeper之后,首先用一个客户端连接到ZooKeeper服务器之上。之后如果有第二个客户端尝试对ZooKeeper进行连接,或者有某些隐式的对客户端的连接操作,将会触发ZooKeeper的上述配置。系统会提示相关信息,如图15-2所示。
图 15-2 ZooKeeper maxClientCnxns异常
(3)minSessionTimeout和maxSessionTimeout
即最小的会话超时时间和最大的会话超时时间。在默认情况下,最小的会话超时时间为2倍的tickTme时间,最大的会话超时时间为20倍的会话超时时间。系统启动时会显示相应的信息,如图15-3所示。
图 15-3 默认会话超时时间
从上图中可以看出,minSessionTimeout及maxSessionTimeout的值均为-1。现在我们来设置系统的最小和最大的会话超时时间,如下所示:
set minSessionTimeout
minSessionTimeout=1000
set maxSessionTImeout
maxSessionTimeout=10000
在配置minSessionTmeout及maxSessionTimeout的值时需要注意,如果将此值设置得太小的话,会话很可能刚刚建立便由于超时而不得不退出。一般情况下,不能将此值设置得比tickTime的值还小。
3.集群配置
(1)initLimit
此配置表示,允许follower(相对于leader而言的“客户端”)连接并同步到leader的初始化连接时间,它是以tickTime的倍数来表示的。当初始化连接时间超过设置倍数的tickTime时间时,则连接失败。
(2)syncLimit
此配置表示leader与follower之间发送消息时请求和应答的时间长度。如果follower在设置的时间内不能与leader通信,那么此follower将被丢弃。