ZooKeeper集群搭建中的Connection refused而導致的啟動失敗


1. 前言

每一次搭建集群環境都像一次戰斗,作戰中任何一個細節的出錯都會導致嚴重的后果,所以搭建中所需要做的配置如系統配置、網絡配置(防火牆記得關)、用戶權限、文件權限還有配置文件等等內容,都必須非常仔細,將失誤扼殺在搖籃之中,避免因為粗心或者想要提高速度省下的一分鍾,在后面付出幾個小時的調試時間,因小失大實在不值,切記核對、核對再核對

今天就來說說在搭建ZooKeeper集群遇到的一個常見的問題Connection refused,也就是網上很多朋友也會出現的問題,問題的表現也許是一樣,但是導致問題的原因卻不盡相同,所以要重視自己的log文件報的錯誤,再確認外部大環境沒有的情況下,集中力量解決log中的錯誤

2. 我的問題

下面是我在搭建集群時報的錯:

這是表面上錯誤
2016-12-08 05:11:07,890 [myid:1] - WARN [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumCnxManager@382] - Cannot open channel to 5 at election address lzx15/192.168.80.175: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.connectAll(QuorumCnxManager.java:402) at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:840) at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:762) 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.connectAll(QuorumCnxManager.java:402) at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:840) at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:762)
這是實際上的錯誤
java.io.FileNotFoundException: /home/hadoop/data/zookeeper/zkdata/version-2/acceptedEpoch.tmp(Permissoin denied)

 

3. 其他人的解決方案:

主要為以下兩點:

1)防火牆沒關導致通訊失敗,無法連接到其他節點上,我在反復檢查之后確認防火牆已全部關閉,所以這個方法對我的問題無效

命令行:chkconfig iptables off (關閉防火牆)

    service iptables status(查看防火牆狀態)

2)配置文件問題

  a. /zookeeper/conf/zoo.cfg文件配置問題

  例如dataDir格式不對,或者沒有創建dataDir指定的文件等等,所以細心地檢查你的配置文件,至於這個文件的內容請大家自行百度。

  b. dataDir指定的目錄下創建myid文件,然后再文件寫上你在zoo.cfg中該節點的對應server號,例如server.1,那么myid中就寫1。

4. 我的解決方案  

找到zookeeper的log文件zookeeper.out在哪里?正常的路徑是 你的zookeper安裝目錄/zookeeper.out,我在這個zookeeper.out只能找到那個表面的錯誤即Connection refused,所以一直找不到問題,最后我在無意中發現

[hadoop@lzx11 hadoop]$ cd /home/hadoop
[hadoop@lzx11 ~]$ ls
app  data  tools  zookeeper.out

  我在這個zookeeper.out中找到我問題的真實錯誤,/home/hadoop/data/zookeeper/zkdata/version-2/acceptedEpoch.tmp(Permissoin denied),所以我去查看了verison-2文件夾的權限,發現他居然是root用戶的,我立刻把它轉到hadoop用戶下,然后再重新啟動集群,三個節點啟動成功。

 5. 總結

  很多時候我們都會去針對遇到的表面問題來尋找解決思路,但是很多問題只是因為其他地方出了問題導致的,所以在你認為找到解決目前這個問題的方法后卻仍然沒有能解決問題的時候,想想會不會在前面某個地方出錯,去別的地方找找答案,記住,鑰匙一般不在鎖里面。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM