溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

zookeeper的概念和作用是什么

發(fā)布時(shí)間:2021-06-25 10:19:16 來(lái)源:億速云 閱讀:576 作者:chen 欄目:大數(shù)據(jù)

這篇文章主要講解了“zookeeper的概念和作用是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“zookeeper的概念和作用是什么”吧!

11.1.1. Zookeeper 概念

Zookeeper 是一個(gè)分布式協(xié)調(diào)服務(wù),可用于服務(wù)發(fā)現(xiàn),分布式鎖,分布式領(lǐng)導(dǎo)選舉,配置管理等。 Zookeeper 提供了一個(gè)類(lèi)似于 Linux 文件系統(tǒng)的樹(shù)形結(jié)構(gòu)(可認(rèn)為是輕量級(jí)的內(nèi)存文件系統(tǒng),但 只適合存少量信息,完全不適合存儲(chǔ)大量文件或者大文件),同時(shí)提供了對(duì)于每個(gè)節(jié)點(diǎn)的監(jiān)控與 通知機(jī)制。

11.1.1. Zookeeper 角色

Zookeeper 集群是一個(gè)基于主從復(fù)制的高可用集群,每個(gè)服務(wù)器承擔(dān)如下三種角色中的一種

 Leader

1. 一個(gè) Zookeeper 集群同一時(shí)間只會(huì)有一個(gè)實(shí)際工作的 Leader,它會(huì)發(fā)起并維護(hù)與各 Follwer 及 Observer 間的心跳。 2. 所有的寫(xiě)操作必須要通過(guò) Leader 完成再由 Leader 將寫(xiě)操作廣播給其它服務(wù)器。只要有超過(guò) 半數(shù)節(jié)點(diǎn)(不包括 observeer 節(jié)點(diǎn))寫(xiě)入成功,該寫(xiě)請(qǐng)求就會(huì)被提交(類(lèi) 2PC 協(xié)議)。

Follower

1. 一個(gè) Zookeeper 集群可能同時(shí)存在多個(gè) Follower,它會(huì)響應(yīng) Leader 的心跳, 2. Follower 可直接處理并返回客戶(hù)端的讀請(qǐng)求,同時(shí)會(huì)將寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)給 Leader 處理, 3. 并且負(fù)責(zé)在 Leader 處理寫(xiě)請(qǐng)求時(shí)對(duì)請(qǐng)求進(jìn)行投票。

Observer 角色

與 Follower 類(lèi)似,但是無(wú)投票權(quán)。Zookeeper 需保證高可用和強(qiáng)一致性,為了支持更多的客 戶(hù)端,需要增加更多 Server;Server 增多,投票階段延遲增大,影響性能;引入 Observer, Observer 不參與投票; Observers 接受客戶(hù)端的連接,并將寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)給 leader 節(jié)點(diǎn); 加入更 多 Observer 節(jié)點(diǎn),提高伸縮性,同時(shí)不影響吞吐率。

ZAB 協(xié)議

事務(wù)編號(hào) Zxid(事務(wù)請(qǐng)求計(jì)數(shù)器+ epoch)

在 ZAB ( ZooKeeper Atomic Broadcast , ZooKeeper 原子消息廣播協(xié)議) 協(xié)議的事務(wù)編號(hào) Zxid 設(shè)計(jì)中,Zxid 是一個(gè) 64 位的數(shù)字,其中低 32 位是一個(gè)簡(jiǎn)單的單調(diào)遞增的計(jì)數(shù)器,針對(duì)客戶(hù)端每 一個(gè)事務(wù)請(qǐng)求,計(jì)數(shù)器加 1;而高 32 位則代表 Leader 周期 epoch 的編號(hào),每個(gè)當(dāng)選產(chǎn)生一個(gè)新 的 Leader 服務(wù)器,就會(huì)從這個(gè) Leader 服務(wù)器上取出其本地日志中最大事務(wù)的 ZXID,并從中讀取 epoch 值,然后加 1,以此作為新的 epoch,并將低 32 位從 0 開(kāi)始計(jì)數(shù)。 Zxid(Transaction id)類(lèi)似于 RDBMS 中的事務(wù) ID,用于標(biāo)識(shí)一次更新操作的 Proposal(提議) ID。為了保證順序性,該 zkid 必須單調(diào)遞增。

