zookeeper Unable to read additional data from server sessionid 0x0

在SpringBoot项目中,使用Dubbo调用时遇到Zookeeper客户端报错:'Unable to read additional data from server sessionid 0x0'。问题原因是单个IP对Zookeeper服务器的连接数达到默认限制(10个)。解决方法包括检查服务器2181端口连接状态,确认配置文件`zoo.cfg`中`maxClientCnxns`参数是否设置,如果未设置或设置过低,可调整至60,并重启服务。

问题描述

项目是springboot 项目,通过dubbo 对各个模块进行调用,在项目启动的时候,zookeeper 客户端报如下错误。

Unable to read additional data from server sessionid 0x0, likely server has closed socket, closing socket connection and attempting reconnect


原因分析:

先进入机器 telnet zookeeper 服务器机器

telnet 10.20.3.31 2181
Trying 10.20.3.31...
Connected to 10.20.3.31.
Escape character is '^]'.
Connection closed by foreign host.

可以看到其实2181 这个端口是通的,但刚连通就被服务器拒绝。
这个是时候换了另外一台机器,telnet zookeeper 主机 端口 发现zookeeper 主机没有被拒绝。

单个客户端与单台服务器之间的连接数的限制,是ip级别的,默认是60,如果设置为0,那么表明不作任何限制。请注意这个限制的使用范围,仅仅是单台客户端机器与单台ZK服务器之间的连接数限制,不是针对指定客户端IP,也不是ZK集群的连接数限制,也不是单台ZK对所有客户端的连接数限制。

  1. 查看服务器2181端口已有连接数
[root@hdfs-10-18-0-31 ~]# netstat -tanp | grep 2181 | awk '{print $5}' | grep -E '([0-9]+\.){3}[0-9]+' -o | sort | uniq -c
11 10.20.3.31

netstat -tanp | grep 2181

查看具体具体应用和状态,发现10个连接是 ESTABLISHED 还有一个是TIME-WAIT 发现只有10个连接
进入 zookeeper conf/zoo.cfg 查看配置,发现 -maxClientCnxns 并未配置,
但配置initLimit=10。那按道理是最大连接应该60才对,还没到达上限
通过下面命令,确实只有10个连接。

cat /proc/net/nf_conntrack | grep 2181 | awk '{print $7}'|sort|uniq -c
10 src=10.20.3.31

netstat -tanp | grep 2181 查看启动进程有哪些,杀掉其中两个进程。
telnet zookeeper 主机 端口 不再被拒绝,重新启动启动失败的服务启动成功。现在可以判定是zookeeper 针对单个ip限制到10个,添加zoo.cfg 配置maxClientCnxns=60

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值