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

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


咨詢
建站咨詢
