zookeeper的安裝與部署-集羣

環境:centos7 、JDK8apache

1、Zookeeper原理簡介vim

ZooKeeper是一個開放源碼的分佈式應用程序協調服務,它包含一個簡單的原語集,分佈式應用程序能夠基於它實現同步服務,配置維護和命名服務等。centos

Zookeeper設計目的服務器

  • 最終一致性:client不論鏈接到那個Server,展現給它的都是同一個視圖。
  • 可靠性:具備簡單、健壯、良好的性能、若是消息m被到一臺服務器接收,那麼消息m將被全部服務器接收。
  • 實時性:Zookeeper保證客戶端將在一個時間間隔範圍內得到服務器的更新信息,或者服務器失效的信息。但因爲網絡延時等緣由,Zookeeper不能保證兩個客戶端能同時獲得剛更新的數據,若是須要最新數據,應該在讀數據以前調用sync()接口。
  • 等待無關(wait-free):慢的或者失效的client不得干預快速的client的請求,使得每一個client都能有效的等待。
  • 原子性:更新只能成功或者失敗,沒有中間狀態。
  • 順序性:包括全局有序和偏序兩種:全局有序是指若是在一臺服務器上消息a在消息b前發佈,則在全部Server上消息a都將在消息b前被髮布;偏序是指若是一個消息b在消息a後被同一個發送者發佈,a必將排在b前面。

Zookeeper工做原理網絡

一、在zookeeper的集羣中,各個節點共有下面3種角色和4種狀態:分佈式

角色:leader,follower,observer
狀態:leading,following,observing,looking性能

Zookeeper的核心是原子廣播,這個機制保證了各個Server之間的同步。實現這個機制的協議叫作Zab協議(ZooKeeper Atomic Broadcast protocol)。Zab協議有兩種模式,它們分別是恢復模式(Recovery選主)和廣播模式(Broadcast同步)。當服務啓動或者在領導者崩潰後,Zab就進入了恢復模式,當領導者被選舉出來,且大多數Server完成了和leader的狀態同步之後,恢復模式就結束了。狀態同步保證了leader和Server具備相同的系統狀態。centos7

爲了保證事務的順序一致性,zookeeper採用了遞增的事務id號(zxid)來標識事務。全部的提議(proposal)都在被提出的時候加上了zxid。實現中zxid是一個64位的數字,它高32位是epoch用來標識leader關係是否改變,每次一個leader被選出來,它都會有一個新的epoch,標識當前屬於那個leader的統治時期。低32位用於遞增計數。設計

每一個Server在工做過程當中有4種狀態:server

LOOKING:當前Server不知道leader是誰,正在搜尋。

LEADING:當前Server即爲選舉出來的leader。

FOLLOWING:leader已經選舉出來,當前Server與之同步。

OBSERVING:observer的行爲在大多數狀況下與follower徹底一致,可是他們不參加選舉和投票,而僅僅接受(observing)選舉和投票的結果。

Zookeeper集羣節點

  • Zookeeper節點部署越多,服務的可靠性越高,建議部署奇數個節點,由於zookeeper集羣是以宕機個數過半纔會讓整個集羣宕機的。
  • 須要給每一個zookeeper 1G左右的內存,若是可能的話,最好有獨立的磁盤,由於獨立磁盤能夠確保zookeeper是高性能的。若是你的集羣負載很重,不要把zookeeper和RegionServer運行在同一臺機器上面,就像DataNodes和TaskTrackers同樣。

 

搭建流程

1.Zookeeper的下載與解壓
經過後面的連接下載Zookeeper:    Zookeeper下載
在此咱們下載zookeeper-3.4.8
下載後解壓至安裝目錄下,本文咱們解壓到目錄:/opt/zookeeper-3.4.8

$:tar -xzvf zookeeper-3.4.8.tar.gz -C /opt/

以下圖所示:
  

 

 2.zookeeper的環境變量的配置:

