1. 程式人生 > >安裝zookeeper時候,狀態顯示報錯:Error contacting service.

安裝zookeeper時候,狀態顯示報錯:Error contacting service.

安裝zookeeper-3.3.2的時候,啟動正常沒報錯,但zkServer.sh status檢視狀態的時候卻出現錯誤,如下:

JMX enabled by default
Using config: /hadoop/zookeeper/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.

jps檢視程序,卻發現程序已啟動

7313  QuorumPeerMain

在網上查閱資料一共有三種解決方法:

1,開啟zkServer.sh 找到status)

STAT=`echo stat | nc localhost $(grep clientPort "$ZOOCFG" | sed -e 's/.*=//') 2> /dev/null| grep Mode`
在nc與localhost之間加上 -q 1 (是數字1而不是字母l)
如果已存在則去掉
注:因為我用的zookeeper是3.4.5版本,所以在我的zkServer.sh指令碼檔案里根本沒有這一行,所以沒有生效

2,呼叫sh zkServer.sh status 遇到這個問題。百度,google了後發現有人是修改sh腳本里的一個nc的引數來解決,可在3.4.5的sh檔案裡並沒有找到nc的呼叫。配置文件裡指定的log目錄沒有建立導致出錯,手動增加目錄後重啟,問題解決。
注:我試了下,問題解決,我用的zookeeper是3.4.5版本

zkServer.sh中:

status)
    # -q is necessary on some versions of linux where nc returns too quickly, and no stat result is output
    STAT=`$JAVA "-Dzookeeper.log.dir=${

ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
             -cp "$CLASSPATH" $JVMFLAGS org.apache.zookeeper.client.FourLetterWordMain localhost \
             $(grep "^[[:space:]]*clientPort" "$ZOOCFG" | sed -e 's/.*=//') srvr 2> /dev/null    \
          | grep Mode`

解決:1)修改 zoo.cfg 配置檔案


#zookeeper-3.4.6_(1)的配置(/usr/local/zookeeper-3.4.6_(1)/conf/zoo.cfg)如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-3.4.6_(1)/data
dataLogDir=/usr/local/zookeeper-3.4.6_(1)/logs
clientPort=2181
server.1=192.168.11.97:2881:3881
server.2=192.168.11.98:2882:3882
server.3=192.168.11.99:2883:3883

2)在zookeeper安裝路徑下/usr/local/zookeeper-3.4.6_(1),建立一個資料夾logs

3,建立資料目錄,也就是在你zoo.cfg配置檔案裡dataDir指定的那個目錄下建立myid檔案,並且指定id,改id為你zoo.cfg檔案中server.1=localhost:2888:3888中的    1.只要在myid頭部寫入1即可.

4 因為防火牆沒有關閉。關閉防火牆:

  #檢視防火牆狀態

   service iptables status 

  #關閉防火牆
   service iptables stop
  #檢視防火牆開機啟動狀態
   chkconfig iptables --list
  #關閉防火牆開機啟動
   chkconfig iptables off

 注意:我的確在開始時候沒有關閉防火牆,但是當我關閉防火牆之後也沒有解決問題。

5 沒有建立主機和ip之間的對映關係。

  建立主機和ip之間對映關係的命令為 vim /etc/hosts   在檔案的末端加入各個主機和ip地址之間的對映關係就可以了。

  注意:只有在建立了對映關係之後,才可以將在同一個網段下的機器利用主機名進行檔案傳遞。問題解決!