真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ZooKeeper知識(shí)點(diǎn)都有哪些

本篇文章為大家展示了ZooKeeper知識(shí)點(diǎn)都有哪些,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

站在用戶的角度思考問題,與客戶深入溝通,找到湘陰網(wǎng)站設(shè)計(jì)與湘陰網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋湘陰地區(qū)。

一、 從集中式到分布式

1. 集中式

集中式特點(diǎn):不用考慮網(wǎng)絡(luò)分區(qū),宕機(jī)問題,協(xié)作問題。但是昂貴。

2. 分布式

分布式:由多臺(tái)機(jī)器通過網(wǎng)絡(luò)通信組成,多節(jié)點(diǎn)機(jī)器,分布式,故障發(fā)生頻率大。 
故障原因:網(wǎng)絡(luò)問題,多臺(tái)機(jī)器網(wǎng)絡(luò)通信容易超時(shí),中間有可能斷掉造成分區(qū)。 
網(wǎng)絡(luò)分區(qū):俗稱腦裂。 
網(wǎng)絡(luò)的三態(tài)問題:要么連接成功,要么失敗,要么超時(shí)。

所以分布式主要是網(wǎng)絡(luò)方面和機(jī)器方面的問題,最大問題是網(wǎng)絡(luò)問題。

3. ACID

例如數(shù)據(jù)庫的事務(wù)

原子性:要么成功,要么失??; 
一致性:如果出現(xiàn)異常數(shù)據(jù),還是原來的那份 
隔離性:各個(gè)會(huì)話之間是相互獨(dú)立的 
持久性:就是提交后的數(shù)據(jù)永久保存在磁盤上,不丟失。

4. CAP

一致性:多臺(tái)機(jī)器擁有相同副本 
可用性:在適合的時(shí)間響應(yīng)客戶端 
分區(qū)容錯(cuò)性:不能出現(xiàn)網(wǎng)絡(luò)分區(qū)

5. BASE

分布式主要的問題是網(wǎng)絡(luò),所以我們優(yōu)先處理分布式的網(wǎng)絡(luò),然后在一致性和可用性之間權(quán)衡。這時(shí)提出了BASE就是對CAP的一致性和可用性的權(quán)衡結(jié)果。 
BASE 基本可用,最終一致性

最終一致性:就是你提交一臺(tái)機(jī)器,其他機(jī)器最終會(huì)把你提交的那臺(tái)機(jī)器給同步到自己上。

二、 一致性

主的控制機(jī)器就叫協(xié)調(diào)者,副本機(jī)器叫參與者

1. 2PC

兩個(gè)階段,提交事務(wù)和執(zhí)行事務(wù)。 
提交事務(wù) 
1). 詢問 
2).執(zhí)行初始化(執(zhí)行提交)

執(zhí)行事務(wù)

2PC的故障情況 
單臺(tái)機(jī)器 
1. 協(xié)調(diào)者故障,那么有個(gè)備用協(xié)調(diào)者接管,并且查詢參與者當(dāng)前執(zhí)行到什么地步,然后接著執(zhí)行下去。 
2. 參與者故障,那么協(xié)調(diào)者會(huì)等待它重啟,然后再執(zhí)行下去。

這兩種情況,都只會(huì)阻塞,并不會(huì)不一致性。

同時(shí)故障: 
協(xié)調(diào)者和參與者同時(shí)故障 
例如:有機(jī)器1,2,3,4。其中4是協(xié)調(diào)者,1,2,3是參與者 
4給1,2發(fā)完提交事務(wù)后故障了,正好3這個(gè)時(shí)候也故障了,注意這是3是沒有提交事務(wù)數(shù)據(jù)的。現(xiàn)在備用協(xié)調(diào)者啟動(dòng)了,去詢問參與者,用于3死掉了,一直不知道它處于什么狀態(tài)(接受了提交事務(wù),還是反饋了能執(zhí)行還是不能執(zhí)行3個(gè)狀態(tài))。 
面對這種情況,讓1,2回歸停止事務(wù),3恢復(fù)以后,不管是什么狀態(tài),直接停止事務(wù),回滾,這樣子就保證了一致性。 
這是2PC的漏洞,當(dāng)同時(shí)故障了,就全部回滾,效率低下,代價(jià)大

