天天看點

zookeeper叢集搭建一、zookeeper介紹二、zookeeper安裝三、zookeeper叢集搭建四、檢視zookeeper叢集五、連接配接zookeeper叢集

因為公司的業務發展,需要搭建codis叢集(一個由國内豌豆莢開發的redis叢集解決方案),但是codis叢集是依賴與zookeeper叢集的。是以這篇文章,我們主要介紹有關zookeeper叢集的搭建。

zookeeper是一個分布式的開源架構,它能很好的管理叢集,而且提供協調分布式應用的基本服務。

它向外部應用暴露一組通用服務——分布式同步(distributed synchronization)、命名服務(naming service)、叢集維護(group maintenance)等,簡化分布式應用協調及其管理的難度,提供高性能的分布式服務。

zookeeper本身可以以standalone模式(單節點狀态)安裝運作,不過它的長處在于通過分布式zookeeper叢集(一個leader,多個follower),基于一定的政策來保證zookeeper叢集的穩定性和可用性,進而實作分布式應用的可靠性。

zookeeper叢集中主要有兩個角色:leader和follower。

上司者(leader),用于負責進行投票的發起和決議,更新系統狀态。

學習者(learner),包括跟随者(follower)和觀察者(observer)。

其中follower用于接受用戶端請求并想用戶端傳回結果,在選主過程中參與投票。

而observer可以接受用戶端連接配接,将寫請求轉發給leader,但observer不參加投票過程,隻同步leader的狀态,observer的目的是為了擴充系統,提高讀取速度。

一個zookeeper叢集需要運作幾個zookeeper節點呢?

你可以運作一個zookeeper節點,但那就不是叢集了。如果要運作zookeeper叢集的話,最好部署3,5,7個zookeeper節點。本次實驗我們是以3個節點進行的。

zookeeper節點部署的越多,服務的可靠性也就越高。當然建議最好是部署奇數個,偶數個不是不可以。但是zookeeper叢集是以當機個數過半才會讓整個叢集當機的,是以奇數個叢集更佳。

你需要給每個zookeeper 1g左右的記憶體,如果可能的話,最好有獨立的磁盤,因為獨立磁盤可以確定zookeeper是高性能的。如果你的叢集負載很重,不要把zookeeper和regionserver運作在同一台機器上面,就像datanodes和tasktrackers一樣。

ps:本次實驗所使用的os有centos6、centos7和ubuntu15,如下:

zookeeper叢集搭建一、zookeeper介紹二、zookeeper安裝三、zookeeper叢集搭建四、檢視zookeeper叢集五、連接配接zookeeper叢集
zookeeper叢集搭建一、zookeeper介紹二、zookeeper安裝三、zookeeper叢集搭建四、檢視zookeeper叢集五、連接配接zookeeper叢集
zookeeper叢集搭建一、zookeeper介紹二、zookeeper安裝三、zookeeper叢集搭建四、檢視zookeeper叢集五、連接配接zookeeper叢集

為什麼本次實驗會使用到兩種三個不同的os,主要是剛好趁這個機會學習下最新的os。

zookeeper介紹完畢後,我們現在就來安裝zookeeper。而zookeeper運作需要java的支援,是以我們要首先安裝jdk。

注意:zookeeper、jdk需要在每台伺服器上都要安裝和運作。

如果是centos系統,使用如下指令安裝jdk:

yum search jdk

zookeeper叢集搭建一、zookeeper介紹二、zookeeper安裝三、zookeeper叢集搭建四、檢視zookeeper叢集五、連接配接zookeeper叢集

yum -y install java-1.6.0-openjdk

zookeeper叢集搭建一、zookeeper介紹二、zookeeper安裝三、zookeeper叢集搭建四、檢視zookeeper叢集五、連接配接zookeeper叢集

如果是ubuntu系統,使用如下指令安裝jdk:

apt-cache search jdk |grep openjdk

zookeeper叢集搭建一、zookeeper介紹二、zookeeper安裝三、zookeeper叢集搭建四、檢視zookeeper叢集五、連接配接zookeeper叢集

apt-get -y install java-1.6.0-openjdk

zookeeper叢集搭建一、zookeeper介紹二、zookeeper安裝三、zookeeper叢集搭建四、檢視zookeeper叢集五、連接配接zookeeper叢集

jdk安裝完畢後,我們來檢視下java版本,使用如下指令:

java -version

zookeeper叢集搭建一、zookeeper介紹二、zookeeper安裝三、zookeeper叢集搭建四、檢視zookeeper叢集五、連接配接zookeeper叢集

