前言:zookeeper作為一款分布式協(xié)調(diào)中間件,其重要性不言而喻,因此需要保證其高可用性。所以一般都會(huì)搭建zookeeper集群,今天葉秋帶領(lǐng)大家在一臺(tái)服務(wù)器上搭建偽集群。
目錄
1、 搭建要求
2、 準(zhǔn)備工作
3、 配置集群
?4 啟動(dòng)集群
?5 模擬集群異常
1、 搭建要求
真實(shí)的集群是需要部署在不同的服務(wù)器上的,但是在我們測(cè)試時(shí)同時(shí)啟動(dòng)很多個(gè)虛擬機(jī)內(nèi)存會(huì)吃不消,所以我們通常會(huì)搭建 偽集群,也就是把所有的服務(wù)都搭建在一臺(tái)虛擬機(jī)上,用 端口進(jìn)行區(qū)分。
我們這里要求搭建一個(gè)三個(gè)節(jié)點(diǎn)的Zookeeper集群(偽集群)。
2、 準(zhǔn)備工作
1、首先必須安裝好JDK先。
2、ZooKeeper壓縮包上傳到服務(wù)器,壓縮包下載地址: Apache ZooKeeper
3、將Zookeeper解壓 ,建立/usr/local/zookeeper-cluster目錄,將解壓后的Zookeeper復(fù)制到以下三個(gè)目錄。
/usr/local/zookeeper-cluster/zookeeper-1
/usr/local/zookeeper-cluster/zookeeper-2
/usr/local/zookeeper-cluster/zookeeper-3
創(chuàng)建目錄并將ZooKeeper壓縮包解壓到此目錄
mkdir /usr/local/zookeeper-cluster
解壓
tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz -C /usr/local/zookeeper-cluster
?將解壓后的Zookeeper復(fù)制到以下三個(gè)目錄
cp -r apache-zookeeper-3.7.0-bin /usr/local/zookeeper-cluster/zookeeper-1
cp -r apache-zookeeper-3.7.0-bin /usr/local/zookeeper-cluster/zookeeper-2
cp -r apache-zookeeper-3.7.0-bin /usr/local/zookeeper-cluster/zookeeper-3
?4、創(chuàng)建data目錄 ,并且將 conf下zoo_sample.cfg 文件改名為 zoo.cfg
mkdir /usr/local/zookeeper-cluster/zookeeper-1/data
mkdir /usr/local/zookeeper-cluster/zookeeper-2/data
mkdir /usr/local/zookeeper-cluster/zookeeper-3/data
mv /usr/local/zookeeper-cluster/zookeeper-1/conf/ zoo_sample.cfg /usr/local/zookeeper-cluster/zookeeper-1/conf/ zoo.cfg
mv /usr/local/zookeeper-cluster/zookeeper-2/conf/ zoo_sample.cfg /usr/local/zookeeper-cluster/zookeeper-2/conf/ zoo.cfg
mv /usr/local/zookeeper-cluster/zookeeper-3/conf/ zoo_sample.cfg /usr/local/zookeeper-cluster/zookeeper-3/conf/ zoo.cfg
5、 配置每一個(gè)Zookeeper 的dataDir 和 clientPort 分別為2182 2183 2184
修改/usr/local/zookeeper-cluster/zookeeper-1/conf/zoo.cfg
vim /usr/local/zookeeper-cluster/zookeeper-1/conf/zoo.cfg
內(nèi)容:
clientPort=2182
dataDir=/usr/local/zookeeper-cluster/zookeeper-1/data
修改/usr/local/zookeeper-cluster/zookeeper-2/conf/zoo.cfg
vim /usr/local/zookeeper-cluster/zookeeper-2/conf/zoo.cfg
內(nèi)容:
clientPort=2183
dataDir=/usr/local/zookeeper-cluster/zookeeper-2/data
修改/usr/local/zookeeper-cluster/zookeeper-3/conf/zoo.cfg
vim /usr/local/zookeeper-cluster/zookeeper-3/conf/zoo.cfg
內(nèi)容:
clientPort=2184
dataDir=/usr/local/zookeeper-cluster/zookeeper-3/data
3、 配置集群
3.1、在每個(gè)zookeeper的 data 目錄下創(chuàng)建一個(gè) myid 文件,內(nèi)容分別是1、2、3 。這個(gè)文件就是記錄每個(gè)服務(wù)器的ID
echo 1 >/usr/local/zookeeper-cluster/zookeeper-1/data/myid
echo 2 >/usr/local/zookeeper-cluster/zookeeper-2/data/myid
echo 3 >/usr/local/zookeeper-cluster/zookeeper-3/data/myid
3.2、在每一個(gè)zookeeper 的 zoo.cfg配置客戶端訪問端口(clientPort)和集群服務(wù)器IP列表。集群服務(wù)器IP列表如下。
zookeeper-1
vim /usr/local/zookeeper-cluster/zookeeper-1/conf/zoo.cfg
內(nèi)容:
server.1=192.168.58.150:2881:3881
server.2=192.168.58.150:2882:3882
server.3=192.168.58.150:2883:3883
zookeeper-2
vim /usr/local/zookeeper-cluster/zookeeper-2/conf/zoo.cfg
內(nèi)容:
server.1=192.168.58.150:2881:3881
server.2=192.168.58.150:2882:3882
server.3=192.168.58.150:2883:3883
zookeeper-3
vim /usr/local/zookeeper-cluster/zookeeper-3/conf/zoo.cfg
內(nèi)容:
server.1=192.168.58.150:2881:3881
server.2=192.168.58.150:2882:3882
server.3=192.168.58.150:2883:3883
?4 啟動(dòng)集群
啟動(dòng)集群就是分別啟動(dòng)每個(gè)實(shí)例。
/usr/local/zookeeper-cluster/zookeeper-1/bin/zkServer.sh start
/usr/local/zookeeper-cluster/zookeeper-2/bin/zkServer.sh start
/usr/local/zookeeper-cluster/zookeeper-3/bin/zkServer.sh start
啟動(dòng)后我們查詢一下每個(gè)實(shí)例的運(yùn)行狀態(tài)
先查詢第一個(gè)服務(wù)
/usr/local/zookeeper-cluster/zookeeper-1/bin/zkServer.sh start
Mode為follower表示是 跟隨者(從)
再查詢第二個(gè)服務(wù)Mod 為leader表示是領(lǐng)導(dǎo)者(主)
/usr/local/zookeeper-cluster/zookeeper-2/bin/zkServer.sh status
查詢第三個(gè)為跟隨者(從)
/usr/local/zookeeper-cluster/zookeeper-3/bin/ zkServer.sh status
?5 模擬集群異常
1、首先我們先測(cè)試如果是從服務(wù)器掛掉,會(huì)怎么樣,把3號(hào)服務(wù)器停掉。
/usr/local/zookeeper-cluster/zookeeper-3/bin/ zkServer.sh stop
觀察1號(hào)和2號(hào)
/usr/local/zookeeper-cluster/zookeeper-1/bin/ zkServer.sh status
/usr/local/zookeeper-cluster/zookeeper-2/bin/ zkServer.sh status
發(fā)現(xiàn)狀態(tài)并沒有變化。
由此得出結(jié)論,3個(gè)節(jié)點(diǎn)的集群,有一個(gè)從服務(wù)器掛掉,集群正常。
2、我們?cè)侔?號(hào)服務(wù)器(從服務(wù)器)也停掉。
/usr/local/zookeeper-cluster/zookeeper-1/bin/ zkServer.sh stop
查看2號(hào)(主服務(wù)器)的狀態(tài)。
/usr/local/zookeeper-cluster/zookeeper-2/bin/ zkServer.sh status
發(fā)現(xiàn)已經(jīng)停止運(yùn)行了。
?由此得出結(jié)論,3個(gè)節(jié)點(diǎn)的集群,2個(gè)從服務(wù)器都掛掉,主服務(wù)器也無(wú)法運(yùn)行。因?yàn)榭蛇\(yùn)行的機(jī)器沒有超過集群總數(shù)量的半數(shù)。
3、我們?cè)俅伟?號(hào)服務(wù)器啟動(dòng)起來(lái)。
/usr/local/zookeeper-cluster/zookeeper-1/bin/zkServer.sh start
發(fā)現(xiàn)2號(hào)服務(wù)器又開始正常工作了。而且依然是領(lǐng)導(dǎo)者。
/usr/local/zookeeper-cluster/zookeeper-2/bin/zkServer.sh status
?4、我們把3號(hào)服務(wù)器也啟動(dòng)起來(lái)。
/usr/local/zookeeper-cluster/zookeeper-3/bin/ zkServer.sh start
把2號(hào)服務(wù)器停掉
/usr/local/zookeeper-cluster/zookeeper-2/bin/ zkServer.sh stop
停掉后觀察1號(hào)和3號(hào)的狀態(tài)。
/usr/local/zookeeper-cluster/zookeeper-1/bin/ zkServer.sh status
/usr/local/zookeeper-cluster/zookeeper-3/bin/ zkServer.sh status
?發(fā)現(xiàn)新的leader產(chǎn)生了~
由此我們得出結(jié)論,當(dāng)集群中的主服務(wù)器掛了,集群中的其他服務(wù)器會(huì)自動(dòng)進(jìn)行選舉狀態(tài),然后產(chǎn)生新得leader 。
5、我們?cè)俅螠y(cè)試,當(dāng)我們把2號(hào)服務(wù)器重新啟動(dòng)起來(lái)啟動(dòng)后,會(huì)發(fā)生什么?
/usr/local/zookeeper-cluster/zookeeper-2/bin/ zkServer.sh start
2號(hào)服務(wù)器會(huì)再次成為新的領(lǐng)導(dǎo)嗎?
/usr/local/zookeeper-cluster/zookeeper-2/bin/ zkServer.sh status
/usr/local/zookeeper-cluster/zookeeper-3/bin/ zkServer.sh status
?我們會(huì)發(fā)現(xiàn),2號(hào)服務(wù)器啟動(dòng)后依然是跟隨者(從服務(wù)器),3號(hào)服務(wù)器依然是領(lǐng)導(dǎo)者(主服務(wù)器),沒有撼動(dòng)3號(hào)服務(wù)器的領(lǐng)導(dǎo)地位。
由此我們得出結(jié)論,當(dāng)領(lǐng)導(dǎo)者產(chǎn)生后,再次有新服務(wù)器加入集群,不會(huì)影響到現(xiàn)任領(lǐng)導(dǎo)者。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-788706.html
本期分享到此為止,關(guān)注博主不迷路葉秋學(xué)長(zhǎng)帶你上高速~~文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-788706.html
到了這里,關(guān)于猿創(chuàng)征文|ZooKeeper(偽)集群搭建的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!