缺點(diǎn)

當(dāng)協(xié)調(diào)者出錯(cuò),同時(shí)參與者也出錯(cuò)時(shí),兩階段無法保證事務(wù)執(zhí)行的完整性。
考慮協(xié)調(diào)者再發(fā)出commit消息之后宕機(jī),而唯一接收到這條消息的參與者同時(shí)也宕機(jī)了。那么即使協(xié)調(diào)者通過選舉協(xié)議產(chǎn)生了新的協(xié)調(diào)者,這條事務(wù)的狀態(tài)也是不確定的,沒人知道事務(wù)是否被已經(jīng)提交。

2. 3PC

2PC 當(dāng)時(shí)只考慮如果單機(jī)故障的情況,并沒有考慮協(xié)調(diào)者和參與者同時(shí)故障的情況。3PC就是對2PC漏洞的補(bǔ)充協(xié)議。它把2PC中的提交事務(wù)請求一分為二,添加了一個(gè)狀態(tài)(準(zhǔn)備階段)。做到就算兩個(gè)同時(shí)故障也不阻塞,并且保證一致性。

事務(wù)詢問階段(can階段)

事務(wù)準(zhǔn)備階段 (pre)(包括執(zhí)行提交)

執(zhí)行事務(wù)階段 (do commit)(將狀態(tài)更改)

下面例子分析: 
1. 4是協(xié)調(diào)者 ,1,2,3 是 參與者,當(dāng)新聞的節(jié)點(diǎn),協(xié)調(diào)者4和參與者3同時(shí)掛掉了。這時(shí)候備用的協(xié)調(diào)者啟動(dòng)了,詢問了1和2的狀態(tài),都在can階段,回滾代價(jià)下,直接回滾。當(dāng)3重新啟動(dòng)了發(fā)現(xiàn)自己是can階段,回滾代價(jià)下,執(zhí)行回滾,停止事務(wù)。這樣子就擺在了3個(gè)節(jié)點(diǎn)數(shù)據(jù)一致性。3PC對應(yīng)2PC就是減少回滾代價(jià)。

  1. 當(dāng)3個(gè)參與者都進(jìn)入到per準(zhǔn)備階段,說明它們都接受到提交詢問,并且都表決過(意思是都領(lǐng)到了數(shù)據(jù)),這時(shí)協(xié)調(diào)者4和參與者3突然死掉了。備用協(xié)調(diào)起來后,詢問其他參與者狀態(tài),一看都到pre階段了,說明都領(lǐng)到了數(shù)據(jù)包括死掉的3,因?yàn)樗頉Q過才進(jìn)入到準(zhǔn)備階段,所以他讓大家都提交了。當(dāng)3重啟后,看了日志,發(fā)現(xiàn)自己已經(jīng)到準(zhǔn)備階段時(shí)死掉了,可以執(zhí)行提交,這樣保證了數(shù)據(jù)一致性。

3. paxos

有個(gè)叫paxos小島,他們每項(xiàng) 決定都得通過提議然后半數(shù)才能生效,每個(gè)決定的提議都有一個(gè)唯一的全局編號,這個(gè)編號只能自增長,不能后退。 
何為通過:就是提議的id好要大于議員手記錄的最大的id

第一階段:提議者發(fā)起提議給每個(gè)議員,然后等議員反饋同意或不同意。

第二階段:如果半數(shù)以上同意了,則執(zhí)行事務(wù),否則不執(zhí)行。

如果半數(shù)以上同意了,這個(gè)議題就通過,然后提議者就命令剩下的議員同步自己的數(shù)據(jù),并修改手上的最大id好。

