最近在centos7上安装zookeeper的过程中出现一个让人很迷惑的小问题,这里分享一下。
集群配置文件:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/app/zookeeper/data
dataLogDir=/home/hadoop/app/zookeeper/logs
clientPort=2181
server.1=192.168.85.130:2888:3888
server.2=192.168.85.140:2888:3888
server.3=192.168.85.150:2888:3888
环境变量增加了ZOOKEEPER_HOME及其bin
之后执行
[hadoop@hadoop1 conf]$ zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/hadoop/app/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@hadoop1 conf]$ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/hadoop/app/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Error contacting service. It is probably not running.
出现了一个Error?这是怎么回事
查看了一下日志:
[hadoop@hadoop1 logs]$ tail -100f zookeeper-hadoop-server-hadoop1.out
2019-09-29 11:07:17,335 [myid:1] - WARN [QuorumPeer[myid=1](plain=/0:0:0:0:0:0:0:0:2181)(secure=disabled):QuorumCnxManager@677] - Cannot open channel to 2 at election address /192.168.85.140:3888
java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:648)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:705)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:733)
at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:910)
at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:1247)
2019-09-29 11:07:17,341 [myid:1] - WARN [QuorumPeer[myid=1](plain=/0:0:0:0:0:0:0:0:2181)(secure=disabled):QuorumCnxManager@677] - Cannot open channel to 3 at election address /192.168.85.150:3888
java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:648)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:705)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:733)
at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:910)
at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:1247)
WTF?什么情况!!!!
然后看看网友怎样解决:
(1)网友甲说,防火墙没关,对不起我早就关了,而且关了selinux,该策略pass掉
附上关闭防火墙,及selinux
systemctl stop firewalld
systemctl disabled firewalld
这个一般需要再开启才生效,当然关闭防火墙基本就不影响了
vi /etc/selinux/config
SELINUX=disabled
setenforce 0
(2)网友乙说,时间要同步,zookeeper对时间很敏感,对不起我也早设置时间了
附上我之前的时间同步
yum install nptdate
ntpdate time.ntp.org
(3)网友丙说,是因为你hosts文件没有注释掉127.0.0.1路径,对不起我再安装hadoop的时候就已经搞定了
附上hosts文件修改
vim /etc/hosts
#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.85.130 hadoop1
192.168.85.140 hadoop2
192.168.85.150 hadoop3
然后怎么办,网友的办法都试过了。我又自己查看了网卡,查找配置文件是否配置有问题。
第一个结点就那样报错放着,我想试试第二台第三台启动有没有问题,然后奇迹就出现了!!!!!
当三台都启动之后!!!错误消失了
ZooKeeper JMX enabled by default
Using config: /home/hadoop/app/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
所以错误就是因为在启动一台的时候查找其他节点,旧版本会显示一个状态表示在等待,而新版本这部分还没有优化好,会出现一个抛异常等待的过程,当然看源码的大佬可以修改下源码,让这部分加上try catch就OK了。。。。