zookeeper windows單機模式和僞集羣模式

 首先在官網上下載zookeeper穩定版本,下載地址:http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/ 下載zookeeper-3.4.6.tar.gz,我下載的是3.4.6,不算太新也不算太舊。

        zookeeper是一個分佈式應用所設計的分佈的、開源的協調服務,它主要是用來解決分佈式應用中經常遇到的一些數據管理問題,簡化分佈式應用,協調及其管理的難度,提高性能的分佈式服務。

        zookeeper本身是可以以Standalone模式安裝運行,不過它在分佈式Zookeeper集羣中(一個Leader,多個Follower),基於選舉算法來保證        zookeeper集羣的穩定性和可用性,從而保證了分佈式的可靠性。


一、單機模式安裝


        1、解壓到自己任意磁盤下,我的位置是D:\zookeeper-3.4.6


        2、複製zoo_sample.cfg 重命名爲zoo.cfg。

zoo.cfg中的內容如下:

[html] view plain copy
 print?
  1. # The number of milliseconds of each tick  
  2. tickTime=2000  
  3. # The number of ticks that the initial   
  4. # synchronization phase can take  
  5. initLimit=10  
  6. # The number of ticks that can pass between   
  7. # sending a request and getting an acknowledgement  
  8. syncLimit=5  
  9. # the directory where the snapshot is stored.  
  10. # do not use /tmp for storage, /tmp here is just   
  11. # example sakes.  
  12. dataDir=D:\\data\\zookeeper  
  13. # log config  
  14. dataLogDir=D:\\log\\zookeeper  
  15. # the port at which the clients will connect  
  16. clientPort=2181  
  17. # the maximum number of client connections.  
  18. # increase this if you need to handle more clients  
  19. #maxClientCnxns=60  
  20. #  
  21. # Be sure to read the maintenance section of the   
  22. # administrator guide before turning on autopurge.  
  23. #  
  24. # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance  
  25. #  
  26. # The number of snapshots to retain in dataDir  
  27. #autopurge.snapRetainCount=3  
  28. # Purge task interval in hours  
  29. # Set to "0" to disable auto purge feature  
  30. #autopurge.purgeInterval=1  

        其中


        dataDir爲zookeeper數據存放位置,zookeeper將寫數據的日誌文件保存在這個目錄裏。

        dataLogDir是日誌文件。

        clientPort=2181是zookeeper端口,我們連接zookeeper的端口,zookeeper會監聽這個端口,接收客戶端訪問請求。

        tickTime:zookeeper服務器之間,或者zookeeper客戶端與服務器之間維持的心跳的時間間隔,每隔tickTime時間,會執行一次。(心跳證明活着,心跳時間就是超時設置時間,可以理解爲客戶端和服務器端的session)

     

        3 、轉到D盤的zookeeper bin目錄下,執行zkServer.cmd,這樣就啓動了zookeeper服務了。

        4、查看zookeeper運行情況:D:\zookeeper-3.4.6\bin>zkCli.cmd-server 127.0.0.1:2181。

        這樣就完成了zookeeper windows單機模式安裝。



二、僞集羣模式安裝


        在一臺PC上啓動多個Zookeeper實例,同一個不同的端口,來實現微集羣。

        簡單原理:

        選舉算法,有興趣的同學可以看看,後續篇章中會詳述。

        1、修改加載的配置文件。在D:\zookeeper-3.4.6\conf 下複製zoo.cfg重命名爲zoo1.cfg ,zoo2.cfg,zoo3.cfg


        修改以下如下:

[html] view plain copy
 print?
  1. dataDir=D:\\data\\zookeeper\\1  
  2. # log config  
  3. #dataLogDir=D:\\log\\zookeeper  
  4. # the port at which the clients will connect  
  5. clientPort=2181  
[html] view plain copy
 print?
  1. #添加集羣配置  
  2. server.1=localhost:2887:3887  
  3. server.2=localhost:2888:3888  
  4. server.3=localhost:2889:3889  

zoo1.cfg 文件修改dataDir目錄爲D:\\data\\zookeeper\\1,修改clientPort爲2181 ,同時添加server.1=localhost:2887:3887
server.2=localhost:2888:3888  server.3=localhost:2889:3889

        server.num=ip/domain:Port1:Port2

        其中num:表示數字表示第幾號服務器;ip/domain :是服務器域名或者ip地址。Port1:表示這個服務器和集羣中的Leader服務器交換信息的端口;Port2:表示萬一集羣中的Leader服務器掛了,需要一個端口重新進行選舉,選出一個新的Leader,這個端口就是用來執行選舉時服務器相互通信的端口。

        由於我們是僞集羣,所以ip或者域名是一樣的,所以要分配不同的端口號。

        zoo2.cfg也是如此修改,copy zoo1.cfg 只要修改上述紅色標記的即可,\\2 clientPort=2182 ,類推,zoo2.cfg修改clientPort爲2183 。


2、修改命令,加載不同的配置。複製zkServer.cmd並且重命名爲,zkServer-1.cmd,zkServer-2.cmd,zkServer-3.cmd 分別修改這三個cmd如下所示。

[html] view plain copy
 print?
  1. setlocal  
  2. call "%~dp0zkEnv.cmd"  
  3.   
  4. set ZOOMAIN=org.apache.zookeeper.server.quorum.QuorumPeerMain  
  5. set ZOOCFG=D:\zookeeper-3.4.6\conf\zoo1.cfg  
  6. echo on  
  7. java "-Dzookeeper.log.dir=%ZOO_LOG_DIR%" "-Dzookeeper.root.logger=%ZOO_LOG4J_PROP%" -cp "%CLASSPATH%" %ZOOMAIN% "%ZOOCFG%" %*  
  8.   
  9. endlocal  


        不同的zkServer- 1 2 3  .cmd分別添加一行set ZOOCFG=..\zoo1.cfg zoo2.cfg zoo3.cfg


3、分別啓動zkServer-1 .cmd、zkServer-2.cmd zkServer-3.cmd

        啓動可能會報如下錯誤

第一種情況:

[html] view plain copy
 print?
  1. 2015-10-09 11:20:08,162 [myid:1] - WARN  [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:218  
  2. 1:QuorumCnxManager@382] - Cannot open channel to 3 at election address localhost  
  3. /192.168.132.16:3889  
  4. java.net.ConnectException: Connection refused: connect  
  5.         at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)  
  6.         at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketI  
  7. mpl.java:85)  

        這是因爲,zookeeper集羣採用的是選舉算法,當集羣中的其他節點還沒有啓動的時候,選舉算法就會出現異常,因爲至少三臺能選舉出一個leader,2n+1臺機器,可以選舉n個leader,當全部啓動起來後,就不會報異常,所以上述的報錯是可以忽略的,儘管啓動這三個節點即可。

第二種情況:

如果啓動的時候一閃而過並且提示myid丟失,則需要到dataDir所設置的目錄下面創建該文件並且輸入對應的數字並寫入一個數字用來標識本節點(類似這個節點的身份證)。

        這樣在一臺機器上搭建了zookeeper僞集羣,並且啓動成功。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章