mac 下安裝 zookeeper.tar.gz
Zookeeper 是 什 麼?
(摘抄)有這樣一個場景:系統中有大約100w的使用者,每個使用者平 均有3個郵箱賬號,每隔5分鐘,每個郵箱賬需要收取100封郵件,最多3億份郵件需要下載到伺服器中(不含附件和正文)。用20臺機器劃分計算的壓力,從 多個不同的網路出口進行訪問外網,計算的壓力得到緩解,那麼每臺機器的計算壓力也不會很大了。
通過我們的討論和以往的經驗判斷在這場景中可以實現平行計算,但我們還期望能對平行計算的節點進行動態的新增/刪除,做到線上更新平行計算的數目並且不會影響計算單元中的其他計算節點,但是有4個問題需要解決,否則會出現一些嚴重的問題:
- 20臺機器同時工作時,有一臺機器down掉了,其他機器怎麼進行接管計算任務,否則有些使用者的業務不會被處理,造成使用者服務終斷。
- 隨著使用者數量增加,新增機器是可以解決計算的瓶頸,但需要重啟所有計算節點,如果需要,那麼將會造成整個系統的不可用。
- 使用者數量增加或者減少,計算節點中的機器會出現有的機器資源使用率繁忙,有的卻空閒,因為計算節點不知道彼此的執行負載狀態。
- 怎麼去通知每個節點彼此的負載狀態,怎麼保證通知每個計算節點方式的可靠性和實時性。
先不說那麼多專業名詞,白話來說我們需要的是:1記錄狀態,2事件通知 ,3可靠穩定的中央排程器,4易上手、管理簡單。
採用Zookeeper完全可以解決我們的問題,分散式計算中的協調員,觀察者,分散式鎖都可以作為zookeeper的關鍵詞,在系統中利用Zookeeper來處理事件通知,佇列,優先佇列,鎖,共享鎖等功能,利用這些特色在分散式計算中發揮重要的作用。
Zookeeper 的安裝
下載地址:http://www.apache.org/dyn/closer.cgi/zookeeper
首先從官網下載ZooKeeper壓縮包,然後解壓下載得到的ZooKeeper壓縮包,發現有“bin,conf,lib”等目錄。“bin目錄”中存放有執行指令碼;“conf目錄”中存放有配置檔案;“lib目錄”中存放有執行所需要第三方庫。
解壓檔案:
tar zxvf zookeeper-3.4.8.tar.gz
Zookeeper 的配置
一、單機模式
1.1、編輯配置檔案
在“conf”目錄下,新建一個名為“zoo.cfg”的檔案,其中內容如下:
tickTime=2000
dataDir= /usr/myenv/zookeeper-3.4.8/data (填寫自己的data目錄)
dataLogDir=/usr/myenv/zookeeper-3.4.8/logs
clientPort=2181
引數說明:
#tickTime: zookeeper中使用的基本時間單位, 毫秒值.
#dataDir: 資料目錄. 可以是任意目錄.
#dataLogDir: log目錄, 同樣可以是任意目錄. 如果沒有設定該引數, 將使用和#dataDir相同的設定.
#clientPort: 監聽client連線的埠號.
1.2、執行ZooKeeper Server
執行./bin/zkServer.sh start命令,執行ZooKeeper Server程序,得到如圖所示結果,表示後臺執行ZooKeeper Server程序成功。
圖片 1.png
注:命令telnet 127.0.0.1 2181 連線成功驗證Zookeeper 是否啟動成功
停止:./bin/zkServer.sh stop
也可以執行bin/zkServer.sh start-foreground命令,非後臺執行ZooKeeper Server程序
圖片 2.png
二、叢集模式
叢集模式有兩種形式:
1)使用多臺機器,在每臺機器上執行一個ZooKeeper Server程序;
2)使用一臺機器,在該臺機器上執行多個ZooKeeper Server程序。
在生產環境中,一般使用第一種形式,在練習環境中,一般使用第二種形式。
2.1、引數配置
叢集模式下,需要配置一些引數,以下是常見的一些引數。
- data目錄
用於存放程序執行資料。 - data目錄下的myid檔案
用於儲存一個數值,用來作為該ZooKeeper Server程序的標識。 - 監聽Client端請求的埠號
- 監聽同ZooKeeper叢集內其他Server程序通訊請求的埠號
- 監聽ZooKeeper叢集內“leader”選舉請求的埠號
該埠號用來監聽ZooKeeper叢集內“leader”選舉的請求。注意這個是ZooKeeper叢集內“leader”的選舉,跟分散式應用程式無關。
引數配置注意事項:
1)同一個ZooKeeper叢集內,不同ZooKeeper Server程序的標識需要不一樣,即myid檔案內的值需要不一樣
2)採用上述第2種形式構建ZooKeeper叢集,需要注意“目錄,埠號”等資源的不可共享性,如果共享會導致ZooKeeper Server程序不能正常執行,比如“data目錄,幾個監聽埠號”都不能被共享
myid | Data目錄 | Client | Server | Leader | 配置檔案 |
---|---|---|---|---|---|
1 | /z1/data | 2181 | 2222 | 2223 | z1.cfg |
2 | /z2/data | 2182 | 3333 | 3334 | z2.cfg |
3 | /z3/data | 2183 | 4444 | 4445 | z3.cfg |
配置如下:
# zx.cfg
tickTime=2000
initLimit=10
syncLimit=2
dataDir=/usr/myenv/zookeeper-3.4.8/zx/data
clientPort=218x
# server.x中的“x”表示ZooKeeper Server程序的標識
server.1=127.0.0.1:2222:2225
server.2=127.0.0.1:3333:3335
server.3=127.0.0.1:4444:4445
注:
- initLimit: zookeeper叢集中的包含多臺server, 其中一臺為leader, 叢集中其餘的server為follower. initLimit引數配置初始化連線時, follower和leader之間的最長心跳時間. 此時該引數設定為5, 說明時間限制為5倍tickTime, 即5*2000=10000ms=10s.
- syncLimit: 該引數配置leader和follower之間傳送訊息, 請求和應答的最大時間長度. 此時該引數設定為2, 說明時間限制為2倍tickTime, 即4000ms.
2.2、執行ZooKeeper Server
分別執行
執行上述配置的3個ZooKeeper Server程序。bin/zkServer.sh start deploy/z1/z1.cfg, bin/zkServer.sh start deploy/z2/z2.cfg bin/zkServer.sh start deploy/z3/z3.cfg
2.3、執行ZooKeeper命令列客戶端
執行命令
建立ZooKeeper Client端到ZooKeeper叢集的連線會話。bin/zkCli.sh -server 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183