Zookeeper不断提示连接被拒绝问题解决

问题描述

zookeeper启动后,查看zookeeper.out文件提示连接被拒,每次都是秒断,日志不断刷新。

2019-03-20 18:50:36,190 [myid:] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@197] - Accepted socket connection from /127.0.0.1:45886
2019-03-20 18:50:36,191 [myid:] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:ZooKeeperServer@812] - Refusing session request for client /127.0.0.1:45886 as it has seen zxid 0x9 our last zxid is 0x0 client
 must try another server
1
2
3

软件版本和环境

  • jdk:1.8
  • zookeeper:3.4.5
  • dobbo:2.5.8 其中zookeeper为单节点。

原因分析

由于新起的zk拥有比其他server大的zxid,会被认为是最新的内容。但集群策略不允许新加入的server拥有最新的内容。所以一直踢掉该连接。删除dataDir目录会导致这个问题。

问题重现

  • 启动zookeeper
sh bin/zkServer.sh start
1
  • 让一个应用连接到zookeeper,这里使用dubbo-monitor作为测试应用,可以从dubbo中下载
sh bin/start.sh
1
  • 关闭zookeeper
sh bin/zkServer.sh stop
1
  • 删除zookeeper目录,该目录在zoo.cfg中配置的dataDir,该目录存在了zookeeper的数据。
  • 重新启动zookeeper
  • 查看日志,发现日志出现问题描述中的提示。

问题解决

重启zookeeper后,重启所有连接到zookeeper中的所有java应用。

总结

通过问题重现以及zookeeper的配置文件,发现dataDir目录使用的是默认的目录:/tmp/zookeeper,这个目录可能在重启后被删除,导致在重启zookeeper后出现上述问题。

该问题更加详细的描述可以参考:ZOOKEEPER-832

上次更新: 3 个月前