Zookeeper學習之路 (二)集羣搭建

ZooKeeper 軟件安裝須知

鑑於 ZooKeeper 自己的特色,服務器集羣的節點數推薦設置爲奇數臺。我這裏我規劃爲三臺, 爲別爲 hadoop1,hadoop2,hadoop3算法

ZooKeeper 的集羣安裝

ZooKeeper 的下載

下載地址:http://mirrors.hust.edu.cn/apache/ZooKeeper/數據庫

此處使用的是3.4.10版本apache

解壓安裝到本身的目錄

[hadoop@hadoop1 ~]$ tar -zxvf zookeeper-3.4.10.tar.gz -C apps/

ZooKeeper 運行最重要的四個東西安全

修改配置文件

[hadoop@hadoop1 zookeeper-3.4.10]$ cd conf/
[hadoop@hadoop1 conf]$ mv zoo_sample.cfg zoo.cfg
[hadoop@hadoop1 conf]$ vi zoo.cfg 

基本配置

tickTimebash

心跳基本時間單位,毫秒級,ZK基本上全部的時間都是這個時間的整數倍。服務器

initLimit網絡

tickTime的個數,表示在leader選舉結束後,followers與leader同步須要的時間,若是followers比較多或者說leader的數據灰常多時,同步時間相應可能會增長,那麼這個值也須要相應增長。固然,這個值也是follower和observer在開始同步leader的數據時的最大等待時間(setSoTimeout)session

syncLimitapp

tickTime的個數,這時間容易和上面的時間混淆,它也表示follower和observer與leader交互時的最大等待時間,只不過是在與leader同步完畢以後,進入正常請求轉發或ping等消息交互時的超時時間。ide

dataDir

內存數據庫快照存放地址,若是沒有指定事務日誌存放地址(dataLogDir),默認也是存放在這個路徑下,建議兩個地址分開存放到不一樣的設備上。

clientPort

配置ZK監聽客戶端鏈接的端口

在配置文件末尾添加

server.serverid=host:tickpot:electionport

server:固定寫法
serverid:每一個服務器的指定ID(必須處於1-255之間,必須每一臺機器不能重複)
host:主機名
tickpot:心跳通訊端口
electionport:選舉端口

高級配置

dataLogDir

將事務日誌存儲在該路徑下,比較重要,這個日誌存儲的設備效率會影響ZK的寫吞吐量。

globalOutstandingLimit

(Java system property: zookeeper.globalOutstandingLimit)默認值是1000,限定了全部鏈接到服務器上可是尚未返回響應的請求個數(全部客戶端請求的總數,不是鏈接總數),這個參數是針對單臺服務器而言,設定太大可能會致使內存溢出。

preAllocSize

(Java system property: zookeeper.preAllocSize)默認值64M,以KB爲單位,預先分配額定空間用於後續transactionlog 寫入,每當剩餘空間小於4K時,就會又分配64M,如此循環。若是SNAP作得比較頻繁(snapCount比較小的時候),那麼請減小這個值。

snapCount

(Java system property: zookeeper.snapCount)默認值100,000,當transaction每達到snapCount/2+rand.nextInt(snapCount/2)時,就作一次SNAPSHOT,默認狀況下是50,000~100,000條transactionlog就會作一次,之因此用隨機數是爲了不全部服務器可能在同一時間作snapshot.

traceFile (Java system property: requestTraceFile)

maxClientCnxns

默認值是10,一個客戶端可以鏈接到同一個服務器上的最大鏈接數,根據IP來區分。若是設置爲0,表示沒有任何限制。設置該值一方面是爲了防止DoS攻擊。

clientPortAddress

與clientPort匹配,表示某個IP地址,若是服務器有多個網絡接口(多個IP地址),若是沒有設置這個屬性,則clientPort會綁定到全部IP地址上,不然只綁定到該設置的IP地址上。

minSessionTimeout

最小的session time時間,默認值是2個tick time,客戶端設置的session time 若是小於這個值,則會被強制協調爲這個最小值。

maxSessionTimeout

最大的session time 時間,默認值是20個tick time. ,客戶端設置的session time 若是大於這個值,則會被強制協調爲這個最大值。

集羣配置選項

electionAlg

領導選舉算法,默認是3(fast leader election,基於TCP),0表示leader選舉算法(基於UDP),1表示非受權快速選舉算法(基於UDP),2表示受權快速選舉算法(基於UDP),目前1和2算法都沒有應用,不建議使用,0算法將來也可能會被幹掉,只保留3(fast leader election)算法,所以最好直接使用默認就好。

initLimit