問題:在分布式中并發(fā)是常見的,例如現(xiàn)在有提議者p1,p2 
提議者同時(shí)提出一個(gè)提議,這個(gè)時(shí)候他們手上的id就有可能是一樣,p1的id是3,p2的id也是3。當(dāng)p1提議給議員(假設(shè)議員手上的id是2),現(xiàn)在議員先同意了p1,p2來訪問這個(gè)議員,議員告訴他已經(jīng)同意了議題id是3,p2的id是3不同意。然后p2回去加大自己的id重新請求,議員這時(shí)同意了他。p1收到半數(shù)同意準(zhǔn)備去通知他們來更新id同步數(shù)據(jù),可是發(fā)現(xiàn)議員們的id比自己的大了,然后p1有加大id。這種極端情況,導(dǎo)致死鎖了。 
這種解決辦法就是提議者只有一個(gè),也就是paxos里面說的總統(tǒng)。

三、 zookeeper

1. 什么是zookeeper

zookeeper是為了解決分布式一致性問題的工程應(yīng)用

zookeeper并沒有直接用paxos協(xié)議,而是在paxos協(xié)議的基礎(chǔ)上,提出了符合自己符合實(shí)際應(yīng)用場景的高可用的一致性協(xié)議ZAB原子廣播協(xié)議。

zookeeper分布式一致性的特點(diǎn):

  • 順序一致性:客戶端訪問zookeeper的一個(gè)節(jié)點(diǎn),發(fā)起事務(wù),是排著隊(duì)到leader那讓他發(fā)起提議,一個(gè)一個(gè)來;

  • 單一視圖:任何節(jié)點(diǎn)上的數(shù)據(jù)都是一樣的,所以客戶端訪問任意節(jié)點(diǎn)都看到是相同的數(shù)據(jù)。

  • 可靠性:給了一個(gè)客戶端反饋,同意他的請求,那么就是真的同意了。

  • 實(shí)時(shí)性:zookeeper保證在一定時(shí)間內(nèi),比如5秒之后你可以訪問到最新數(shù)據(jù)。這是最終一致性導(dǎo)致的。

2. zookeeper設(shè)計(jì)目標(biāo)

  • 簡單的數(shù)據(jù)模型:就是文件夾的樹形結(jié)構(gòu)

  • 可以構(gòu)建集群

  • 順序訪問:客戶端提出了一個(gè)事務(wù)請求,會(huì)獲得一個(gè)唯一的id編號,用于操作的先后順序;

  • 高性能:這里指的是讀取數(shù)據(jù)

3. zookeeper的幾個(gè)角色

zookeeper有幾個(gè)角色:leader、follower、observer;其中observer一般不配置,它也不參與投票,observer可以在不影響寫性能的情況下提升集群的讀性能; 
zookeeper中節(jié)點(diǎn)有實(shí)體機(jī)器節(jié)點(diǎn),還有znode數(shù)據(jù)節(jié)點(diǎn)。znode數(shù)據(jù)節(jié)點(diǎn)指的是目錄文件夾。數(shù)據(jù)節(jié)點(diǎn)有永久數(shù)據(jù)節(jié)點(diǎn)和臨時(shí)節(jié)點(diǎn)。

4. watcher監(jiān)聽機(jī)制

zookeeper有watcher監(jiān)聽機(jī)制,例如一個(gè)臨時(shí)數(shù)據(jù)節(jié)點(diǎn),如果客戶session中斷了,臨時(shí)節(jié)點(diǎn)就刪除了,這時(shí)watcher就監(jiān)聽到了。這點(diǎn)就是hadoop的HA實(shí)現(xiàn)機(jī)制,zkfc實(shí)現(xiàn)了zookeeper的watcher機(jī)制來自動(dòng)切換。

5. zookeeper的權(quán)限

zookeeper的數(shù)據(jù)節(jié)點(diǎn)就是一個(gè)文件夾目錄,它有自己的權(quán)限機(jī)制ACL。 
實(shí)際zookeeper刪除、設(shè)置。創(chuàng)建目錄,這些就是執(zhí)行權(quán)限。

四、 zab協(xié)議

