window下zookeeper的下載啟動和報錯等問題


  在使用dubbo等需要用到zookeeper,之前window下本地部署,啟動一直有問題,后面折騰了下才部署成功,此次記錄下來。

  將zookeeper下載之后,解壓到指定目錄即可,無需安裝。例如:解壓到D:\zookeeper-3.5.0-alpha\zookeeper-3.5.0-alpha。(下載的是3.5.0版本) 
解壓好了之后,進入conf文件夾,會發現有2個文件,log4j.properties和zoo_sample.cfg這2個文件。對於zoo_sample.cfg文件,需要先將文件名字修改成zoo.cfg文件才行,接下來修改里面配置,如下所示,給出了注釋和簡單的配置信息。

  

 1 # ZK中的一個時間單元。ZK中所有時間都是以這個時間單元為基礎,進行整數倍配置的。例如,session的最小超時時間是2*tickTime。
 2 tickTime=2000
 3 
 4 # Follower在啟動過程中,會從Leader同步所有最新數據,然后確定自己能夠對外服務的起始狀態。Leader允許F在 initLimit 時間內完成這個工作。
 5 initLimit=10
 6 
 7 # 在運行過程中,Leader負責與ZK集群中所有機器進行通信,例如通過一些心跳檢測機制,來檢測機器的存活狀態。
 8 syncLimit=5
 9 
10 # 存儲快照文件snapshot的目錄。默認情況下,事務日志也會存儲在這里。建議同時配置參數dataLogDir, 事務日志的寫性能直接影響zk性能。
11 dataDir=D:/Program Service Files/zookeeper-3.5.0-alpha/data
12 
13 # 事務日志輸出目錄。盡量給事務日志的輸出配置單獨的磁盤或是掛載點,這將極大的提升ZK性能。 
14 dataLogDir=D:/Program Service Files/zookeeper-3.5.0-alpha/dataLog
15 
16 # 客戶端連接server的端口,即對外服務端口,一般設置為2181吧。
17 clientPort=2181
18 
19 # 單個客戶端與單台服務器之間的連接數的限制,是ip級別的,默認是60,如果設置為0,那么表明不作任何限制。
20 #maxClientCnxns=60
21 
22 #
23 # Be sure to read the maintenance section of the 
24 # administrator guide before turning on autopurge.
25 #
26 # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
27 #
28 # The number of snapshots to retain in dataDir
29 #autopurge.snapRetainCount=3
30 # Purge task interval in hours
31 # Set to "0" to disable auto purge feature
32 #autopurge.purgeInterval=1

  注:dataDir和dataLogDir文件夾,注意window下的/和\的處理方式。

  啟動錯誤

  配置完成之后,就可以進入bin目錄下,啟動zkService.cmd了,當頁面滾動時,證明啟動成功了。 
  但是,我們會經常遇到雙擊啟動時,一閃而過的場景,此時會什么錯誤信息都看不到,最好的方式就是采取cmd啟動,這樣能看到報錯信息。 
  在此文件夾打開cmd執行如下命令,就會看到報錯信息了。

  問題1

  當啟動zkService.cmd時,提示如下錯誤。找不到JAVA_HOME,提示沒有正確設置,檢查了下是有設置的。

D:\Program Service Files\zookeeper-3.5.0-alpha\bin>zkServer.cmd
系統找不到指定的路徑。
Error: JAVA_HOME is incorrectly set.

D:\Program Service Files\zookeeper-3.5.0-alpha\bin>call  "-Dzookeeper.log.dir=D:
\Program Service Files\zookeeper-3.5.0-alpha\bin\.." "-Dzookeeper.root.logger=IN
FO,CONSOLE" -cp "D:\Program Service Files\zookeeper-3.5.0-alpha\bin\..\build\cla
sses;D:\Program Service Files\zookeeper-3.5.0-alpha\bin\..\build\lib\*;D:\Progra
m Service Files\zookeeper-3.5.0-alpha\bin\..\*;D:\Program Service Files\zookeepe
r-3.5.0-alpha\bin\..\lib\*;D:\Program Service Files\zookeeper-3.5.0-alpha\bin\..
\conf" org.apache.zookeeper.server.quorum.QuorumPeerMain "D:\Program Service Fil
es\zookeeper-3.5.0-alpha\bin\..\conf\zoo.cfg"
'"-Dzookeeper.log.dir=D:\Program Service Files\zookeeper-3.5.0-alpha\bin\.."' 不
是內部或外部命令,也不是可運行的程序
或批處理文件。

