掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
ZooKeeper 是一個針對大型分布式系統(tǒng)的可靠協(xié)調(diào)系統(tǒng),提供的功能包括:配置維護、名字服務(wù)、分布式同步、組服務(wù)等,下面為大家分享一下Zookeeper集群搭建具體步驟。

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),榆次企業(yè)網(wǎng)站建設(shè),榆次品牌網(wǎng)站建設(shè),網(wǎng)站定制,榆次網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,榆次網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
ZooKeeper是一個開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),它包含一個簡單的原語集,分布式應(yīng)用程序可以基于它實現(xiàn)同步服務(wù),配置維護和命名服務(wù)等。
Zookeeper設(shè)計目的
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é)議有兩種模式,它們分別是恢復(fù)模式(Recovery選主)和廣播模式(Broadcast同步)。當(dāng)服務(wù)啟動或者在領(lǐng)導(dǎo)者崩潰后,Zab就進入了恢復(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號(zxid)來標(biāo)識事務(wù)。所有的提議(proposal)都在被提出的時候加上了zxid。實現(xiàn)中zxid是一個64位的數(shù)字,它高32位是epoch用來標(biāo)識leader關(guān)系是否改變,每次一個leader被選出來,它都會有一個新的epoch,標(biāo)識當(dāng)前屬于那個leader的統(tǒng)治時期。低32位用于遞增計數(shù)。
每個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é)點
實驗環(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運行需要java環(huán)境,需要安裝jdk,注:每臺服務(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集群時,一定要先停止已經(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)建相關(guān)目錄,三臺節(jié)點都需要
mkdir -p /opt/zookeeper/{logs,data}
#其余zookeeper節(jié)點安裝完成之后,同步配置文件zoo.cfg。
3.2、配置參數(shù)說明
tickTime這個時間是作為zookeeper服務(wù)器之間或客戶端與服務(wù)器之間維持心跳的時間間隔,也就是說每個tickTime時間就會發(fā)送一個心跳。
initLimit這個配置項是用來配置zookeeper接受客戶端(這里所說的客戶端不是用戶連接zookeeper服務(wù)器的客戶端,而是zookeeper服務(wù)器集群中連接到leader的follower 服務(wù)器)初始化連接時最長能忍受多少個心跳時間間隔數(shù)。
當(dāng)已經(jīng)超過10個心跳的時間(也就是tickTime)長度后 zookeeper 服務(wù)器還沒有收到客戶端的返回信息,那么表明這個客戶端連接失敗。總的時間長度就是 10*2000=20秒。
syncLimit這個配置項標(biāo)識leader與follower之間發(fā)送消息,請求和應(yīng)答時間長度,最長不能超過多少個tickTime的時間長度,總的時間長度就是5*2000=10秒。
dataDir顧名思義就是zookeeper保存數(shù)據(jù)的目錄,默認(rèn)情況下zookeeper將寫數(shù)據(jù)的日志文件也保存在這個目錄里;
clientPort這個端口就是客戶端連接Zookeeper服務(wù)器的端口,Zookeeper會監(jiān)聽這個端口接受客戶端的訪問請求;
server.A=B:C:D中的A是一個數(shù)字,表示這個是第幾號服務(wù)器,B是這個服務(wù)器的IP地址,C第一個端口用來集群成員的信息交換,表示這個服務(wù)器與集群中的leader服務(wù)器交換信息的端口,D是在leader掛掉時專門用來進行選舉leader所用的端口。
3.3、創(chuàng)建ServerID標(biāo)識
除了修改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服務(wù)器上面創(chuàng)建myid文件,并設(shè)置值為1,同時與zoo.cfg文件里面的server.1保持一致,如下
echo "1" > /opt/zookeeper/data/myid
Zookeeper集群搭建Zookeeper集群搭建
#在192.168.1.149服務(wù)器上面創(chuàng)建myid文件,并設(shè)置值為1,同時與zoo.cfg文件里面的server.2保持一致,如下
echo "2" > /opt/zookeeper/data/myid
Zookeeper集群搭建Zookeeper集群搭建
#在192.168.1.150服務(wù)器上面創(chuàng)建myid文件,并設(shè)置值為1,同時與zoo.cfg文件里面的server.3保持一致,如下
echo "3" > /opt/zookeeper/data/myid
Zookeeper集群搭建Zookeeper集群搭建
到此,相關(guān)配置已完成
1、啟動每個服務(wù)器上面的zookeeper節(jié)點:
#linux-node1、linux-node2、linux-node3
/opt/zookeeper/bin/zkServer.sh start
注意:報錯排查
Zookeeper節(jié)點啟動不了可能原因:zoo.cfg配置文件有誤、iptables沒關(guān)。
2、啟動完成之后查看每個節(jié)點的狀態(tài)
#linux-node1 #linux-node2 #linux-node3 #從上面可以看出,linux-node1,linux-node3兩臺服務(wù)器zookeeper的狀態(tài)是follow模式,linux-node2這臺服務(wù)器zookeeper的狀態(tài)是leader模式。
**
Zookeeper集群搭建完畢之后,可以通過客戶端腳本連接到zookeeper集群上面,對客戶端來說,zookeeper集群是一個整體,連接到zookeeper集群實際上感覺在獨享整個集群的服務(wù)。 #在linux-node1測試 通過上圖可以看出整個zookeeper集群已經(jīng)搭建并測試完成。 #Zookeeper原理:

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流