今天一大早4点多就睡不着了,困绕了我近半年的zookeeper能启动但无法选举问题让我头疼。起床试试吧。
经过一天的奋战,试了无数种方法(当然因为zookeeper用途太广了,这半年也多次尝试,却都没有解决)。
现象:
1.QuorumPeerMain进程可能正常启动。但使用zkServer.sh status查看状态时报:[richard@richard3 zookeeper-3.4.6]$ bin/zkServer.sh status
JMX enabled by default
Using config: /home/richard/zookeeper-3.4.6/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
2.查看日志发现报错:
2016-01-16 19:04:51,488 [myid:0] - WARN [WorkerSender[myid=0]:QuorumCnxManager@
382] - Cannot open channel to 2 at election address /192.168.1.112:3888
java.net.ConnectException: 拒绝连接
at java.net.PlainSocketImpl.socketConnect(Native Method) ............
我试过几种方案:
1.防火墙未关闭,因为我使用的是centos7,防火墙关闭方法与以前不一样了,从网上查了一下,使用chkconfig iptables off关闭。问题未解决。
2.java版本太高?因为我用的是java8,所以怀疑java版本问题。降到java7。同样未能解决问题。
3.网上查到
1)打开zkServer.sh 找到
status)
STAT=`echo stat | nc localhost $(grep clientPort "$ZOOCFG" | sed -e 's/.*=//') 2> /dev/null| grep Mode`
在nc与localhost之间加上 -q 1 (是数字1而不是字母l)
如果已存在则去掉
我用的是zookeeper-3.4.6,zkServer.sh脚本文件里根本没有这一行,我的zkServer.sh中是下面这样:
STAT=`"$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
-cp "$CLASSPATH" $JVMFLAGS org.apache.zookeeper.client.FourLetterWordMain \
$clientPortAddress $clientPort srvr 2> /dev/null \
| grep Mode`
if [ "x$STAT" = "x" ]
then
echo "Error contacting service. It is probably not running."
exit 1
else
echo $STAT
exit 0
fi
所以此法无效。
3.虚拟机的问题?我就装了windows 和linux双系统。
在纯linux下装了虚拟机也不管用。
。。。。。。。
今天经过一天的奋斗结果发现原因竟是最简单的问题:防火墙的问题。其实应该把iptables和firewall都关掉才行,而我只把iptables关闭了,而firewall却逍遥法外,应该用下面方法把firewall也关掉。
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)