1. 程式人生 > >zookeeper第三天:

zookeeper第三天:

下載

E:\zookeeper-3.4.10

配置檔案

開啟conf資料夾
這裡寫圖片描述
我們要根據zoo_sample.cfg這個模板檔案,可以重新命名為zoo.cfg,也可以新建一個zoo.cfg檔案。當啟動zookeeper的時候,會載入zoo.cfg檔案。
檔案中的引數是什麼作用,在我的上篇文章中有介紹
下面我們配置zoo.cfg檔案。你可以按照樣板的例子進行復制,也可以像我一樣懶,極簡模式:

tickTime=2000    
dataDir=E:/zookeeper-3.4.10/zookeeper/data  
dataLogDir=E:/zookeeper-3.4.10/zookeeper/logs
clientPort=4180

此時你已經完成了單機模式的建立。
執行E:\zookeeper-3.4.10\bin下的zkServer.cmd,此時zookeeper成功執行。

如果想配置偽叢集的話,那麼你還需要以下步驟
1.建立.cfg檔案
開啟conf資料夾,複製zoo_sample.cfg三份,名分別為:zoo1.cfg、zoo2.cfg、zoo3.cfg。
這個zoo1.cfg的配置檔案。2和3只是在clientPort地方不同,依次 + 1 就好。

# 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=E:\\zookeeper-3.4.10\\zookeeper\\data\\1
dataLogDir=E:\\zookeeper-3.4.10\\zookeeper\\logs\\1 # 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 server.1=localhost:2287:3387 server.2=localhost:2288:3388 server.3=localhost:2289:3389

2.新增data和log資料夾
這是我的目錄結構:
這裡寫圖片描述
在zookeeper目錄下建立名為zookeeper的資料夾,在該資料夾內建立名為data和log的資料夾。在其中建立名為1、2、3的資料夾。
最重要的:分別在data\1,data\2,data\3下建立檔案 myid(去掉字尾名),並分別新增內容 1、2、3。
這裡寫圖片描述
3.新增啟動檔案
在E:\zookeeper-3.4.10\bin資料夾下複製zkServer.cmd三份,名為zkServer-1.cmd、zkServer-2.cmd、zkServer-3.cmd。更改其中的配置內容。
這是我zkServer-1.cmd的配置內容。2和3只需要更改其中的zoo1.cfg為zoo2.cfg,zoo3.cfg就好。

@echo off
REM Licensed to the Apache Software Foundation (ASF) under one or more
REM contributor license agreements.  See the NOTICE file distributed with
REM this work for additional information regarding copyright ownership.
REM The ASF licenses this file to You under the Apache License, Version 2.0
REM (the "License"); you may not use this file except in compliance with
REM the License.  You may obtain a copy of the License at
REM
REM     http://www.apache.org/licenses/LICENSE-2.0
REM
REM Unless required by applicable law or agreed to in writing, software
REM distributed under the License is distributed on an "AS IS" BASIS,
REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
REM See the License for the specific language governing permissions and
REM limitations under the License.

setlocal
call "%~dp0zkEnv.cmd"

set ZOOMAIN=org.apache.zookeeper.server.quorum.QuorumPeerMain
set ZOOCFG=..\conf\zoo1.cfg
echo on
call %JAVA% "-Dzookeeper.log.dir=%ZOO_LOG_DIR%" "-Dzookeeper.root.logger=%ZOO_LOG4J_PROP%" -cp "%CLASSPATH%" %ZOOMAIN% "%ZOOCFG%" %*

endlocal

OK,這個時候你可以啟動zkServer-1.cmd,zkServer-2.cmd,zkServer-3.cmd了。
啟動第一個時候會報錯:
這裡寫圖片描述
這是因為,zookeeper叢集採用的是選舉演算法,當叢集中的其他節點還沒有啟動的時候,選舉演算法就會出現異常,因為至少三臺能選舉出一個leader,2n+1臺機器,可以選舉n個leader,當全部啟動起來後,就不會報異常,所以上述的報錯是可以忽略的,儘管啟動這三個節點即可。
這樣在一臺機器上搭建了zookeeper偽叢集,並且啟動成功。

遇見錯誤:

1:執行zkServer.cmd閃退
2:執行失敗,提示myid檔案不存在。
這兩個問題都需要仔細檢查zoo1.cfg中data以及log的檔案路徑是否正確。我也是試了很多次才成功的。