jsp動態(tài)網(wǎng)站開發(fā)PDF關(guān)鍵詞小說
1. 集群角色
? ? ? ? zookeeper集群下,有3種角色,分別是領(lǐng)導(dǎo)者(Leader)、跟隨著(Follower)、觀察者(Observer)。接下來我們分別看一下這三種角色的作用。
領(lǐng)導(dǎo)者(Leader):
????????事務(wù)請求(寫操作)的唯一調(diào)度者和處理者,保證集群事務(wù)處理的順序性;
????????集群內(nèi)部各個服務(wù)器的調(diào)度者。對于create、setData、delete等有寫操作的請求,則要統(tǒng)一轉(zhuǎn)發(fā)給leader處理,leader需要決定編號、執(zhí)行操作,這個過程稱為事務(wù)。
跟隨著(Follower)
????????處理客戶端非事務(wù)(讀操作)請求(可以直接響應(yīng))。
????????轉(zhuǎn)發(fā)事務(wù)請求給Leader。
????????參與集群Leader選舉投票。?
?觀察者(Observer)
????????對于非事務(wù)請求可以獨立處理(讀操作)。
????????對于事務(wù)性請求會轉(zhuǎn)發(fā)給leader處理。
????????Observer節(jié)點接收來自leader的inform信息,更新自己的本地存儲,不參與提交和選舉投票。通常在不影響集群事務(wù)處理能力的前提下提升集群的非事務(wù)處理能力。
如何配置觀察者:
在配置文件zoo.cfg寫集群配置時需要后面寫observer
#配置一個ID為1的觀察者節(jié)點 server.1=192.168.31.5:2888:3888:observer
Observer應(yīng)用場景:
????????提升集群的讀性能。因為Observer和不參與提交和選舉的投票過程,所以可以通過往集群里面添加observer節(jié)點來提高整個集群的讀性能。
????????跨數(shù)據(jù)中心部署。 比如需要部署一個北京和香港兩地都可以使用的zookeeper集群務(wù),并且要求北京和香港客戶的讀請求延遲都很低。解決方案就是把香港的節(jié)點都設(shè)置為observer。
2. 集群架構(gòu)
leader節(jié)點可以處理讀寫請求;
follower只可以處理讀請求,follower在接到寫請求時會把寫請求轉(zhuǎn)發(fā)給leader來處理。
Zookeeper數(shù)據(jù)一致性保證:
- 全局可線性化(Linearizable )寫入∶先到達(dá)leader的寫請求會被先處理,leader決定寫請求的執(zhí)行順序。
- 客戶端FIFO順序∶來自給定客戶端的請求按照發(fā)送順序執(zhí)行。?
3. 集群搭建
本節(jié)介紹的一主兩從的集群搭建。
3.1 準(zhǔn)備工作
準(zhǔn)備三臺虛擬機(jī)
192.168.31.5
192.168.31.176
192.168.31.232
每臺機(jī)器根據(jù)單機(jī)環(huán)境先進(jìn)行單機(jī)環(huán)境的搭建?;
注意:根據(jù)單機(jī)環(huán)境搭建集群的每個節(jié)點時,先不要啟動,繼續(xù)按照一下后續(xù)步3.2驟修改完文件以及3.3創(chuàng)建myid文件后再啟動。否則啟動集群節(jié)點時可能會出現(xiàn)狀態(tài)是standalone的問題,解決看3.4啟動時遇到的問題進(jìn)行解決。
單機(jī)環(huán)境搭建參考:Zookeeper特性與節(jié)點數(shù)據(jù)類型詳解-CSDN博客中的Zookeeper單機(jī)搭建。
3.2 修改配置文件
????????修改每臺機(jī)器中zookeeper的zoo.cfg文件
vim zoo.cfg
#修改數(shù)據(jù)存儲目錄 dataDir=/app/zookeeper/data#文件末尾追加配置內(nèi)容 server.1=192.168.31.5:2888:3888 server.2=192.168.31.176:2888:3888 server.3=192.168.31.232:2888:3888
集群配置內(nèi)容含義:
server.Number=IP:port1:port2
Number?是一個數(shù)字,表示這個是第幾號服務(wù)器; 集群模式下配置一個文件 myid,這個文件在 dataDir目錄下,這個文件里面有一個數(shù)據(jù) 就是 A 的值,Zookeeper 啟動時讀取此文件,拿到里面的數(shù)據(jù)與 zoo.cfg 里面的配置信息比較從而判斷到底是哪個server。
IP 是這個服務(wù)器的地址;
port1?是這個服務(wù)器Follower與集群中的Leader服務(wù)器交換信息的端口;
port2?是萬一集群中的Leader服務(wù)器掛了,需要一個端口來重新進(jìn)行選舉,選出一個新的Leader,而這個端口就是用來執(zhí)行選舉時服務(wù)器相互通信的端口。?
3.3 創(chuàng)建myid文件,配置服務(wù)器編號
- ?在每臺服務(wù)器zookeeper的dataDir對應(yīng)目錄下創(chuàng)建 myid 文件,內(nèi)容為對應(yīng)ip的zookeeper服務(wù)器編號。
- ?dataDir目錄是你在zoo.cfg中配置的目錄。內(nèi)容是你在zoo.cfg中配置集群時server.后面的數(shù)字。
- ?添加 myid 文件時,一定要在 Linux 里面創(chuàng)建,不要?notepad++等工具里面創(chuàng)建后上傳,因為可能會亂碼。并且內(nèi)容上下不要有空行,左右不要有空格。
vim myid
3.4 啟動集群
啟動前需要關(guān)閉防火墻(生產(chǎn)環(huán)境需要打開對應(yīng)端口)
分別啟動三個節(jié)點的zookeeper的server
#啟動節(jié)點 bin/zkServer.sh start #查看節(jié)點狀態(tài) bin/zkServer.sh status
如列圖所示,我依次啟動了192.168.31.5、192.168.31.176、192.168.31.232服務(wù)器中zk的節(jié)點,每次都是啟動后直接查看狀態(tài),他們的狀態(tài)都是follower。
待三臺機(jī)器都啟動完成后,我再次差看個節(jié)點的狀態(tài),192.168.31.5這臺機(jī)器zk的節(jié)點變?yōu)榱薼eader。
所以,三個節(jié)點啟動后狀態(tài)是leader或者follower才表示集群啟動成功了。
3.4 啟動時遇到的問題
集群啟動時有可能會失敗,一般情況就是zoo.cfg配置錯誤或者防火墻沒有關(guān)閉(生產(chǎn)環(huán)境端口沒有開放)
3.4.1關(guān)閉防火墻
#centos7
# 檢查防火墻狀態(tài)
systemctl status firewalld
#關(guān)閉防火墻
systemctl stop firewalld
systemctl disable firewalld
3.4.2 啟動后查看狀態(tài)的Mode是standalone
解決:
1. 檢查zoo.cfg文件中有書寫錯誤是否有誤;
2. 如果這臺機(jī)器上有單機(jī)版的zookeeper啟動,關(guān)閉之前的zookeeper,重新啟動;(我的單機(jī)版的zk改配置,變?yōu)榧汗?jié)點時就遇到的是這個問題。)
3.4.3??.sh權(quán)限不足
????????在啟動zookeeper時,報zkServer.sh權(quán)限不足,當(dāng)時沒有截圖記錄,但和下述截圖中zkCli.sh權(quán)限不足一樣,明明有root權(quán)限,但是就是提示權(quán)限不足。
????????接下來,以解決zkCli.sh權(quán)限不足為例,解決該問題,如遇到zkServer.sh權(quán)限不足,可參考這個解決方法;
進(jìn)去zookeeper的bin目錄后,執(zhí)行以下指令
chmod a+xwr zkCli.sh
再次執(zhí)行
./zkCli.sh
?客戶端執(zhí)行成功了