1. 程式人生 > >zookeeper啟動成功,查詢狀態zkService.sh status報錯

zookeeper啟動成功,查詢狀態zkService.sh status報錯

./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/hadoop/bigdata/zk/bin/…/conf/zoo.cfg
Starting zookeeper … STARTED

再執行 ./zkServer.sh status

[email protected]:~/bigdata/zk/bin$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/hadoop/bigdata/zk/bin/…/conf/zoo.cfg
Error contacting service. It is probably not running.

再執行 jps, 根本就沒有zookeeper相關程序在執行。也就是說,start 那步顯示的STARTED 並不代表真正啟動成功。

[email protected]:~/bigdata/zk/bin$ jps
4128 NameNode
5745 ResourceManager
22914 Jps
19299 SqoopJettyServer
1670 RunJar
22074 Master
5535 SecondaryNameNode

檢視 同目錄下的日誌檔案zookeeper.out, 顯示 zoo.cfg 配置檔案解析錯誤。

我在zoo.cfg 中只加了下面5行,格式上來說都是對的呀,怎麼會有格式錯誤?

dataDir=/home/hadoop/bigdata/zk/zkdata
dataLogDir=/home/hadoop/bigdata/zk/zkdatalog

server.1=master:2888:3888
server.2=ndh-slave01:2888:3888
server.3=slave02:2888:3888

仔細看了這五行內容,且配置過程中修改過的地方,dataDir/dataLogDir 兩個只是目錄,肯定是建立過的,不太會出問題。那唯一可能的就是server.X=xxx 那幾行。

先注掉試試,再次執行 ./zkServer.sh start, ./zkServer.sh status , jps, zookeeper 程序在運行了,但status 顯示是 “Mode: standalone" , 也就是單機模式,雖然模式不對,但至少可以確認是這三行的問題。

回想先前安裝過程中,在每臺機器的/home/hadoop/bigdata目錄下設定過myid 檔案,並且要求 myid中的值要與server.X 中設定的X 相一致,難道是這個地方不匹配?

排除格式,字符集等因素後,最後猜測可能是檔案路徑不對。

仔細比對,注意到 配置時myid檔案的/home/hadoop/bigdata目錄,zoo.cfg 中dataDir=/home/hadoop/bigdata/zk/zkdata, 沒在zookeeper 的有效路徑中zookeeper訪問不到?

果斷把master上的myid 拷貝到/home/hadoop/bigdata/zk/zkdata下,再次執行 ./zkServer.sh start,jps 顯示有zookeeper 程序在運行了 ,./zkServer.sh status 顯示 “Mode: follower” , 繼續在其他兩臺機器上把myid 拷貝到dataDir路徑下,啟動zkServer, 終於都正常了。

補充下:要在安裝zookeeper的機器上都執行zkServer.sh start,不是隻在master上執行,指令碼應該優化成只在master上執行一次即可全部啟動的方式。否則還是會出現如題的錯誤。

[email protected]:~/bigdata/zk/bin$ jps
4128 NameNode
23504 QuorumPeerMain
5745 ResourceManager
19299 SqoopJettyServer
1670 RunJar
22074 Master
23566 Jps
5535 SecondaryNameNode

$ /bin/bash zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/hadoop/bigdata/zk/bin/…/conf/zoo.cfg
Mode: leader

[email protected]:~/bigdata/zk/bin$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/hadoop/bigdata/zk/bin/…/conf/zoo.cfg
Mode: follower

附:zoo.cfg 中各配置項的含義和作用:1.tickTime:CS通訊心跳數
Zookeeper 伺服器之間或客戶端與伺服器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。tickTime以毫秒為單位。
tickTime=2000
2.initLimit:LF初始通訊時限
叢集中的follower伺服器(F)與leader伺服器(L)之間初始連線時能容忍的最多心跳數(tickTime的數量)。
initLimit=10
3.syncLimit:LF同步通訊時限
叢集中的follower伺服器與leader伺服器之間請求和應答之間能容忍的最多心跳數(tickTime的數量)。
syncLimit=5
4.dataDir:資料檔案目錄
Zookeeper儲存資料的目錄,預設情況下,Zookeeper將寫資料的日誌檔案也儲存在這個目錄裡。
5.dataLogDir:日誌檔案目錄
Zookeeper儲存日誌檔案的目錄。
6.clientPort:客戶端連線埠
客戶端連線 Zookeeper 伺服器的埠,Zookeeper 會監聽這個埠,接受客戶端的訪問請求。
clientPort=2181
7.伺服器名稱與地址:叢集資訊(伺服器編號,伺服器地址,LF通訊埠,選舉埠)
這個配置項的書寫格式比較特殊,規則如下:
server.N=YYY:A:B
其中N表示伺服器編號,YYY表示伺服器的IP地址,A為LF通訊埠,表示該伺服器與叢集中的leader交換的資訊的埠。B為選舉埠,表示選舉新leader時伺服器間相互通訊的埠(當leader掛掉時,其餘伺服器會相互通訊,選擇出新的leader)。一般來說,叢集中每個伺服器的A埠都是一樣,每個伺服器的B埠也是一樣。但是當所採用的為偽叢集時,IP地址都一樣,只能是A埠和B埠不一樣。
下面是一個非偽叢集的例子:
server.0=233.34.9.144:2008:6008
server.1=233.34.9.145:2008:6008
server.2=233.34.9.146:2008:6008
下面是一個偽叢集的例子:
server.0=127.0.0.1:2008:6008
server.1=127.0.0.1:2007:6007
server.2=127.0.0.1:2006:6006


作者:Heavbird
來源:CSDN
原文:https://blog.csdn.net/wqhlmark64/article/details/73250662?utm_source=copy
版權宣告:本文為博主原創文章,轉載請附上博文連結!