[已解决] ZooKeeper报错 KeeperErrorCode = ConnectionLoss

首先排查:

1、虚拟机防火墙是否关闭

2、Windows防火墙是否关闭

3、ZooKeeper版本是否与pom文件依赖版本一致

4、增大sessionTimeout参数的值(ZooKeeper对象第二个参数)

上述问题排查完毕再往下看:


ZooKeeper版本:3.5.7

Java版本:JDK1.8

对应pom依赖:

<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.5.7</version>
</dependency>

Java代码:

ZooKeeper zk = new ZooKeeper("192.168.10.131:2181,192.168.10.132:2181,192.168.10.133:2181", 2000, watchedEvent -> {});
zk.create("/test", "hello".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

产生错误:

java.net.SocketException: Socket is not connected
...
org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /test

错误产生原因:虚拟机配置了hosts映射,Windows没有配置

ZooKeeper配置:

server.1=zk1:2888:3888
server.2=zk2:2888:3888
server.3=zk3:2888:3888

因此Windows运行Java代码连接ZooKeeper也要配置hosts映射。

hosts文件位置:C:\Windows\System32\drivers\etc\hosts(请调整为实际IP地址)

192.168.10.131    zk1
192.168.10.132    zk2
192.168.10.133    zk3

配置完成后再次运行Java代码,正常运行。

 

posted @ 2023-02-10 09:23  御简  阅读(3727)  评论(0编辑  收藏  举报