zookeeper 安裝及配置
下載地址:http://mirrors.hust.edu.cn/apache/zookeeper/ ,↓
下載最新版:
點選下載:
下載好後解壓到自己想存放的位置,當前我的檔案解壓到了D盤(D:\zookeeper-3.5.4-beta),選擇解壓到當前檔案即可。。。
解壓後目錄結構:
- bin目錄
zk的可執行指令碼目錄,包括zk服務程序,zk客戶端,等指令碼。其中,.sh是Linux環境下的指令碼,.cmd是Windows環境下的指令碼。 - conf目錄
配置檔案目錄。zoo_sample.cfg為樣例配置檔案,需要修改為自己的名稱,一般為zoo.cfg。log4j.properties為日誌配置檔案。 - lib
zk依賴的包。 - contrib目錄
一些用於操作zk的工具包。 - recipes目錄
zk某些用法的程式碼示例
zookeeper 支援的執行平臺:
ZooKeeper的安裝包括單機模式安裝,以及叢集模式安裝。
單機模式較簡單,是指只部署一個zk程序,客戶端直接與該zk程序進行通訊。
在開發測試環境下,通過來說沒有較多的物理資源,因此我們常使用單機模式。當然在單臺物理機上也可以部署叢集模式,但這會增加單臺物理機的資源消耗。故在開發環境中,我們一般使用單機模式。
但是要注意,生產環境下不可用單機模式,這是由於無論從系統可靠性還是讀寫效能,單機模式都不能滿足生產的需求。
1、單機模式:
然後找到資料夾下面的 conf
配置檔案中的 zoo_sample.cfg
設定一下配置檔案就可以啟動:
but 這裡需要更改一下 .cfg 檔名 zookeeper 啟動指令碼預設是尋找 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:\\zookeeper-3.5.4-beta\\data
dataLogDir=D:\\zookeeper-3.5.4-beta\\log
# the port at which the clients will connect
admin.serverPort=8082
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
修改內容:
增加了:admin.serverPort=8082 #不然會出現埠被佔用的情況,因為預設是和Apache.Tomcat使用的8080埠
修改了:dataDir=D:\\zookeeper-3.5.4-beta\\data #儲存資料的目錄
dataLogDir=D:\\zookeeper-3.5.4-beta\\log #儲存日誌的目錄
- tickTime:這個時間是作為 Zookeeper 伺服器之間或客戶端與伺服器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。
- dataDir:顧名思義就是 Zookeeper 儲存資料的目錄,預設情況下,Zookeeper 將寫資料的日誌檔案也儲存在這個目錄裡。
- dataLogDir:顧名思義就是 Zookeeper 儲存日誌檔案的目錄
- clientPort:這個埠就是客戶端連線 Zookeeper 伺服器的埠,Zookeeper 會監聽這個埠,接受客戶端的訪問請求。
使用文字編輯器開啟zkServer.cmd或者zkServer.sh檔案,可以看到其會呼叫zkEnv.cmd或者zkEnv.sh指令碼。zkEnv指令碼的作用是設定zk執行的一些環境變數,例如配置檔案的位置和名稱等。
當這些配置項配置好後,你現在就可以啟動 Zookeeper 了,啟動後要檢查 Zookeeper 是否已經在服務,可以通過 netstat – ano 命令檢視是否有你配置的 clientPort 埠號在監聽服務
通過 cmd 命令模式進入 Zookeeper 的 bin 目錄:# D:\zookeeper-3.5.4-beta\bin>zkServer.cmd
現在 zookeeper server 端已經啟動:然後我們來連線一下這個服務端
通過 cmd 命令模式進入 Zookeeper 的 bin 目錄執行:# D:\zookeeper-3.5.4-beta\bin>zkCli.cmd
2 、叢集模式
單機模式的zk程序雖然便於開發與測試,但並不適合在生產環境使用。在生產環境下,我們需要使用叢集模式來對zk進行部署。
注意:
在叢集模式下,建議至少部署3個zk程序,或者部署奇數個zk程序。如果只部署2個zk程序,當其中一個zk程序掛掉後,剩下的一個程序並不能構成一個quorum的大多數。因此,部署2個程序甚至比單機模式更不可靠,因為2個程序其中一個不可用的可能性比一個程序不可用的可能性還大。
- 在叢集模式下,所有的zk程序可以使用相同的配置檔案(是指各個zk程序部署在不同的機器上面),例如如下配置:
只需要在我們配置好的zoo.cfg檔案中進行更改:
tickTime=2000
dataDir=/home/myname/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=192.168.229.160:2888:3888
server.2=192.168.229.161:2888:3888
server.3=192.168.229.162:2888:3888
- initLimit
ZooKeeper叢集模式下包含多個zk程序,其中一個程序為leader,餘下的程序為follower。
當follower最初與leader建立連線時,它們之間會傳輸相當多的資料,尤其是follower的資料落後leader很多。initLimit配置follower與leader之間建立連線後進行同步的最長時間。 - syncLimit
配置follower和leader之間傳送訊息,請求和應答的最大時間長度。 - tickTime
tickTime則是上述兩個超時配置的基本單位,例如對於initLimit,其配置值為5,說明其超時時間為 2000ms * 5 = 10秒。 - server.id=host:port1:port2
其中id為一個數字,表示zk程序的id,這個id也是dataDir目錄下myid檔案的內容。
host是該zk程序所在的IP地址,port1表示follower和leader交換訊息所使用的埠,port2表示選舉leader所使用的埠。 - dataDir
其配置的含義跟單機模式下的含義類似,不同的是叢集模式下還有一個myid檔案。myid檔案的內容只有一行,且內容只能為1 - 255之間的數字,這個數字亦即上面介紹server.id中的id,表示zk程序的id。
注意
如果僅為了測試部署叢集模式而在同一臺機器上部署zk程序,server.id=host:port1:port2配置中的port引數必須不同。但是,為了減少機器宕機的風險,強烈建議在部署叢集模式時,將zk程序部署不同的物理機器上面。
我們打算在三臺不同的機器 192.168.229.160,192.168.229.161,192.168.229.162上各部署一個zk程序,以構成一個zk叢集。 三個zk程序均使用相同的 zoo.cfg 配置:
tickTime=2000
dataDir=/home/myname/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=192.168.229.160:2888:3888
server.2=192.168.229.161:2888:3888
server.3=192.168.229.162:2888:3888
在三臺機器dataDir目錄( /home/myname/zookeeper 目錄)下,分別生成一個myid檔案,其內容分別為1,2,3。然後分別在這三臺機器上啟動zk程序,這樣我們便將zk叢集啟動了起來:
可以使用以下命令來連線一個zk叢集:
zkCli -server IP:埠,IP:埠,IP:埠
客戶端連線程序(連線上哪臺機器的zk程序是隨機的),客戶端已成功連線上zk叢集。