tickTime的個數,表示在leader選舉結束後,followers與leader同步須要的時間,若是followers比較多或者說leader的數據灰常多時,同步時間相應可能會增長,那麼這個值也須要相應增長。固然,這個值也是follower和observer在開始同步leader的數據時的最大等待時間(setSoTimeout)

syncLimit

tickTime的個數,這時間容易和上面的時間混淆,它也表示follower和observer與leader交互時的最大等待時間,只不過是在與leader同步完畢以後,進入正常請求轉發或ping等消息交互時的超時時間。

leaderServes

(Java system property: zookeeper.leaderServes)  若是該值不是no,則表示該服務器做爲leader時是須要接受客戶端鏈接的。爲了得到更高吞吐量,當服務器數三臺以上時通常建議設置爲no。

cnxTimeout 

(Java system property: zookeeper.cnxTimeout) 默認值是5000,單位ms 表示leaderelection時打開鏈接的超時時間,只用在算法3中。

ZK的不安全配置項

skipACL

(Java systemproperty: zookeeper.skipACL) 默認值是no,忽略全部ACL檢查,至關於開放了全部數據權限給任何人。

forceSync

(Java systemproperty: zookeeper.forceSync) 默認值是yes, 表示transactionlog在commit時是否當即寫到磁盤上,若是關閉這個選項可能會在斷電時丟失信息。

jute.maxbuffer

(Java system property: jute.maxbuffer)默認值0xfffff,單位是KB,表示節點數據最多1M。若是要設置這個值,必需要在全部服務器上都須要設置。

受權認證配置項

DigestAuthenticationProvider.superDigest

(Java system property only: zookeeper.DigestAuthenticationProvider.superDigest)   設置這個值是爲了肯定一個超級用戶,它的值格式爲

super:<base64encoded(SHA1(idpassword))> ,一旦當前鏈接addAuthInfo超級用戶驗證經過,後續全部操做都不會checkACL.

將配置文件分發到集羣其餘機器中

[hadoop@hadoop1 apps]$ scp -r zookeeper-3.4.10/ hadoop2:$PWD
[hadoop@hadoop1 apps]$ scp -r zookeeper-3.4.10/ hadoop3:$PWD

而後是最重要的步驟,必定不能忘了。 去你的各個 ZooKeeper 服務器節點,新建目錄 dataDir=/home/hadoop/data/zkdata,這個 目錄就是你在 zoo.cfg 中配置的 dataDir 的目錄,建好以後,在裏面新建一個文件,文件 名叫 myid,裏面存放的內容就是服務器的 id,就是 server.1=hadoop01:2888:3888 當中的 id, 就是 1,那麼對應的每一個服務器節點都應該作相似的操做 拿服務器 hadoop1 舉例:

[hadoop@hadoop1 ~]$ mkdir /home/hadoop/data/zkdata
[hadoop@hadoop1 ~]$ cd data/zkdata/
[hadoop@hadoop1 zkdata]$ echo 1 > myid

當以上全部步驟都完成時,意味着咱們 ZooKeeper 的配置文件相關的修改都作完了。

配置環境變量

[hadoop@hadoop1 ~]$ vi .bashrc 
#Zookeeper
export ZOOKEEPER_HOME=/home/hadoop/apps/zookeeper-3.4.10
export PATH=$PATH:$ZOOKEEPER_HOME/bin

保存退出

[hadoop@hadoop1 ~]$ source .bash

啓動軟件,並驗證安裝是否成功

命令

啓動:zkServer.sh start
中止:zkServer.sh stop
查看狀態:zkServer.sh status

注意:雖然咱們在配置文件中寫明瞭服務器的列表信息,可是,咱們仍是須要去每一臺服務 器去啓動,不是一鍵啓動集羣模式

每啓動一臺查看一下狀態再啓動下一臺

啓動hadoop1

[hadoop@hadoop1 ~]$ zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/hadoop/apps/zookeeper-3.4.10/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@hadoop1 ~]$ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/hadoop/apps/zookeeper-3.4.10/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
[hadoop@hadoop1 ~]$ 

啓動hadoop2

[hadoop@hadoop2 ~]$ zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/hadoop/apps/zookeeper-3.4.10/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@hadoop2 ~]$ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/hadoop/apps/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: leader
[hadoop@hadoop2 ~]$ 

此時在查看hadoop1的狀態

啓動hadoop3

[hadoop@hadoop3 ~]$ zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/hadoop/apps/zookeeper-3.4.10/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@hadoop3 ~]$ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/hadoop/apps/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower
[hadoop@hadoop3 ~]$ 

查看進程

3臺機器上都有QuorumPeerMain進程

[hadoop@hadoop1 ~]$ jps 2499 Jps
2404 QuorumPeerMain
[hadoop@hadoop1 ~]$ 
相關文章
相關標籤/搜索