新聞中心
ZooKeeper 是一個針對大型分布式系統(tǒng)的可靠協(xié)調系統(tǒng),提供的功能包括:配置維護、名字服務、分布式同步、組服務等,下面為大家分享一下Zookeeper集群搭建具體步驟。

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設,榆次企業(yè)網(wǎng)站建設,榆次品牌網(wǎng)站建設,網(wǎng)站定制,榆次網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,榆次網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
一、Zookeeper原理簡介
ZooKeeper是一個開放源碼的分布式應用程序協(xié)調服務,它包含一個簡單的原語集,分布式應用程序可以基于它實現(xiàn)同步服務,配置維護和命名服務等。
Zookeeper設計目的
-
最終一致性:client不論連接到那個Server,展示給它的都是同一個視圖。
-
可靠性:具有簡單、健壯、良好的性能、如果消息m被到一臺服務器接收,那么消息m將被所有服務器接收。
-
實時性:Zookeeper保證客戶端將在一個時間間隔范圍內(nèi)獲得服務器的更新信息,或者服務器失效的信息。但由于網(wǎng)絡延時等原因,Zookeeper不能保證兩個客戶端能同時得到剛更新的數(shù)據(jù),如果需要最新數(shù)據(jù),應該在讀數(shù)據(jù)之前調用sync()接口。
-
等待無關(wait-free):慢的或者失效的client不得干預快速的client的請求,使得每個client都能有效的等待。
-
原子性:更新只能成功或者失敗,沒有中間狀態(tài)。
-
順序性:包括全局有序和偏序兩種:全局有序是指如果在一臺服務器上消息a在消息b前發(fā)布,則在所有Server上消息a都將在消息b前被發(fā)布;偏序是指如果一個消息b在消息a后被同一個發(fā)送者發(fā)布,a必將排在b前面。
Zookeeper工作原理
1、在zookeeper的集群中,各個節(jié)點共有下面3種角色和4種狀態(tài):
角色:leader,follower,observer 狀態(tài):leading,following,observing,looking
Zookeeper的核心是原子廣播,這個機制保證了各個Server之間的同步。實現(xiàn)這個機制的協(xié)議叫做Zab協(xié)議(ZooKeeper Atomic Broadcast protocol)。Zab協(xié)議有兩種模式,它們分別是恢復模式(Recovery選主)和廣播模式(Broadcast同步)。當服務啟動或者在領導者崩潰后,Zab就進入了恢復模式,當領導者被選舉出來,且大多數(shù)Server完成了和leader的狀態(tài)同步以后,恢復模式就結束了。狀態(tài)同步保證了leader和Server具有相同的系統(tǒng)狀態(tài)。
為了保證事務的順序一致性,zookeeper采用了遞增的事務id號(zxid)來標識事務。所有的提議(proposal)都在被提出的時候加上了zxid。實現(xiàn)中zxid是一個64位的數(shù)字,它高32位是epoch用來標識leader關系是否改變,每次一個leader被選出來,它都會有一個新的epoch,標識當前屬于那個leader的統(tǒng)治時期。低32位用于遞增計數(shù)。
每個Server在工作過程中有4種狀態(tài):
LOOKING:當前Server不知道leader是誰,正在搜尋。
LEADING:當前Server即為選舉出來的leader。
FOLLOWING:leader已經(jīng)選舉出來,當前Server與之同步。
OBSERVING:observer的行為在大多數(shù)情況下與follower完全一致,但是他們不參加選舉和投票,而僅僅接受(observing)選舉和投票的結果。
Zookeeper集群節(jié)點
-
Zookeeper節(jié)點部署越多,服務的可靠性越高,建議部署奇數(shù)個節(jié)點,因為zookeeper集群是以宕機個數(shù)過半才會讓整個集群宕機的。
-
需要給每個zookeeper 1G左右的內(nèi)存,如果可能的話,最好有獨立的磁盤,因為獨立磁盤可以確保zookeeper是高性能的。如果你的集群負載很重,不要把zookeeper和RegionServer運行在同一臺機器上面,就像DataNodes和TaskTrackers一樣。
實驗環(huán)境
| 主機名 | 系統(tǒng) | IP地址 |
|---|---|---|
| linux-node1 | CentOS release 6.8 | 192.168.1.148 |
| linux-node2 | CentOS release 6.8 | 192.168.1.149 |
| linux-node2 | CentOS release 6.8 | 192.168.1.150 |
二、Zookeeper安裝
Zookeeper運行需要java環(huán)境,需要安裝jdk,注:每臺服務器上面都需要安裝zookeeper、jdk,建議本地下載好需要的安裝包然后上傳到服務器上面,服務器上面下載速度太慢。
2.1、JDK安裝
JDK下載地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
rpm -ivh jdk-8u101-linux-x64.rpm
Zookeeper集群搭建Zookeeper集群搭建
2.2、Zookeeper安裝
Zookeeper鏈接:http://zookeeper.apache.org/
wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz -P /usr/local/src/
tar zxvf zookeeper-3.4.8.tar.gz -C /opt
cd /opt && mv zookeeper-3.4.8 zookeeper
cd zookeeper
cp conf/zoo_sample.cfg conf/zoo.cfg
#把zookeeper加入到環(huán)境變量
echo -e "# append zk_env\nexport PATH=$PATH:/opt/zookeeper/bin" >> /etc/profile
三、Zookeeper集群配置
注意:搭建zookeeper集群時,一定要先停止已經(jīng)啟動的zookeeper節(jié)點。
3.1、Zookeeper配置文件修改
#修改過后的配置文件zoo.cfg,如下:
egrep -v "^#|^$" zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataLogDir=/opt/zookeeper/logs
dataDir=/opt/zookeeper/data
clientPort=2181
autopurge.snapRetainCount=500
autopurge.purgeInterval=24
server.1= 192.168.1.148:2888:3888
server.2= 192.168.1.149:2888:3888
server.3= 192.168.1.150:2888:3888
#創(chuàng)建相關目錄,三臺節(jié)點都需要
mkdir -p /opt/zookeeper/{logs,data}
#其余zookeeper節(jié)點安裝完成之后,同步配置文件zoo.cfg。
3.2、配置參數(shù)說明
tickTime這個時間是作為zookeeper服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是說每個tickTime時間就會發(fā)送一個心跳。
initLimit這個配置項是用來配置zookeeper接受客戶端(這里所說的客戶端不是用戶連接zookeeper服務器的客戶端,而是zookeeper服務器集群中連接到leader的follower 服務器)初始化連接時最長能忍受多少個心跳時間間隔數(shù)。
當已經(jīng)超過10個心跳的時間(也就是tickTime)長度后 zookeeper 服務器還沒有收到客戶端的返回信息,那么表明這個客戶端連接失敗。總的時間長度就是 10*2000=20秒。
syncLimit這個配置項標識leader與follower之間發(fā)送消息,請求和應答時間長度,最長不能超過多少個tickTime的時間長度,總的時間長度就是5*2000=10秒。
dataDir顧名思義就是zookeeper保存數(shù)據(jù)的目錄,默認情況下zookeeper將寫數(shù)據(jù)的日志文件也保存在這個目錄里;
clientPort這個端口就是客戶端連接Zookeeper服務器的端口,Zookeeper會監(jiān)聽這個端口接受客戶端的訪問請求;
server.A=B:C:D中的A是一個數(shù)字,表示這個是第幾號服務器,B是這個服務器的IP地址,C第一個端口用來集群成員的信息交換,表示這個服務器與集群中的leader服務器交換信息的端口,D是在leader掛掉時專門用來進行選舉leader所用的端口。
3.3、創(chuàng)建ServerID標識
除了修改zoo.cfg配置文件外,zookeeper集群模式下還要配置一個myid文件,這個文件需要放在dataDir目錄下。
這個文件里面有一個數(shù)據(jù)就是A的值(該A就是zoo.cfg文件中server.A=B:C:D中的A),在zoo.cfg文件中配置的dataDir路徑中創(chuàng)建myid文件。
#在192.168.1.148服務器上面創(chuàng)建myid文件,并設置值為1,同時與zoo.cfg文件里面的server.1保持一致,如下
echo "1" > /opt/zookeeper/data/myid
Zookeeper集群搭建Zookeeper集群搭建
#在192.168.1.149服務器上面創(chuàng)建myid文件,并設置值為1,同時與zoo.cfg文件里面的server.2保持一致,如下
echo "2" > /opt/zookeeper/data/myid
Zookeeper集群搭建Zookeeper集群搭建
#在192.168.1.150服務器上面創(chuàng)建myid文件,并設置值為1,同時與zoo.cfg文件里面的server.3保持一致,如下
echo "3" > /opt/zookeeper/data/myid
Zookeeper集群搭建Zookeeper集群搭建
到此,相關配置已完成
四、Zookeeper集群查看
1、啟動每個服務器上面的zookeeper節(jié)點:
#linux-node1、linux-node2、linux-node3
/opt/zookeeper/bin/zkServer.sh start
注意:報錯排查
Zookeeper節(jié)點啟動不了可能原因:zoo.cfg配置文件有誤、iptables沒關。
2、啟動完成之后查看每個節(jié)點的狀態(tài)
#linux-node1 #linux-node2 #linux-node3 #從上面可以看出,linux-node1,linux-node3兩臺服務器zookeeper的狀態(tài)是follow模式,linux-node2這臺服務器zookeeper的狀態(tài)是leader模式。
**五、Zookeeper集群連接
**
Zookeeper集群搭建完畢之后,可以通過客戶端腳本連接到zookeeper集群上面,對客戶端來說,zookeeper集群是一個整體,連接到zookeeper集群實際上感覺在獨享整個集群的服務。 #在linux-node1測試 通過上圖可以看出整個zookeeper集群已經(jīng)搭建并測試完成。 #Zookeeper原理:
本文標題:Zookeeper集群搭建具體步驟
網(wǎng)站地址:http://m.fisionsoft.com.cn/article/dhodpdj.html


咨詢
建站咨詢