epoch

epoch:可以理解為當(dāng)前集群所處的年代或者周期,每個(gè) leader 就像皇帝,都有自己的年號(hào),所 以每次改朝換代,leader 變更之后,都會(huì)在前一個(gè)年代的基礎(chǔ)上加 1。這樣就算舊的 leader 崩潰 恢復(fù)之后,也沒(méi)有人聽(tīng)他的了,因?yàn)?follower 只聽(tīng)從當(dāng)前年代的 leader 的命令。

Zab 協(xié)議有兩種模式-恢復(fù)模式(選主)、廣播模式(同步)

Zab 協(xié)議有兩種模式,它們分別是恢復(fù)模式(選主)和廣播模式(同步)。當(dāng)服務(wù)啟動(dòng)或者在領(lǐng)導(dǎo) 者崩潰后,Zab 就進(jìn)入了恢復(fù)模式,當(dāng)領(lǐng)導(dǎo)者被選舉出來(lái),且大多數(shù) Server 完成了和 leader 的狀 態(tài)同步以后,恢復(fù)模式就結(jié)束了。狀態(tài)同步保證了 leader 和 Server 具有相同的系統(tǒng)狀態(tài)。

ZAB 協(xié)議 4 階段 Leader election(選舉階段-選出準(zhǔn) Leader)

1. Leader election(選舉階段):

節(jié)點(diǎn)在一開(kāi)始都處于選舉階段,只要有一個(gè)節(jié)點(diǎn)得到超半數(shù) 節(jié)點(diǎn)的票數(shù),它就可以當(dāng)選準(zhǔn) leader。只有到達(dá) 廣播階段(broadcast) 準(zhǔn) leader 才會(huì)成 為真正的 leader。這一階段的目的是就是為了選出一個(gè)準(zhǔn) leader,然后進(jìn)入下一個(gè)階段。 

Discovery(發(fā)現(xiàn)階段-接受提議、生成 epoch、接受 epoch)

2. Discovery(發(fā)現(xiàn)階段):在這個(gè)階段,followers 跟準(zhǔn) leader 進(jìn)行通信,同步 followers 最近接收的事務(wù)提議。這個(gè)一階段的主要目的是發(fā)現(xiàn)當(dāng)前大多數(shù)節(jié)點(diǎn)接收的最新提議,并且 準(zhǔn) leader 生成新的 epoch,讓 followers 接受,更新它們的 accepted Epoch 一個(gè) follower 只會(huì)連接一個(gè) leader,如果有一個(gè)節(jié)點(diǎn) f 認(rèn)為另一個(gè) follower p 是 leader,f 在嘗試連接 p 時(shí)會(huì)被拒絕,f 被拒絕之后,就會(huì)進(jìn)入重新選舉階段。 Synchronization(同步階段-同步 follower 副本)

3. Synchronization(同步階段):同步階段主要是利用 leader 前一階段獲得的最新提議歷史, 同步集群中所有的副本。只有當(dāng) 大多數(shù)節(jié)點(diǎn)都同步完成,準(zhǔn) leader 才會(huì)成為真正的 leader。 follower 只會(huì)接收 zxid 比自己的 lastZxid 大的提議。 Broadcast(廣播階段-leader 消息廣播)

4. Broadcast(廣播階段):到了這個(gè)階段,Zookeeper 集群才能正式對(duì)外提供事務(wù)服務(wù), 并且 leader 可以進(jìn)行消息廣播。同時(shí)如果有新的節(jié)點(diǎn)加入,還需要對(duì)新節(jié)點(diǎn)進(jìn)行同步。

ZAB 提交事務(wù)并不像 2PC 一樣需要全部 follower 都 ACK,只需要得到超過(guò)半數(shù)的節(jié)點(diǎn)的 ACK 就 可以了。

ZAB 協(xié)議 JAVA 實(shí)現(xiàn)(FLE-發(fā)現(xiàn)階段和同步合并為 Recovery Phase(恢復(fù)階段))

