出现该异常主要从以下几个方面排查
- 1.是否存在超时问题
- 2.防火墙是否开放了对应的端口
1.是否存在超时问题
Watcher watcher = new Watcher() {
public void process(WatchedEvent watchedEvent) {
System.out.println("监听了" + watchedEvent.getPath());
}
};
// 1.创建zookeeper连接
ZooKeeper zk = null;
zk = new ZooKeeper("118.190.96.11:2181", 30000,watcher);
System.out.println("获得连接:" + zk);
上述代码块中创造zookeeper实例的时候,在构造函数中的第二个参数是指定sessionTimeout的值,过小会导致出现超时问题,尽量设置大一点,超时问题就解决了。设置多少合适呢?
首先进入到服务器zookeeper安装路径下的bin目录下,然后输入命令:
zkCli.sh -server 118.190.96.11:2181
会得到以下信息
文章图片
其中最重要的是:
Session establishment complete on server 118.190.96.11/118.190.96.11:2181, sessionid = 0x1000ee82130000a, negotiated timeout = 30000
可知zookeeper创建客户端默认的超时时间就是30000ms。我们使用默认的超时时间即可。
2.防火墙是否开放了对应的端口 首先要说明的是云服务器中配置的安全组并不是为防火墙开放了该端口,仍然需要自己配置。
zookeeper默认的端口是2181。所以我们看看防火墙是否开放了2181端口,输入命令
firewall-cmd --list-ports
文章图片
这里面我已经配置过了。所以有2181这个端口。
配置过程如下
a.开放2181端口:
firewall-cmd --zone=public --add-port=2181/tcp --permanent
文章图片
警告内容可忽略,因为配置过所以有这个提示。
b. 重启防火墙使上面的配置生效:
systemctl reload firewalld
文章图片
代表重启成功。
c. 再次查看防火墙开放的端口。
【zookeeper使用IDEA测试API出现KeeperException$ConnectionLossException解决思路】IDEA运行后的截图
文章图片
推荐阅读
- 分布式集群|一起进阶学习JAVA(Zookeeper)
- zookeeper|zookeeper的简单例子带你认识zk的API
- Zookeeper集群与Curator客户端
- zookeeper|Zookeeper案例
- Java|乐观锁和悲观锁在zookeeper中的应用
- 拜占庭将军-分布式领域的幽灵
- java|应用 | Redis实现 主从,单例,集群,哨兵,配置应用
- spring-boot|zookeeper与grpc集成实现服务注册与发现
- zookeeper 启动报错 : KeeperErrorCode = NoNode for /XXX