赞
踩
ZooKeeper 是一个分布式协调服务,它可以维护配置信息、命名空间、分布式同步等。ZooKeeper 的配置文件通常是 zoo.cfg,这个文件中包含了 ZooKeeper 运行所需要的配置信息。
以下是一些主要的 ZooKeeper 配置参数及其含义:
tickTime:这是 ZooKeeper 中的基本时间单位,以毫秒为单位。这个值会影响到其他很多配置项,比如 session 的过期时间就是由这个值和 maxSessionTimeout 来共同决定的。
dataDir:ZooKeeper 保存数据的目录。这个目录会包含一个名为 version-2 的文件夹,里面保存了所有的事务日志和快照文件。
dataLogDir:这个是 ZooKeeper 保存事务日志的目录,如果配置了这个参数,事务日志就不会保存在 dataDir 中了。
clientPort:客户端连接 ZooKeeper 服务的端口,默认是 2181。
initLimit:这个参数配置了启动 ZooKeeper 服务器与连接到它的 followers 之间的心跳检测频率。这个值是以 tickTime 为单位的。
syncLimit:这个参数配置了 ZooKeeper 服务器与连接到它的 followers 之间同步的频率。这个值也是以 tickTime 为单位的。
maxClientCnxns:这个参数配置了 ZooKeeper 能接受的最大客户端连接数。
minSessionTimeout:这个参数配置了 session 的最小超时时间,这个值是以 tickTime 为单位的。
maxSessionTimeout:这个参数配置了 session 的最大超时时间,这个值也是以 tickTime 为单位的。
server.x=A:B:C:这个是集群模式下配置的,x 是服务器的编号,A 是这个服务器的 IP 地址,B 是这个服务器与其他 ZooKeeper 服务器通信的端口,C 是这个服务器用来选举 leader 的端口。
以上是 ZooKeeper 配置文件中的一些主要参数,具体配置应根据实际的需要进行调整。具体的配置方式和详细的参数列表可以参考官方文档。
在ZooKeeper中,会话超时的设定是有范围限制的,这个范围是由 tickTime
和 maxSessionTimeout
两个配置参数决定的。
tickTime:这是 ZooKeeper 中的基本时间单位,以毫秒为单位。
maxSessionTimeout:这个参数配置了 session 的最大超时时间,这个值也是以 tickTime
为单位的。默认情况下,这个值是 tickTime
的 20 倍。,它的单位也是毫秒
会话超时的时间不能超过 maxSessionTimeout
的值,也不能低于 tickTime
的 2 倍。这个规则在客户端创建会话并设置超时时间时会被 ZooKeeper 服务器检查并执行。如果客户端请求的会话超时时间超出了这个范围,那么 ZooKeeper 服务器会将其调整到这个范围的边界上。
所以,tickTime
、session
的过期时间以及 maxSessionTimeout
这三者之间的关系可以总结为:session
的过期时间是以 tickTime
为单位的,且其值在 2 * tickTime
到 maxSessionTimeout
这个范围内。
initLimit
和 syncLimit
都是用于在 ZooKeeper 集群中管理服务器之间的交互的参数,但它们的应用场景和用途有所不同:
initLimit:这个参数用于配置 ZooKeeper 服务器启动时,leader 和 follower 之间的初始化连接时间,单位为 tickTime
。当 ZooKeeper 集群启动时,或者当 leader 服务器宕机后,follower 服务器会与新的 leader 服务器建立连接,这个参数就是用来配置这个连接过程的超时时间的。如果在这个超时时间内,follower 服务器不能与 leader 服务器完成连接,那么 follower 服务器会认为这个连接失败。
syncLimit:这个参数用于配置 ZooKeeper 集群运行时,leader 和 follower 之间的正常交互时间,单位也是 tickTime
。这个参数决定了 follower 服务器能容忍的最长的与 leader 服务器的请求响应时间。如果超过这个时间,follower 服务器会认为与 leader 服务器的连接已经断开,然后尝试重新连接或者启动新一轮的 leader 选举。
简单地说,initLimit
是用来配置 follower 服务器在启动或者重新选举 leader 时,与 leader 服务器连接的最长等待时间,而 syncLimit
是用来配置 follower 服务器在正常运行时,与 leader 服务器交互的最长等待时间。
最新解释:
ZooKeeper 在工作时通常有一个领导者(Leader)和多个追随者(Follower),他们需要进行通信以保持同步。initLimit
和 syncLimit
都是用于管理这些通信的参数。
initLimit
* tickTime
这么长的时间内 Follower 没有完成同步,那么它会被丢弃。syncLimit
* tickTime
这么长的时间内没有和 Leader 进行有效交互(例如,接收到 Leader 的心跳消息),那么 Follower 会认为连接已经断开。所以简单来说,initLimit
是在集群初始化或领导者更换时,Follower 连接并同步 Leader 的最长等待时间。而 syncLimit
是在集群正常运行期间,Follower 与 Leader 之间保持联系的最长时间。两者都是以 tickTime
(ZooKeeper 的基本时间单位)为单位计算的。
在 Apache ZooKeeper 的默认配置中,minSessionTimeout
这个参数的默认值并未明确设定。
如果没有显式地设置 minSessionTimeout
,ZooKeeper 将使用 tickTime
的两倍作为会话的最小超时时间。这意味着,如果你没有单独设置 minSessionTimeout
,并且你的 tickTime
是默认的 2000 毫秒,那么 minSessionTimeout
将会是 4000 毫秒。
因此,在设置会话超时时,需要确保它在 minSessionTimeout
(默认为 tickTime
的两倍)和 maxSessionTimeout
之间。如果提供的值超出这个范围,ZooKeeper 服务器将会调整会话超时时间到这个范围的边界值。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。