zookeeper啓動成功後zkServer.sh status出錯
一、問題出現情形
運行zookeeperd後顯示啓動成功:
JMX enabled by default
Using config: /data/programfiles/zookeeper-3.4.5/bin/../conf/zoo.cfg
StarTIng zookeeper ... STARTED
但用zkServer.sh status查看,反饋如下:
JMX enabled by default
Using config: /data/programfiles/zookeeper-3.4.5/bin/../conf/zoo.cfg
Error contacTIng service. It is probably not running.
二、查看問題原因
查看zookeeper.out文件(默認在zookeeper目錄下)
vim zookeeper.out
在底部可看到報錯(部分截取):
23 00:59:07,068 [myid:1] - WARN [WorkerSender[myid=1]:QuorumCnxManager@382] - Cannot open channel to 2 at election address /192.168.110.127:3888
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:579)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:368)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:341)
at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.process(FastLeaderElection.java:449)
at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.run(FastLeaderElection.java:430)
at java.lang.Thread.run(Thread.java:744)
2016-08-23 00:59:07,074 [myid:1] - WARN [WorkerSender[myid=1]:QuorumCnxManager@382] - Cannot open channel to 3 at election address /192.168.110.126:3888
java.net.ConnectException: Connection refused
三、問題排查
(原因分析)
1. java環境
查看jdk版本是否與zookeeper版本兼容
java -version
2.排查端口占用
netstat -apn | grep 2181 #默認2181端口爲服務端提供端口
備註:若集羣未啓動 則不應該有端口占用
kill -9 pid #pid爲佔用端口的進程id號
3.排除網卡問題
ip addr
備註:如果爲物理地址則 重啓網卡
service network restart
4.排除網絡問題
ping ip #ping其他節點主機 若zoo.cfg 使用域名則用域名
備註:無ping命令則安裝 yum install iputils-ping 若有問題則 host映射問題
5.排查節點配置信息
dataDir 是否存在 myid文件內容與 service.x 中x對應
例如:zk01 其對應service.x 則該目錄下myid內容爲1
6.防火牆攔截端口
systemctl status firewalld.service
systemctl stop firewalld.service #關閉防火牆
systemctl disable firewalld.service #禁止啓動防火牆
總的來說,一般就是這六點原因:
第一,zoo.cfg文件配置出錯:dataLogDir指定的目錄未被創建;
第二,myid文件中的整數格式不對,或者與zoo.cfg中的server整數不對應
第三,防火牆未關閉;
第四,2181端口被佔用;
第五,zoo.cfg文件中主機名出錯;
第六,hosts文件中,本機的主機名有兩個對應,只需保留主機名和ip地址的映射
本人最終未得以解決,希望找的這些解決方案對大家有用吧~