1. zab 的三種狀態(tài):

  1. Looking/election:系統(tǒng)剛啟動(dòng)時(shí)或者Leader崩潰后正處于選舉狀態(tài);

  2. Following:Follwoer節(jié)點(diǎn)所處的狀態(tài),F(xiàn)ollower與Leader處于數(shù)據(jù)同步階段;

  3. Leading:Leader所處狀態(tài),當(dāng)前集群中有一個(gè)Leader為主進(jìn)程。

2. zab宏觀上的三個(gè)階段:

  1. 崩潰恢復(fù)

  2. 快速選舉

  3. 原子廣播

3. zab的微觀的四個(gè)階段:

  1. 選舉

  2. 發(fā)現(xiàn)

  3. 同步

  4. 廣播 
    客戶端提交一個(gè)請求到leader然后leader發(fā)起提議floower來投票,這個(gè)過程都是原子廣播

4. zab的節(jié)點(diǎn)狀態(tài)講解

  1. ZooKeeper啟動(dòng)時(shí)所有節(jié)點(diǎn)初始狀態(tài)為Looking,這時(shí)集群會(huì)初始選舉出一個(gè)Leader節(jié)點(diǎn),選舉出的Leader節(jié)點(diǎn)切換為Leading狀態(tài);

  2. 當(dāng)節(jié)點(diǎn)發(fā)現(xiàn)集群中已經(jīng)選舉出Leader則該節(jié)點(diǎn)會(huì)切換到Following 狀態(tài),然后和Leader節(jié)點(diǎn)保持同步;

  3. 當(dāng)Following節(jié)點(diǎn)與Leader失去聯(lián)系時(shí)Follower節(jié)點(diǎn)則會(huì)切換到Looking狀態(tài),開始新一輪選舉;

  4. 在ZooKeeper的整個(gè)生命周期中每個(gè)節(jié)點(diǎn)都會(huì)在Looking、Following、Leading狀態(tài)間不斷轉(zhuǎn)換。

當(dāng)啟動(dòng)后leader崩潰選舉

選舉出Leader節(jié)點(diǎn)后zab進(jìn)入原子廣播階段,這是Leader為和自己同步的每個(gè)節(jié)點(diǎn)Follower只能和一個(gè)Leader保持同步Leader節(jié)點(diǎn)與Follow節(jié)點(diǎn)使用心跳檢測來感知對方的存在;

當(dāng)Leader節(jié)點(diǎn)在超時(shí)時(shí)間內(nèi)收到來自Follower的心跳檢測,那Follower節(jié)點(diǎn)會(huì)一直與該節(jié)點(diǎn)保持連接;若超時(shí)時(shí)間內(nèi)Leader沒有接收到來自過半Follower節(jié)點(diǎn)的心跳檢測或TCP連接斷開,那Leader會(huì)結(jié)束當(dāng)前的領(lǐng)導(dǎo),切換到Looking狀態(tài),所有Follower節(jié)點(diǎn)也會(huì)放棄該Leader節(jié)點(diǎn)切換到Looking狀態(tài),所有Follower節(jié)點(diǎn)也會(huì)放棄該Leader節(jié)點(diǎn)切換到Looking狀態(tài),然后開始新一輪選舉;

5. 詳解zab四個(gè)階段:

  1. 第一階段:準(zhǔn)備leader選舉 
    成為leader的條件: 
    選epoch最大的; 
    epoch相等,選zxid最大的 
    epoch的zxid都相等,選擇server id最大的(就是配置zoo.cfg中的myid)。

節(jié)點(diǎn)在選舉開始讀默認(rèn)投票給自己,當(dāng)接收其他節(jié)點(diǎn)的選票是,會(huì)根據(jù)上面的條件更改自己的選票并重新發(fā)送選票給其他節(jié)點(diǎn),但一個(gè)節(jié)點(diǎn)的得到票超過半數(shù),該節(jié)點(diǎn)會(huì)設(shè)置自己的狀態(tài)leading,其他節(jié)點(diǎn)會(huì)設(shè)置自己的狀態(tài)為following。