協(xié)議的 Java 版本實(shí)現(xiàn)跟上面的定義有些不同,選舉階段使用的是 Fast Leader Election(FLE), 它包含了 選舉的發(fā)現(xiàn)職責(zé)。因?yàn)?FLE 會(huì)選舉擁有最新提議歷史的節(jié)點(diǎn)作為 leader,這樣就省去了 發(fā)現(xiàn)最新提議的步驟。實(shí)際的實(shí)現(xiàn)將 發(fā)現(xiàn)階段 和 同步合并為 Recovery Phase(恢復(fù)階段)。所 以,ZAB 的實(shí)現(xiàn)只有三個(gè)階段:Fast Leader Election;Recovery Phase;Broadcast Phase。

投票機(jī)制

每個(gè) sever 首先給自己投票,然后用自己的選票和其他 sever 選票對(duì)比,權(quán)重大的勝出,使用權(quán) 重較大的更新自身選票箱。具體選舉過(guò)程如下:

1. 每個(gè) Server 啟動(dòng)以后都詢(xún)問(wèn)其它的 Server 它要投票給誰(shuí)。對(duì)于其他 server 的詢(xún)問(wèn), server 每次根據(jù)自己的狀態(tài)都回復(fù)自己推薦的 leader 的 id 和上一次處理事務(wù)的 zxid(系 統(tǒng)啟動(dòng)時(shí)每個(gè) server 都會(huì)推薦自己)

2. 收到所有 Server 回復(fù)以后,就計(jì)算出 zxid 最大的哪個(gè) Server,并將這個(gè) Server 相關(guān)信 息設(shè)置成下一次要投票的 Server。

3. 計(jì)算這過(guò)程中獲得票數(shù)最多的的 sever 為獲勝者,如果獲勝者的票數(shù)超過(guò)半數(shù),則改 server 被選為 leader。否則,繼續(xù)這個(gè)過(guò)程,直到 leader 被選舉出來(lái) 4. leader 就會(huì)開(kāi)始等待 server 連接

5. Follower 連接 leader,將最大的 zxid 發(fā)送給 leader

6. Leader 根據(jù) follower 的 zxid 確定同步點(diǎn),至此選舉階段完成。

7. 選舉階段完成 Leader 同步后通知 follower 已經(jīng)成為 uptodate 狀態(tài) 8. Follower 收到 uptodate 消息后,又可以重新接受 client 的請(qǐng)求進(jìn)行服務(wù)了 

目前有 5 臺(tái)服務(wù)器,每臺(tái)服務(wù)器均沒(méi)有數(shù)據(jù),它們的編號(hào)分別是 1,2,3,4,5,按編號(hào)依次啟動(dòng),它們 的選擇舉過(guò)程如下:

1. 服務(wù)器 1 啟動(dòng),給自己投票,然后發(fā)投票信息,由于其它機(jī)器還沒(méi)有啟動(dòng)所以它收不到反 饋信息,服務(wù)器 1 的狀態(tài)一直屬于 Looking。

2. 服務(wù)器 2 啟動(dòng),給自己投票,同時(shí)與之前啟動(dòng)的服務(wù)器 1 交換結(jié)果,由于服務(wù)器 2 的編號(hào) 大所以服務(wù)器 2 勝出,但此時(shí)投票數(shù)沒(méi)有大于半數(shù),所以?xún)蓚€(gè)服務(wù)器的狀態(tài)依然是 LOOKING。

3. 服務(wù)器 3 啟動(dòng),給自己投票,同時(shí)與之前啟動(dòng)的服務(wù)器 1,2 交換信息,由于服務(wù)器 3 的編 號(hào)最大所以服務(wù)器 3 勝出,此時(shí)投票數(shù)正好大于半數(shù),所以服務(wù)器 3 成為領(lǐng)導(dǎo)者,服務(wù)器 1,2 成為小弟。

4. 服務(wù)器 4 啟動(dòng),給自己投票,同時(shí)與之前啟動(dòng)的服務(wù)器 1,2,3 交換信息,盡管服務(wù)器 4 的 編號(hào)大,但之前服務(wù)器 3 已經(jīng)勝出,所以服務(wù)器 4 只能成為小弟。

5. 服務(wù)器 5 啟動(dòng),后面的邏輯同服務(wù)器 4 成為小弟。

感謝各位的閱讀,以上就是“zookeeper的概念和作用是什么”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)zookeeper的概念和作用是什么這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI