项目场景:

连接linux虚拟机(32位centos)上的zookeeper时一直连接不上并报错。


问题描述:

报错信息:
java.lang.IllegalStateException: zookeeper not connected
java.net.ConnectException: Connection refused: no further information


原因分析:

报错信息里面也写的比较明白了:
zookeeper not connected:zookeeper没连上
Connection refused:连接被拒
那到底是为什么没连接上的,个人总结了几种原因:
ip地址或端口号配置错误、不是本机连接zookeeper的话可能是因为防火墙没关、zookeeper没有打开、zookeeper打开了但没有完全打开


解决方案:

1. 查看配置的注册中心ip地址和端口是否正确

<dubbo:registry address="zookeeper://127.0.0.1:2181" />

1.1查看ip地址
Windows系统在cmd窗口输入ipconfig
Linux系统在终端命令窗口输入ifconfig
本机是127.0.0.1

1.2查看zookeeper端口
在rookeeper解压后的目录apache-zookeeper-3.5.6-bin下的conf目录中有一个zoo.cfg文件,打开文件查看,如下2181就是端口号。

 #the port at which the clients will connect
clientPort=2181

2. 如果zookeeper注册中心不在本机,则要查看一下注册中心所在的机器防火墙有没有关闭

Linux查看防火墙状态:service iptables status
Linux关闭防火墙:service iptables stop

3. zookeeper没打开(打开了但没有完全打开)

※打开命令:
Linux系统:./zkServer.sh start
Windows系统:./zkServer.cmd
(注意要在bin目录下执行命令)

※zookeeper启动显示started不一定真正打开了,要去检查一下zookeeper是否打开
※查看状态命令:
Linux系统切入bin目录在终端命令窗口输入./zkServer.sh status
Windows系统在cmd窗口输入netstat -ano查看是否占用2181端口

如图圈起来的地方是端口号
※如果明明执行了zkServer.sh/zkServer.cmd查看状态却显示没有开启,则要检查一下logs目录下的日志信息,根据报错继续检查zookeeper不能开启的原因。
我的报错原因是·jdk版本太低,我吧jdk版本从1.7换成1.8就好了。

4. 以上都没问题还是报错的话可以试试下面的方式

把设置一个比较大的timeout值,可能是连接超时。

<dubbo:registry address="zookeeper://127.0.0.1:2181" timeout="100000"/>
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