爲了從此操做方便,咱們須要對Zookeeper的環境變量進行配置,方法以下:
在/etc/profile文件中加入以下的內容:

#set zookeeper environment

export ZOOKEEPER_HOME=/opt/zookeeper-3.4.8
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf

 

而後 source /etc/profile 刷新一下配置

 

-----------------------------------------------------------------------------------------------------------------------------------------


3.集羣部署:
在Zookeeper集羣環境下只要一半以上的機器正常啓動了,那麼Zookeeper服務將是可用的。所以,集羣上部署Zookeeper最好使用奇數臺機器,這樣若是有5臺機器,只要3臺正常工做則服務將正常使用。
下面咱們將對Zookeeper的配置文件的參數進行設置:
進入zookeeper-3.4.8/conf:
 

$:cp zoo_sample.cfg zoo.cfg

$:vim zoo.cfg

可參考以下配置:

tickTime=2000
initLimit=10
syncLimit=5
dataLogDir=/opt/zookeeper-3.4.8/logs
dataDir=/opt/zookeeper-3.4.8/data
clientPort=2181
autopurge.snapRetainCount=500
autopurge.purgeInterval=24
server.1= master:2888:3888
server.2= slave1:2888:3888
server.3= slave2:2888:3888

#建立相關目錄,三臺節點都須要

mkdir -p /opt/zookeeper/{logs,data}

#其他zookeeper節點安裝完成以後,同步配置文件zoo.cfg。

 

注意上圖的配置中master,slave1,slave2分別爲主機名。

須要配置相應的hosts  

192.168.1.213 master
192.168.1.216 slave1
192.168.1.217 slave2

  

在上面的配置文件中"server.id=host:port:port"中的第一個port是從機器(follower)鏈接到主機器(leader)的端口號,第二個port是進行leadership選舉的端口號。



4.遠程複製分發安裝文件
接下來將上面的安裝文件拷貝到集羣中的其餘機器上對應的目錄下:
 

root@master:~/zookeeper-3.4.8$ scp -r zookeeper-3.4.8/ slave1:/opt/zookeeper-3.4.8

root@master:~/zookeeper-3.4.8$ scp -r zookeeper-3.4.8/ slave2:/opt/zookeeper-3.4.8

 

拷貝完成後,在每臺機器上zoo.cfg指定的dataDir文件下添加myid文件,內容只有簡單的一行,爲對應的id號。例如修改slave1中的id以下:

root@slave1:~/opt/zookeeper-3.4.8$ echo "2" >/tmp/zookeeper-3.4.8/data/myid

 

5.啓動ZooKeeper集羣
在ZooKeeper集羣的每一個結點上,執行啓動ZooKeeper服務的腳本,以下所示:
 

haduser@master:~/opt/zookeeper-3.4.8$ bin/zkServer.sh start

  haduser@slave1:~/opt/zookeeper-3.4.8$ bin/zkServer.sh start

  haduser@slave2:~/opt/zookeeper-3.4.8$ bin/zkServer.sh start

以下圖所示:

 

其中,QuorumPeerMain是zookeeper進程,啓動正常。


如上依次啓動了全部機器上的Zookeeper以後能夠經過ZooKeeper的腳原本查看啓動狀態

bin/zkServer.sh status

包括集羣中各個結點的角色(或是Leader,或是Follower),以下所示,是在ZooKeeper集羣中的每一個結點上查詢的結果:

 

 

 

經過上面狀態查詢結果可見,slave1是集羣的Leader,其他的兩個結點是Follower。


另外,能夠經過客戶端腳本,鏈接到ZooKeeper集羣上。對於客戶端來講,ZooKeeper是一個總體(ensemble),鏈接到ZooKeeper集羣實際上感受在獨享整個集羣的服務,因此,你能夠在任何一個結點上創建到服務集羣的鏈接,例如:

 

 


6.中止zookeeper進程:zookeeper-3.4.3/bin/zkServer.sh stop

相關文章
相關標籤/搜索