zookeeper学习、配置文件参数详解
- zookeeper 配置文件参数详解
- tickTime 、session 的过期时间、maxSessionTimeout 三者之间的关系
- initLimit,syncLimit什么区别
- minSessionTimeout 默认值,**他的单位是ms**
zookeeper 配置文件参数详解
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 配置文件中的一些主要参数,具体配置应根据实际的需要进行调整。具体的配置方式和详细的参数列表可以参考官方文档。
tickTime 、session 的过期时间、maxSessionTimeout 三者之间的关系
在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什么区别
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:这个参数主要用于 ZooKeeper 集群启动时或者领导者(Leader)崩溃后重新选举时,Follower 服务器与新的 Leader 服务器之间的初始化和同步连接的时间。可以理解为它定义了集群成员连接到新的领导者并同步所有最新数据的最长时间。如果在
initLimit
*tickTime
这么长的时间内 Follower 没有完成同步,那么它会被丢弃。 - syncLimit:这个参数主要用于运行中的 ZooKeeper 集群,定义了 Leader 和 Follower 之间发送消息、请求和应答的最长时间。如果 Follower 在
syncLimit
*tickTime
这么长的时间内没有和 Leader 进行有效交互(例如,接收到 Leader 的心跳消息),那么 Follower 会认为连接已经断开。
所以简单来说,initLimit
是在集群初始化或领导者更换时,Follower 连接并同步 Leader 的最长等待时间。而 syncLimit
是在集群正常运行期间,Follower 与 Leader 之间保持联系的最长时间。两者都是以 tickTime
(ZooKeeper 的基本时间单位)为单位计算的。
minSessionTimeout 默认值,他的单位是ms
在 Apache ZooKeeper 的默认配置中,minSessionTimeout
这个参数的默认值并未明确设定。
如果没有显式地设置 minSessionTimeout
,ZooKeeper 将使用 tickTime
的两倍作为会话的最小超时时间。这意味着,如果你没有单独设置 minSessionTimeout
,并且你的 tickTime
是默认的 2000 毫秒,那么 minSessionTimeout
将会是 4000 毫秒。
因此,在设置会话超时时,需要确保它在 minSessionTimeout
(默认为 tickTime
的两倍)和 maxSessionTimeout
之间。如果提供的值超出这个范围,ZooKeeper 服务器将会调整会话超时时间到这个范围的边界值。