實際項目開發中,用的是Linux環境。
中午忽然斷電,死活連不上Zookeeper,最終發現是須要關閉防火牆。
看日誌,報錯以下:
Exception in thread "main" org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /test
at org.apache.zookeeper.KeeperException.create(KeeperException.java:99)
at org.apache.zookeeper.KeeperException.create(KeeperException.java:51)
at org.apache.zookeeper.ZooKeeper.exists(ZooKeeper.java:1501)
at org.apache.zookeeper.ZooKeeper.exists(ZooKeeper.java:1529)
at com.jiq.test.ZooKeeperTest.main(ZooKeeperTest.java:12)
通過實踐,最終發現是「防火牆」的緣由。
主要參考了網上的一篇文章。
不正確的解決辦法:
「上網一查,全是說什麼到Zookeeper服務的鏈接未完成,說是加下面這段代碼就行了:
CountDownLatch connectedLatch = new CountDownLatch(1);
if (States.CONNECTING == zk.getState()) {
try {
connectedLatch.await();
} catch (InterruptedException e) {
throw new IllegalStateException(e);
}
}
我以爲這有點扯淡,首先官網沒有任何提到要加這樣的代碼來等待鏈接準備好的話語,其次爲何本機能夠,遠端就不行,難道天生本機就必定可以快速創建好鏈接,遠端就要等一等麼?
因而我決定本身思考,想了一天才以爲多是防火牆問題,因而把windwos server 2008防火牆關閉,OK了,把CentOS防火牆關閉,也OK了,哎!」
看了這個哥們的描述,我深覺得然啊。
我也嘗試過,加一些亂七八糟的代碼,發現都不能解決問題。
最終,嘗試了這個哥們的「關閉防火牆」的解決辦法。
可是,這篇文章中,永久關閉防火牆的那種方式,是不對的,只要使用了,Zookeeper就鏈接不上。
「CentOS關閉防火牆命令:
CentOS Linux開啓和關閉防火牆命令有兩種,一種是臨時的,重啓即復原;另一種是永久xìng的,重啓不會復原。
1) 臨時生效,重啓後復原
開啓: service iptables start
關閉: service iptables stop
2) 永久xìng生效,重啓後不會復原
開啓: chkconfig iptables on
關閉: chkconfig iptables off
我執行的是永久修改的命令,執行完了也能夠不重啓電腦,重啓防火牆服務便可: service iptables restart 」
實際中,我用的是臨時的關閉防火牆的辦法,這樣,若是服務器再次斷電重啓,還須要手動關閉。
這個哥們貌似是「永久關閉防火牆」,反正我也試了,永久關閉,老是不行,多是個人問題。
這個哥們說,不用重啓服務器,反正我沒有重啓,不知道重啓了效果會如何。
一點感想
本身遇到的不少問題,網上基本都有答案了。
優先用別人的解決辦法,是很是合適的,比較迅速,很快提高本身解決問題的能力。
技術框架之類的,主要仍是別人生成,在水平不夠以前,「拿來主義」是不錯的。
隨便一個工具框架,本身去搞,至少得個把月上年吧~
整理本身的技術體系,管理本身遇到的問題,頗有必要。
一句話:創建健全本身的技術體系和社會生存能力體系。(怎麼感受像是官方文件呢~)
最近,抽空,分享下本身的瀏覽器收藏夾,和一些知識管理的心得體會~
參考資料 Zookeeper異常ConnectionLossException解決 http://www.sjsjw.com/kf_cloud/article/022572ABA018042.asp