什么是epoch,什么是zxid? 
首先ZooKeeper一個(gè)事務(wù)包含兩部分,一個(gè)數(shù)數(shù)據(jù),一個(gè)是id;id是全局唯一的id,數(shù)據(jù)就是具體操作數(shù)據(jù),并且是lastid加1; 
ZooKeeper每個(gè)請求都是順序執(zhí)行的,強(qiáng)順序性的; 
epoch是leader標(biāo)識(shí),zxid是事務(wù)標(biāo)識(shí)。

epoch是指:年代,一個(gè)領(lǐng)導(dǎo)掛了,另一個(gè)領(lǐng)導(dǎo)上任,現(xiàn)在就是新領(lǐng)導(dǎo)的時(shí)代了,當(dāng)產(chǎn)生新領(lǐng)導(dǎo),事務(wù)編號就從0開始。

zxid是總稱:前32位是leader編號(epoch),后32位是這個(gè)leader下事務(wù)編號。

  1. 第二階段:發(fā)現(xiàn)階段 
    發(fā)現(xiàn)階段主要是發(fā)現(xiàn)最大的epoch和最大的事務(wù)編號; 
    之前說了快速產(chǎn)生準(zhǔn)備leader,然后其他節(jié)點(diǎn)就是fllower,然后發(fā)現(xiàn)階段就是fllower向leader報(bào)告,自己的epoch和事務(wù)編號,然后leader排序,選擇最大的epoch和最大的事務(wù)編號。然后通知fllower去更改它的epoch。

  2. 第三階段:同步階段 
    leader利用上一個(gè)階段知道最大事務(wù)編號,然后通知其他fllower去leader這同步數(shù)據(jù)。事務(wù)編號有可能不一樣,所以要同步。保持?jǐn)?shù)據(jù)最終一致性。

  3. 第四階段:原子廣播階段 
    這時(shí)候leader真正對外提供服務(wù),接受客戶端的請求,生成一個(gè)數(shù)據(jù),半數(shù)以上同意,然后就提交事務(wù)。剩下的其他節(jié)點(diǎn)直接去leader那同步數(shù)據(jù)。

原來掛掉的leader的事務(wù)?

它啟動(dòng)起來,發(fā)現(xiàn)他的時(shí)代已經(jīng)過時(shí)了,就刪除了事務(wù),發(fā)現(xiàn)有心的leader,自己就變成fllower,然后就去同步數(shù)據(jù)。

在選舉上,會(huì)選舉擁有最新提議歷史(lastZxid最大)的節(jié)點(diǎn)作為leader,這樣子就省去了發(fā)現(xiàn)最新提議的步驟。這是局域擁有最新提議的節(jié)點(diǎn)也有最新提交記錄的前提。

6. zab和paxos區(qū)別

paxos沒有給出leader選舉協(xié)議,只給出一致性協(xié)議。

五、 ZooKeeper在大數(shù)據(jù)中的應(yīng)用場景

ZooKeeper 目錄有幾個(gè)特點(diǎn),有臨時(shí)目錄,永久目錄,順序目錄,強(qiáng)一致性(順序訪問)和watcher機(jī)制。

利用這些特點(diǎn),我們可以實(shí)現(xiàn):

  • 發(fā)布訂閱,例如一些配置信息;

  • 負(fù)載均衡,例如kafka生產(chǎn),消費(fèi)均衡;

  • master選舉,例如hbase利用它hmaster選舉;

  • 主備切換,例如hdfs的HA利用它進(jìn)行切換。

1. 發(fā)布訂閱

例如:我們的數(shù)據(jù)庫配置信息文件就可以放到ZooKeeper上。 
利用ZooKeeper的watcher機(jī)制實(shí)現(xiàn)配置變更,程序在運(yùn)行中就可以獲取到最新的配置信息,不需要起停。

2. ZooKeeper HA應(yīng)用(主備切換)

hdfs的HA,它的主備切換用的是ZooKeeper來做Active standby之間切換的。

