项目场景:
连接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"/>