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
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