zookeeper的安裝很簡單,我們隻需要下載下傳zookeeper壓縮包,然後解壓、配置、執行就可以了。如下:

zookeeper叢集搭建一、zookeeper介紹二、zookeeper安裝三、zookeeper叢集搭建四、檢視zookeeper叢集五、連接配接zookeeper叢集

zookeeper下載下傳完畢後,我們進行如下操作:

tar -c /usr/local/ -xf zookeeper-3.4.8.tar.gz

cd /usr/local/

mv zookeeper-3.4.8 zookeeper

chown root:root -r zookeeper/

cd zookeeper

cp conf/zoo_sample.cfg conf/zoo.cfg

zookeeper叢集搭建一、zookeeper介紹二、zookeeper安裝三、zookeeper叢集搭建四、檢視zookeeper叢集五、連接配接zookeeper叢集

把zookeeper加入到環境變量,如下:

vim /etc/profile

export path=$path:/usr/local/zookeeper/bin

zookeeper叢集搭建一、zookeeper介紹二、zookeeper安裝三、zookeeper叢集搭建四、檢視zookeeper叢集五、連接配接zookeeper叢集

執行source指令使剛剛修改的環境生效,如下:

source /etc/profile

env

zookeeper叢集搭建一、zookeeper介紹二、zookeeper安裝三、zookeeper叢集搭建四、檢視zookeeper叢集五、連接配接zookeeper叢集

現在我們在其中任意一台伺服器上啟動zookeeper,使用如下指令:

bin/zkserver.sh start

zookeeper叢集搭建一、zookeeper介紹二、zookeeper安裝三、zookeeper叢集搭建四、檢視zookeeper叢集五、連接配接zookeeper叢集

檢視zookeeper端口、狀态和zookeeper日志,如下:

netstat -tunlp

bin/zkserver.sh status

cat zookeeper.out

zookeeper叢集搭建一、zookeeper介紹二、zookeeper安裝三、zookeeper叢集搭建四、檢視zookeeper叢集五、連接配接zookeeper叢集

通過上圖,我們可以很明顯的看到zookeeper監聽的是tcp的2181端口,是以standalone單機模式運作的,而且通過zookeeper日志也可以看到目前zookeeper是正常運作的。

zookeeper搭建完畢後,我們現在來配置zookeeper叢集。

注意:在搭建zookeeper叢集時,一定要停止已經啟動的zookeeper。

zookeeper叢集的搭建很簡單,我們隻需要修改每台伺服器的zoo.cfg配置檔案然後進行相關的操作即可。

先來修改zookeeper的配置檔案zoo.cfg,如下:

vim /usr/local/zookeeper/conf/zoo.cfg

ticktime=2000

initlimit=10

synclimit=5

clientport=2181

datalogdir=/usr/local/zookeeper/logs

datadir=/usr/local/zookeeper/data

server.1= 192.168.1.9:2888:3888

server.2= 192.168.1.124:2888:3888

server.3= 192.168.1.231:2888:3888

zookeeper叢集搭建一、zookeeper介紹二、zookeeper安裝三、zookeeper叢集搭建四、檢視zookeeper叢集五、連接配接zookeeper叢集

配置檔案參數說明:

ticktime這個時間是作為zookeeper伺服器之間或用戶端與伺服器之間維持心跳的時間間隔,也就是說每個ticktime時間就會發送一個心跳。

initlimit這個配置項是用來配置zookeeper接受用戶端(這裡所說的用戶端不是使用者連接配接zookeeper伺服器的用戶端,而是zookeeper伺服器叢集中連接配接到leader的follower 伺服器)初始化連接配接時最長能忍受多少個心跳時間間隔數。

當已經超過10個心跳的時間(也就是ticktime)長度後 zookeeper 伺服器還沒有收到用戶端的傳回資訊,那麼表明這個用戶端連接配接失敗。總的時間長度就是 10*2000=20秒。

synclimit這個配置項辨別leader與follower之間發送消息,請求和應答時間長度,最長不能超過多少個ticktime的時間長度,總的時間長度就是5*2000=10秒。

datadir顧名思義就是zookeeper儲存資料的目錄,預設情況下zookeeper将寫資料的日志檔案也儲存在這個目錄裡;

clientport這個端口就是用戶端連接配接zookeeper伺服器的端口,zookeeper會監聽這個端口接受用戶端的通路請求;

