1. 程式人生 > >ZooKeeper啟動成功,卻無法檢視status——記一次Zookeeper“異常”

ZooKeeper啟動成功,卻無法檢視status——記一次Zookeeper“異常”

今天在使用storm時,需要啟動zookeeper依賴叢集。於是使用命令啟動zookeeper叢集,使用命令bin/zkServer.sh start

[[email protected] bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper/zookeeper-3.4.10/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[[email protected] bin]# jps
2936 Jps
2924 QuorumPeerMain

為了檢視zookeeper在master節點上是否啟動成功,使用jps命令檢視相關程序是否啟動,如上圖QuorumPeerMain程序已成功啟動。此時,小廚突然想看看master節點上zookeeper的狀態,到底是leader還是follower,確保節點成功啟動。使用命令bin/zkServer.sh status,此時卻意外的出現了異常。如下圖

[[email protected] bin]# ./zkServer.sh  status
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper/zookeeper-3.4.10/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.

於是去bin目錄下去檢視zookeeper.out輸出日誌:

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)

報錯為:拒絕連線,於是排查了一遍節點的配置,確定都正確,此時有網友列出可能是myid重複了,於是去各節點檢視id的設定

發現在data目錄下的myid各節點直接並無重複,排除不是myid重複的原因。於是我啟動了第二臺和第三臺節點上的zookeeper,並檢視相關啟動執行緒和zookeeper的叢集狀態

發現兩個從節點都可以正常的檢視狀態。此時問題浮出水面:導致無法檢視status的原因是,當小廚在master節點上執行bin/zkServer.sh status命令時,只有master節點的zookeeper程序啟動了,其他節點的程序並沒有啟動,master節點無法與slave節點互動。由於zookeeper叢集是依靠選舉機制來產生leader和follower,當無法互動時也就無法選出leader和follower,因此執行status命令時,無法獲取節點的狀態。總結:只啟動一臺節點時,無法獲取zookeeper的節點狀態。

當正確啟動另外兩個節點時,master的status如下:

[[email protected] bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower