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

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

软件版本和环境

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

原因分析

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

问题重现

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

问题解决

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

总结

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

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


   转载规则


《Zookeeper不断提示连接被拒绝问题解决》 孤独如梦 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
分布式系统所带来的技术问题 分布式系统所带来的技术问题
前言如果要把一个单体应用变成一个分布式系统,或者构建一个分布式系统需要用到哪些技术呢?下面介绍的框架都是开源的框架。 分布式服务框架作为分布式系统,首先需要让各系统或服务之前互相通信,必须要有一个分布式服务框架。各个服务可以感知对方在哪里,
2019-06-06
下一篇 
spring boot配置druid数据库密码加密 spring boot配置druid数据库密码加密
前言本文主要介绍如何在spring boot中配置druid中数据库密码加密。 1. 引入druid的包 <dependency> <groupId>com.alibaba</groupId>
2019-06-06
  目录