(五)zookeeper windows單機模式和偽叢集模式
zookeeper是一個分散式應用所設計的分佈的、開源的協調服務,它主要是用來解決分散式應用中經常遇到的一些資料管理問題,簡化分散式應用,協調及其管理的難度,提高效能的分散式服務。
zookeeper本身是可以以Standalone模式安裝執行,不過它在分散式Zookeeper叢集中(一個Leader,多個Follower),基於選舉演算法來保證zookeeper叢集的穩定性和可用性,從而保證了分散式的可靠性。
一、單機模式安裝
1、解壓到自己任意磁碟下,我的位置是D:\zookeeper-3.4.6
2、複製zoo_sample.cfg 重新命名為zoo.cfg。
zoo.cfg中的內容如下:
# The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=D:\\data\\zookeeper # log config dataLogDir=D:\\log\\zookeeper # the port at which the clients will connect clientPort=2181 # the maximum number of client connections. # increase this if you need to handle more clients #maxClientCnxns=60 # # Be sure to read the maintenance section of the # administrator guide before turning on autopurge. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # The number of snapshots to retain in dataDir #autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature #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
修改以下如下:
dataDir=D:\\data\\zookeeper\\1
# log config
#dataLogDir=D:\\log\\zookeeper
# the port at which the clients will connect
clientPort=2181
#新增叢集配置
server.1=localhost:2887:3887
server.2=localhost:2888:3888
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如下所示。
setlocal
call "%~dp0zkEnv.cmd"
set ZOOMAIN=org.apache.zookeeper.server.quorum.QuorumPeerMain
set ZOOCFG=D:\zookeeper-3.4.6\conf\zoo1.cfg
echo on
java "-Dzookeeper.log.dir=%ZOO_LOG_DIR%" "-Dzookeeper.root.logger=%ZOO_LOG4J_PROP%" -cp "%CLASSPATH%" %ZOOMAIN% "%ZOOCFG%" %*
endlocal
不同的zkServer- 1 2 3 .cmd分別新增一行set ZOOCFG=..\zoo1.cfg zoo2.cfg zoo3.cfg
3、分別啟動zkServer-1 .cmd、zkServer-2.cmd zkServer-3.cmd
啟動可能會報如下錯誤
2015-10-09 11:20:08,162 [myid:1] - WARN [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:218
1:QuorumCnxManager@382] - Cannot open channel to 3 at election address localhost
/192.168.132.16:3889
java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketI
mpl.java:85)
這是因為,zookeeper叢集採用的是選舉演算法,當叢集中的其他節點還沒有啟動的時候,選舉演算法就會出現異常,因為至少三臺能選舉出一個leader,2n+1臺機器,可以選舉n個leader,當全部啟動起來後,就不會報異常,所以上述的報錯是可以忽略的,儘管啟動這三個節點即可。
這樣在一臺機器上搭建了zookeeper偽叢集,並且啟動成功。
接下來是zookeeper的視覺化介面zkui的使用。
歡迎指教~