ZooKeeper啟動成功,卻無法檢視status——記一次Zookeeper“異常”
阿新 • • 發佈:2018-12-19
今天在使用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