大致步驟: 
1). 多個(gè)nodemanager同時(shí)向ZooKeeper注冊一個(gè)數(shù)據(jù)節(jié)點(diǎn)lock。因?yàn)閆ooKeeper是強(qiáng)一致性的,所以只能有一個(gè)注冊成功,注冊成功的那個(gè)就是active 
2). 沒有注冊成功的否成了standby,然后在lock目錄上注冊監(jiān)聽事件watcher。 
注意:注冊的lock節(jié)點(diǎn)目錄是臨時(shí)節(jié)點(diǎn),如果active掛了,這個(gè)目錄也就沒了,并且這個(gè)lock目錄是有權(quán)限控制的ACL,防止active假死后重新連接出現(xiàn)腦裂。 
3). 主備切換:當(dāng)active掛掉以后,會(huì)話結(jié)束,臨時(shí)目錄自動(dòng)刪除。其他standby監(jiān)聽到臨時(shí)目錄刪除了,各個(gè)standby重新同時(shí)進(jìn)行創(chuàng)建帶權(quán)限的臨時(shí)目錄。成功的改為active,沒有成功的還是standby。 
4). 如果掛掉的active啟動(dòng)后,發(fā)現(xiàn)沒有權(quán)限范圍lock臨時(shí)目錄,自動(dòng)更改成standby狀態(tài)。

這是ZooKeeper主備切換應(yīng)用,利用臨時(shí)目錄,ACL,watcher機(jī)制實(shí)現(xiàn)。

3. master選舉

利用ZooKeeper master選舉其實(shí)很簡單,和主備切換一樣。 
利用強(qiáng)一致性同時(shí)創(chuàng)建同一個(gè)目錄,最后只能一個(gè)成功。 
成功那個(gè)節(jié)點(diǎn)會(huì)返回成功狀態(tài),其他節(jié)點(diǎn)返回異常,成功的那個(gè)就成為master,其他節(jié)點(diǎn)就改成slave。

4. zookeeper在hbase中應(yīng)用

hmaster監(jiān)控regionserver是否掛掉。

首先,rs(regionserver簡稱)在ZooKeeper注冊一個(gè)臨時(shí)目錄rs/[hostname]目錄,然后hmaster注冊watcher監(jiān)控rs目錄下面變化就可以發(fā)現(xiàn)rs服務(wù)器是否掛掉。

元數(shù)據(jù)存儲(chǔ)(訂閱發(fā)布):每個(gè)region存儲(chǔ)信息位置和狀態(tài),都放在ZooKeeper上存儲(chǔ),以便大家都能訂閱目前region所處的狀態(tài),比如region是在合并還是在切割,有多少個(gè)region分別在哪個(gè)regionserver上。所以客戶端訪問先訪問ZooKeeper得到位置信息去讀取數(shù)據(jù),不經(jīng)過hmaster。

5. ZooKeeper在kafka中應(yīng)用

kafka在ZooKeeper注冊的信息

首先,kafka會(huì)把broker創(chuàng)建到ZooKeeper臨時(shí)目錄上。

/broker/ids/[1-n]表示broker還活著。然后topic信息創(chuàng)建到ZooKeeper臨時(shí)目錄。/brokers/topics/[topicname]/paritiong信息。如果有消費(fèi)者,消費(fèi)者也會(huì)在ZooKeeper創(chuàng)建自己消費(fèi)信息的offset信息。等臨時(shí)目錄。

kafka注冊broker和topic信息使為了生產(chǎn)消費(fèi)時(shí)負(fù)載均衡,這就利用到ZooKeeper負(fù)載均衡。消費(fèi)生產(chǎn)者監(jiān)控到broker和topic,topic和partition之間的數(shù)量,進(jìn)行重新排序。

上述內(nèi)容就是ZooKeeper知識(shí)點(diǎn)都有哪些,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


新聞名稱:ZooKeeper知識(shí)點(diǎn)都有哪些
網(wǎng)頁路徑:http://weahome.cn/article/ijdgoj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部