server.a=b:c:d中的a是一個數字,表示這個是第幾号伺服器,b是這個伺服器的ip位址,c第一個端口用來叢集成員的資訊交換,表示這個伺服器與叢集中的leader伺服器交換資訊的端口,d是在leader挂掉時專門用來進行選舉leader所用的端口。

配置檔案修改完畢後,我們來建立zookeeper資料目錄和日志目錄,使用如下指令:

mkdir -p /usr/local/zookeeper/logs

mkdir -p /usr/local/zookeeper/data

zookeeper叢集搭建一、zookeeper介紹二、zookeeper安裝三、zookeeper叢集搭建四、檢視zookeeper叢集五、連接配接zookeeper叢集

除了修改zoo.cfg配置檔案外,zookeeper叢集模式下還要配置一個myid檔案,這個檔案需要放在datadir目錄下。

這個檔案裡面有一個資料就是a的值(該a就是zoo.cfg檔案中server.a=b:c:d中的a),在zoo.cfg檔案中配置的datadir路徑中建立myid檔案。

在192.168.1.9伺服器上建立myid檔案,并設定為1,同時與zoo.cfg檔案裡面的server.1對應,如下:

echo “1” > /usr/local/zookeeper/data/myid

zookeeper叢集搭建一、zookeeper介紹二、zookeeper安裝三、zookeeper叢集搭建四、檢視zookeeper叢集五、連接配接zookeeper叢集

在192.168.1.124伺服器上建立myid檔案,并設定為2,同時與zoo.cfg檔案裡面的server.2對應,如下:

echo “2” > /usr/local/zookeeper/data/myid

zookeeper叢集搭建一、zookeeper介紹二、zookeeper安裝三、zookeeper叢集搭建四、檢視zookeeper叢集五、連接配接zookeeper叢集

在192.168.1.231伺服器上建立myid檔案,并設定為3,同時與zoo.cfg檔案裡面的server.3對應,如下:

echo “3” > /usr/local/zookeeper/data/myid

zookeeper叢集搭建一、zookeeper介紹二、zookeeper安裝三、zookeeper叢集搭建四、檢視zookeeper叢集五、連接配接zookeeper叢集

經過第三章節配置,在每台伺服器上都操作完畢後,我們現在來啟動每台伺服器上的zookeeper。如下:

cd /usr/local/zookeeper

zookeeper叢集搭建一、zookeeper介紹二、zookeeper安裝三、zookeeper叢集搭建四、檢視zookeeper叢集五、連接配接zookeeper叢集

注意:在啟動第一台zookeeper的時候可能會報錯,等三台zookeeper全部啟動完成之後就不會報錯了。

zookeeper啟動完畢後,我們來檢視各個伺服器上zookeeper的狀态。如下:

zookeeper叢集搭建一、zookeeper介紹二、zookeeper安裝三、zookeeper叢集搭建四、檢視zookeeper叢集五、連接配接zookeeper叢集
zookeeper叢集搭建一、zookeeper介紹二、zookeeper安裝三、zookeeper叢集搭建四、檢視zookeeper叢集五、連接配接zookeeper叢集
zookeeper叢集搭建一、zookeeper介紹二、zookeeper安裝三、zookeeper叢集搭建四、檢視zookeeper叢集五、連接配接zookeeper叢集

通過上述三幅圖,我們可以很明顯的看出192.168.1.9和192.168.1.124這兩台伺服器zookeeper的狀态是follow模式,192.168.1.231這台伺服器zookeeper的狀态是leader模式。

這說明zookeeper叢集已經成功搭建。

zookeeper叢集搭建完畢後,我們可以通過用戶端腳本,連接配接到zookeeper叢集上。

對于用戶端來說,zookeeper叢集是一個整體,連接配接到zookeeper叢集實際上感覺在獨享整個叢集的服務,是以,你可以在任何一個結點上建立到服務叢集的連接配接,例如:

bin/zkcli.sh -server 192.168.1.9:2181

zookeeper叢集搭建一、zookeeper介紹二、zookeeper安裝三、zookeeper叢集搭建四、檢視zookeeper叢集五、連接配接zookeeper叢集
zookeeper叢集搭建一、zookeeper介紹二、zookeeper安裝三、zookeeper叢集搭建四、檢視zookeeper叢集五、連接配接zookeeper叢集

通過上圖,我們可以很明顯的看出在192.168.1.124這台機器上連接配接192.168.1.9伺服器上的zookeeper是正常的,而且目前根路徑為/zookeeper。

到此有關zookeeper叢集搭建就完全結束。