zoo.cfg 里几个参数最常被问:tickTime、会话超时、maxClientCnxns、initLimit / syncLimit。这篇不抄文档,每个都起一个实例,用四字命令 conf 和 cons 看它实际生效的值,并试一试写错参数名会怎样。
tickTime = 2000 minSessionTimeout = 4000 maxSessionTimeout = 40000 maxClientCnxns = 60 clientPort = 7300 (单机模式的 conf 输出里没有 initLimit / syncLimit,它们只对集群起作用,见第三节的集群 conf)
tickTime=1000 minSessionTimeout=2000 maxSessionTimeout=20000 客户端请求 500 ms → 服务端协商为 2000 ms 客户端请求 2000 ms → 服务端协商为 2000 ms 客户端请求 8000 ms → 服务端协商为 8000 ms 客户端请求 60000 ms → 服务端协商为 20000 ms
在客户端库里设置的「会话超时」只是一个请求值。想知道真正生效的值,要看服务端:四字命令 cons 里每个连接的 to=。
conf → {'tickTime': '500', 'minSessionTimeout': '1000', 'maxSessionTimeout': '3000', 'maxClientCnxns': '2'}
请求 20000 ms → 协商为 3000 ms
maxClientCnxns=2:同一个 IP 已有 2 个连接时,第 3 个客户端 → KazooTimeoutError
此时再发四字命令 cons(也是一个连接)→ '' (空,也被拒绝)
集群节点的 conf → {'tickTime': '2000', 'initLimit': '3', 'syncLimit': '2'}maxClientCnxns 是按客户端 IP 统计的并发连接数上限。注意:监控脚本用四字命令也会占用名额,上限设得很小时,监控自己会被拒绝。
启动成功: standalone | conf 里的 tickTime = 2000 (没有变成 1000) 日志里提到 tickTim 的行数: 0 []
改完配置后,务必用 conf 命令确认值真的变了,不要只看进程启动成功。