Zookeeper叢集環境搭建,手寫指令碼啟動整個叢集
什麼是Zookeeper
Zookeeper是一個分散式開源框架,提供了協調分散式應用的基本服務,它向外部應用暴露一組通用服務——分散式同步(Distributed Synchronization)、命名服務(Naming Service)、叢集維護(Group Maintenance)等,簡化分散式應用協調及其管理的難度,提供高效能的分散式服務。ZooKeeper本身可以以單機模式安裝執行,不過它的長處在於通過分散式ZooKeeper叢集(一個Leader,多個Follower),基於一定的策略來保證ZooKeeper叢集的穩定性和可用性,從而實現分散式應用的可靠性。
Zookeeper簡介
1、Zookeeper是為別的分散式程式服務的
2、Zookeeper本身就是一個分散式程式(只要有半數以上節點存活,zk就能正常服務)
3、Zookeeper所提供的服務涵蓋:主從協調、伺服器節點動態上下線、統一配置管理、分散式共享鎖、統> 一名稱服務等
4、雖然說可以提供各種服務,但是zookeeper在底層其實只提供了兩個功能:
4.1:管理(儲存,讀取)使用者程式提交的資料(類似namenode中存放的metadata)
4.2:為使用者程式提供資料節點監聽服務
Zookeeper應用場景圖
Zookeeper叢集機制
Zookeeper叢集的角色: Leader 和 follower
只要叢集中有半數以上節點存活,叢集就能提供服務
Zookeeper特性
1、Zookeeper:一個leader,多個follower組成的叢集
2、全域性資料一致:每個server儲存一份相同的資料副本,client無論連線到哪個server,資料都是一致的
3、分散式讀寫,更新請求轉發,由leader實施
4、更新請求順序進行,來自同一個client的更新請求按其傳送順序依次執行
5、資料更新原子性,一次資料更新要麼成功,要麼失敗
6、實時性,在一定時間範圍內,client能讀到最新資料
zookeeper的資料儲存機制
資料儲存形式
zookeeper中對使用者的資料採用kv形式儲存
只是zk有點特別:
key:是以路徑的形式表示的,那就以為著,各key之間有父子關係,比如
/ 是頂層key
使用者建的key只能在/ 下作為子節點,比如建一個key: /aa 這個key可以帶value資料
也可以建一個key: /bb
也可以建key: /aa/xx
zookeeper中,對每一個數據key,稱作一個znode
綜上所述,zk中的資料儲存形式如下:
znode型別
zookeeper中的znode有多種型別:
- PERSISTENT 持久的:建立者就算跟叢集斷開聯絡,該類節點也會持久存在與zk叢集中
- EPHEMERAL 短暫的:建立者一旦跟叢集斷開聯絡,zk就會將這個節點刪除
- SEQUENTIAL 帶序號的:這類節點,zk會自動拼接上一個序號,而且序號是遞增的
組合型別:
PERSISTENT :持久不帶序號
EPHEMERAL :短暫不帶序號
PERSISTENT 且 SEQUENTIAL :持久且帶序號
EPHEMERAL 且 SEQUENTIAL :短暫且帶序號
zookeeper的叢集部署
叢集選舉示意圖
解壓Zokeeper安裝包到apps目錄下
tar -zxvf zookeeper-3.4.6.tar.gz -C appscd /root/apps/zookeeper-3.4.6/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
修改dataDir=/root/zkdata
在後面加上叢集的機器:2888是leader和follower通訊埠,3888是投票的
server.1=hdp-01:2888:3888
server.2=hdp-02:2888:3888
server.3=hdp-03:2888:3888對3臺節點,都建立目錄 mkdir /root/zkdata
對3臺節點,在工作目錄中生成myid檔案,但內容要分別為各自的id: 1,2,3
echo 1 > /root/zkdata/myid
echo 2 > /root/zkdata/myid
echo 3 > /root/zkdata/myid從hdp20-01上scp安裝目錄到其他兩個節點
cd apps
scp -r zookeeper-3.4.6/ hdp-02:$PWD
scp -r zookeeper-3.4.6/ hdp-03:$PWD啟動zookeeper叢集
zookeeper沒有提供自動批量啟動指令碼,需要手動一臺一臺地起zookeeper程序
在每一臺節點上,執行命令:
cd /root/apps/zookeeper-3.4.6
bin/zkServer.sh start
啟動後,用jps應該能看到一個程序:QuorumPeerMain但是,光有程序不代表zk已經正常服務,需要用命令檢查狀態:
bin/zkServer.sh status
能看到角色模式:為leader或follower,即正常了。自己寫個指令碼,一鍵啟動
vi zkmanage.sh#!/bin/bash
for host in hdp-01 hdp-02 hdp-03
do
echo "${host}:$1ing....."
ssh $host "/root/apps/zookeeper-3.4.6/bin/zkServer.sh $1"
done停止命令:sh zjmanage.sh stop
加個可執行許可權:chmod +zkmanage.sh
啟動命令:./zkmanage.sh start
但是出現沒有Java環境變數問題,修改配置檔案
vi zkmanage.sh
修改配置如下#!/bin/bash
for host in hdp-01 hdp-02 hdp-03
do
echo "${host}:$1ing....."
ssh $host "source /etc/profile;/root/apps/zookeeper-3.4.6/bin/zkServer.sh $1"
donesleep 2
for host in hdp-01 hdp-02 hdp-03
do
ssh $host "source /etc/profile;/root/apps/zookeeper-3.4.6/bin/zkServer.sh status"
done
啟動叢集結果
hdp-01:starting.....
JMX enabled by default
Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
hdp-02:starting.....
JMX enabled by default
Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
hdp-03:starting.....
JMX enabled by default
Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
JMX enabled by default
Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower
JMX enabled by default
Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: leader
JMX enabled by default
Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower