為什么要使用zookeeper(chubby開源實(shí)現(xiàn))— 動(dòng)物園管理員
協(xié)調(diào)分布式環(huán)境下的服務(wù)
-
解決分布式環(huán)境中的問題
分布式環(huán)境下無法保證順序執(zhí)行
分布式環(huán)境下無法明確執(zhí)行結(jié)果(可能由于網(wǎng)絡(luò)的波動(dòng),無法判斷結(jié)果是否執(zhí)行成功)
無法保證數(shù)據(jù)一致性
-
應(yīng)用
和dubbo配合保證多點(diǎn)服務(wù)的可用性
hadoop確保整個(gè)集群只有一個(gè)NameNode,存儲(chǔ)配置信息等
HBASE確保整個(gè)集群只有一個(gè)HMaster
-
Paxos
-
文章 https://blog.csdn.net/dajiangtai007/article/details/68488701
有一個(gè)叫做Paxos的小島(Island)上面住了一批居民孕蝉,島上面所有的事情由一些特殊的人決定鹊奖,他們叫做議員(Senator)橄仆。
議員的總數(shù)(SenatorCount)是確定的碘箍,不能更改屁药。
島上每次環(huán)境事務(wù)的變更都需要通過一個(gè)提議(Proposal)虑瀑,每個(gè)提議都有一個(gè)編號(hào)(PID)馆纳,這個(gè)編號(hào)是一直增長的,不能倒退糠亩。
每個(gè)提議都需要超過半數(shù)((SenatorCount)/2+1)的議員同意才能生效虐骑。
每個(gè)議員只會(huì)同意大于當(dāng)前編號(hào)的提議,包括已生效的和未生效的削解。
如果議員收到小于等于當(dāng)前編號(hào)的提議富弦,他會(huì)拒絕沟娱,并告知對(duì)方:你的提議已經(jīng)有人提過了氛驮。這里的當(dāng)前編號(hào)是每個(gè)議員在自己記事本上面記錄的編號(hào),他不斷更新這個(gè)編號(hào)济似。整個(gè)議會(huì)不能保證所有議員記事本上的編號(hào)總是相同的矫废。 現(xiàn)在議會(huì)有一個(gè)目標(biāo):保證所有的議員對(duì)于提議都能達(dá)成一致的看法。
-
理解zookeeper原理
- image.png
-
角色說明
leader(只有這個(gè)角色能提出proposal砰蠢,保證提議的順序)
server(議員)
client(客戶端)
proposal 提議(znode)
zxid 編號(hào)
-
場(chǎng)景
client找議員(server)詢問(查詢)某一條法令蓖扑,議員回答且同時(shí)聲明自身數(shù)據(jù)不一定是最新的,如需最新數(shù)據(jù)需要clent調(diào)用sync方法確認(rèn)
clent找議員提交一個(gè)法令(create)台舱,議員將建議提交給leader律杠,由leader發(fā)起投票且產(chǎn)生結(jié)果潭流,最終告訴client
leader掛了期間,整個(gè)服務(wù)無法進(jìn)行柜去,直到選出新的leader
CAP —> CA
-
-
zab 原子廣播(zookeeper核心)
-
數(shù)據(jù)交互圖
-
image.png
image.png -
角色
-
server
leader(投票的發(fā)起和決議,更新狀態(tài))
-
learner
follower (參與投票灰嫉,接受客戶端請(qǐng)求并返回結(jié)果)
observer 和follower功能一致,但不投票 提高讀取速度
client
-
-
交互過程
request —> (follower 或者 observer) update操作,query操作會(huì)直接返回
request 轉(zhuǎn)給leader 嗓奢, leader自己先更新
leader 向其他的所有follower拋出proposal讼撒,
follower向leader 確認(rèn)ack
leader匯總結(jié)果之后,向所有follower 發(fā)送commit
-
-
Zab協(xié)議 zookeeper automatic broadcast 兩種模式
恢復(fù)(選主)模式股耽,可用性 - 當(dāng)服務(wù)重啟或者在leader崩潰之后根盒,進(jìn)入恢復(fù)模式,當(dāng)leader被選舉出來且大多數(shù)server完成了和leader的狀態(tài)同步后恢復(fù)模式結(jié)束物蝙。
廣播模式(同步)一致性
-
選舉炎滞,不一定非是奇數(shù)臺(tái)
奇數(shù)和偶數(shù)臺(tái)的容錯(cuò)是一樣的,沒有必要用偶數(shù)臺(tái)诬乞,節(jié)省資源(4臺(tái)機(jī)器厂榛,保障集群運(yùn)行的情況下,允許有一臺(tái)掛掉丽惭,3臺(tái)機(jī)器击奶,保障集群運(yùn)行的情況下,允許有一臺(tái)機(jī)器掛掉)
半數(shù)以上就可以選舉出leader责掏,如果是三臺(tái)機(jī)器柜砾,第二臺(tái)啟動(dòng)的是leader,類推换衬,5臺(tái)的話第三個(gè)啟動(dòng)的就是leader
-