D:\Program Service Files\zookeeper-3.5.0-alpha\bin>endlocal

  通過查找google發現,是因為我們的java安裝在了如下目錄:

C:\Program Files\Java

  這個路徑中,program files含有空格,所以導致找不到java路徑。此時,可在bin同級目錄下,找到 
  zkEnv.cmd這個命令。用文本方式打開,可以看到如下內容:

 1 set ZOOCFG=%ZOOCFGDIR%\zoo.cfg
 2 
 3 @REM setup java environment variables
 4 
 5 if not defined JAVA_HOME (
 6   echo Error: JAVA_HOME is not set.
 7   goto :eof
 8 )
 9 
10 if not exist %JAVA_HOME%\bin\java.exe (
11   echo Error: JAVA_HOME is incorrectly set.
12   goto :eof
13 )
14 
15 set JAVA=%JAVA_HOME%\bin\java

  報錯信息剛好是找不到java.exe,此時進行修改即可。對路徑加入”“處理,如下所示:

 1 if not defined JAVA_HOME (
 2   echo Error: JAVA_HOME is not set.
 3   goto :eof
 4 )
 5 
 6 if not exist "%JAVA_HOME%\bin\java.exe" (
 7   echo Error: JAVA_HOME is incorrectly set.
 8   goto :eof
 9 )
10 
11 set JAVA=%JAVA_HOME%\bin\java

  如上所示,這樣就能找到java路徑了。正確啟動了。 
  類似的還能發現會出現【JAVA_HOME is not set】、【JAVA_HOME is incorrectly set】處理方式都一樣了。 
  注:google說的是因為program files含有空格導致的,按照目前實驗來看,估計還是因為window下\和/的問題導致的,引號之后,就能全部當作字符串路徑處理了,需要做個實驗看看。

  問題2

  當修改完成之后,再次cmd下啟動,會發現還會報錯,提示 ‘C:\Program’ 不是內部或外部命令,也不是可運行的程序或批處理文件 報錯信息如下:

 1 D:\Program Service Files\zookeeper-3.5.0-alpha\bin>zkServer.cmd
 2 
 3 D:\Program Service Files\zookeeper-3.5.0-alpha\bin>call C:\Program Files\Java\jd
 4 k1.7.0_79\bin\java "-Dzookeeper.log.dir=D:\Program Service Files\zookeeper-3.5.0
 5 -alpha\bin\.." "-Dzookeeper.root.logger=INFO,CONSOLE" -cp "D:\Program Service Fi
 6 les\zookeeper-3.5.0-alpha\bin\..\build\classes;D:\Program Service Files\zookeepe
 7 r-3.5.0-alpha\bin\..\build\lib\*;D:\Program Service Files\zookeeper-3.5.0-alpha\
 8 bin\..\*;D:\Program Service Files\zookeeper-3.5.0-alpha\bin\..\lib\*;D:\Program
 9 Service Files\zookeeper-3.5.0-alpha\bin\..\conf" org.apache.zookeeper.server.quo
10 rum.QuorumPeerMain "D:\Program Service Files\zookeeper-3.5.0-alpha\bin\..\conf\z
11 oo.cfg"
12 'C:\Program' 不是內部或外部命令,也不是可運行的程序
13 或批處理文件。
14 
15 D:\Program Service Files\zookeeper-3.5.0-alpha\bin>endlocal

  根據前面來看,估計還是window下的設置問題,和前面一樣,此時繼續修改zkEnv.cmd文件,修改如下:

1 set JAVA="%JAVA_HOME%\bin\java"

  將最后的set JAVA也用引號處理了,這樣修改之后,再次啟動就好了。


免責聲明!

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



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