新聞中心
Zookeeper 是一種開源的分布式協(xié)同服務(wù),它可以幫助我們協(xié)調(diào)多個(gè)服務(wù)器之間的數(shù)據(jù)一致性,是分布式系統(tǒng)中十分重要的基礎(chǔ)設(shè)施。在實(shí)際的使用中,我們可能會(huì)遇到需要讀取舊版本的數(shù)據(jù)庫的情況,那么,Zookeeper 如何讀取舊版本的數(shù)據(jù)庫呢?

我們需要了解一下 Zookeeper 的數(shù)據(jù)模型。在 Zookeeper 中,數(shù)據(jù)模型類似于一個(gè)樹結(jié)構(gòu),每個(gè)節(jié)點(diǎn)都可以存儲(chǔ)一個(gè)小的數(shù)據(jù)量。Zookeeper 的版本號(hào)是用來進(jìn)行版本控制的,每個(gè)節(jié)點(diǎn)可以擁有多個(gè)版本。當(dāng)一個(gè)節(jié)點(diǎn)的數(shù)據(jù)被更新時(shí),它的版本號(hào)也會(huì)隨之遞增。每個(gè)節(jié)點(diǎn)的數(shù)據(jù)只會(huì)在節(jié)點(diǎn)存在的情況下才會(huì)被存儲(chǔ),節(jié)點(diǎn)刪除后,其下的數(shù)據(jù)也會(huì)被刪除。
如果我們想要讀取 Zookeeper 的舊版本數(shù)據(jù)庫,我們可以使用 Zookeeper 的版本控制機(jī)制。Zookeeper 的版本控制機(jī)制可以幫助我們記錄每個(gè)節(jié)點(diǎn)最近一次的更新,也可以幫助我們?cè)L問之前的版本。Zookeeper 提供了一些 API,可以幫助我們讀取舊版本的節(jié)點(diǎn)數(shù)據(jù)。
我們需要使用 Zookeeper 的 getChildren() 方法來獲取指定節(jié)點(diǎn)的子節(jié)點(diǎn)列表。getChildren() 方法的第二個(gè)參數(shù)可以指定是否要監(jiān)聽節(jié)點(diǎn)的變化,在這里我們不需要監(jiān)聽節(jié)點(diǎn)的變化,將第二個(gè)參數(shù)設(shè)置為 false 即可。
接下來,我們可以使用 Zookeeper 的 getData() 方法來獲取指定節(jié)點(diǎn)的數(shù)據(jù)。getData() 方法需要傳遞兩個(gè)參數(shù),之一個(gè)參數(shù)是節(jié)點(diǎn)的路徑,第二個(gè)參數(shù)是一個(gè) boolean 值,用于指定是否要獲取節(jié)點(diǎn)的所有版本。如果我們?cè)O(shè)置這個(gè)參數(shù)為 true,Zookeeper 將返回給定節(jié)點(diǎn)的所有版本數(shù)據(jù),否則只會(huì)返回最新版本的數(shù)據(jù)。
當(dāng)我們成功獲取了指定節(jié)點(diǎn)的歷史版本數(shù)據(jù)后,我們就可以使用這些數(shù)據(jù)進(jìn)行后續(xù)的操作了。如果我們需要將這些歷史數(shù)據(jù)重新寫入 Zookeeper,則可以使用 Zookeeper 的 setData() 方法來更新節(jié)點(diǎn)數(shù)據(jù)。setData() 方法需要傳遞三個(gè)參數(shù),之一個(gè)參數(shù)是節(jié)點(diǎn)的路徑,第二個(gè)參數(shù)是新的數(shù)據(jù),第三個(gè)參數(shù)是版本號(hào)。我們可以使用從 Zookeeper 的歷史數(shù)據(jù)中獲取到的最新版本號(hào)來更新節(jié)點(diǎn)數(shù)據(jù),這樣就可以將舊版本數(shù)據(jù)重新寫入到 Zookeeper 中了。
一下,Zookeeper 如何讀取舊版本的數(shù)據(jù)庫?我們可以使用 Zookeeper 的版本控制機(jī)制來讀取舊版本的節(jié)點(diǎn)數(shù)據(jù),并使用 Zookeeper 的 setData() 方法將歷史數(shù)據(jù)重新寫入到 Zookeeper 中。這種方法需要熟悉 Zookeeper 的相關(guān) API,需要一定的技術(shù)水平和經(jīng)驗(yàn),但是對(duì)于需要恢復(fù)舊版本數(shù)據(jù)的情況來說,是一個(gè)非常有用的解決方案。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
通過筆記本訪問別處的數(shù)據(jù)庫時(shí),zookeeper安裝在哪
ZooKeeper 服務(wù)器包含在單個(gè) JAR 文件中,安裝此服務(wù)需要用戶創(chuàng)建一個(gè)配置文檔,并對(duì)其進(jìn)行設(shè)置。我們?cè)?ZooKeeper-*.*.* 目錄(我們以當(dāng)前 ZooKeeper 的最新版 3.3.1 為例,故此下面的“ ZooKeeper-*.*.* ”都將寫為“ ZooKeeper-3.3.1” )的 conf 文件夾下創(chuàng)建一個(gè) zoo.cfg 文件,它包含如下的內(nèi)容:
tickTime=2023
dataDir=/var/zookeeper
clientPort=2181
你起碼要說訪問什么數(shù)據(jù)庫吧
Zookeeper選主過程,理論和源碼結(jié)合,看這一篇足夠了
【共4239字,閱讀需要15分鐘】
Zookeeper作為Dubbo生態(tài)的默認(rèn)注冊(cè)中心,得到了非常的普遍的應(yīng)用,雖然后來阿里又出了nacos,但是不可否認(rèn)的是ZK仍然是一款非常優(yōu)秀的開源產(chǎn)品,非常優(yōu)秀的注冊(cè)中心備選方案。
ZK有很多特性,本篇文章主要介紹ZK的選主過程(后宮佳麗三千,我就獨(dú)寵你一人)
要說選主的過程,我們首先得了解ZK到底有哪些節(jié)點(diǎn),這些節(jié)點(diǎn)充當(dāng)?shù)媒巧鞘裁矗?
ZK本身得節(jié)點(diǎn)主要分為三類:
Leader:主要是負(fù)責(zé)數(shù)據(jù)的寫入,如果超過半數(shù)同意,那么就廣播進(jìn)行寫入;
Follower:主要負(fù)責(zé)查詢請(qǐng)求并將寫入請(qǐng)求發(fā)送給leader,參與選舉和寫入投票;
Observe:也是負(fù)責(zé)查詢請(qǐng)求并將寫入請(qǐng)求發(fā)送給leader,不參加投票,只被動(dòng)接收結(jié)果
獲取半數(shù)投票以上的節(jié)點(diǎn)成為leader節(jié)點(diǎn)。
萬事萬物都有一個(gè)準(zhǔn)則,好的比較壞的,壞的比較更壞的,世上本沒有痛苦,痛苦都是自己尋找的結(jié)果,海燕你可長(zhǎng)點(diǎn)心吧,哎呀跑偏了。
ZK比較的時(shí)候有三個(gè)指標(biāo)或者三個(gè)維度:
(1)任期
(2)事務(wù)ID(ZK中的事務(wù)ID)
(3)節(jié)點(diǎn)編號(hào)(集群中每個(gè)節(jié)點(diǎn)的編號(hào))
根據(jù)以上三個(gè)指標(biāo)就可以說出最終的結(jié)論了:選擇任期大的,任期一樣選擇事務(wù)ID大的,前兩個(gè)都一樣,選擇節(jié)點(diǎn)編號(hào)大的。
就這么簡(jiǎn)單?是的。規(guī)則就是這么簡(jiǎn)單,但是源碼還是有那么一丟丟的繞。
源碼看著相對(duì)比較枯燥,但是作為一個(gè)手藝人,怎么能不去了解怎么做的呢,我們先來梳理一下代碼的流程,方便更好的看第四部分內(nèi)容。
節(jié)點(diǎn)先投自己一票,然后進(jìn)行廣播
節(jié)點(diǎn)內(nèi)部循環(huán)進(jìn)行消息接收
收到消息后
如果消明含息為空,就進(jìn)行重新發(fā)送消息或者建立連接
如果消息不為空,且消息接收者和投票的leader都是合法節(jié)點(diǎn)就進(jìn)行下邊步驟。
如果節(jié)點(diǎn)為looking節(jié)點(diǎn)
根據(jù)當(dāng)前節(jié)點(diǎn)的投票和接收到的投票進(jìn)行比較來決定是否需要再次發(fā)送投票并且記錄投票的結(jié)果
每次都判斷記錄的票數(shù),如果過半就進(jìn)行節(jié)點(diǎn)狀態(tài)的設(shè)置
選主的邏輯是在lookForLeader開始的,像金字塔的之一塊磚一樣,我們先看ZK選主的之一塊磚lookForLeader,之一次看源碼得時(shí)候一定要把握主線,忽略從線,等主線完全理清楚了之后才去處理從線,要不會(huì)陷入迷宮之中。
下邊就是主要的投票代碼,看里邊的注釋:
更新投票或者投票的方法為:
發(fā)送通知的方法為:
待到山花爛漫時(shí),她在叢中笑,消息都已經(jīng)發(fā)完了,肯定就到了接收到選票的時(shí)候應(yīng)該怎么操作了,接收選票的代碼也是在lookForLeader中:
接上代碼繼續(xù)討論,校驗(yàn)發(fā)送投票節(jié)點(diǎn)的狀態(tài),我們從本文的咐族之一章節(jié)知道Observe節(jié)點(diǎn)是不參與投票的,只是轉(zhuǎn)發(fā)寫請(qǐng)求和被動(dòng)接收數(shù)據(jù),負(fù)責(zé)查詢請(qǐng)求,所以從代碼中我們也可以看出來:
當(dāng)發(fā)送投票的節(jié)點(diǎn)狀態(tài)是FOLLOWING和LEADING時(shí),代表發(fā)送節(jié)點(diǎn)已經(jīng)選舉完成,所以處理方法的邏輯衡槐弊都是一樣滴,這部分限于篇幅太長(zhǎng),暫時(shí)就不深入討論了,感興趣的朋友可以私信我或者加我微信號(hào)M_P_E_D進(jìn)行交流和溝通。
終于到重頭戲了,咱們看看LOOKING狀態(tài)時(shí)的代碼:
我們先把totalOrderPredicate方法放前邊,這個(gè)其實(shí)就是選舉leader的規(guī)則的實(shí)現(xiàn)。
道阻且長(zhǎng),行則將至,行而不輟,未來可期,加油。
zookeeper 讀舊數(shù)據(jù)庫的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于zookeeper 讀舊數(shù)據(jù)庫,Zookeeper 如何讀取舊版本數(shù)據(jù)庫?,通過筆記本訪問別處的數(shù)據(jù)庫時(shí),zookeeper安裝在哪,Zookeeper選主過程,理論和源碼結(jié)合,看這一篇足夠了的信息別忘了在本站進(jìn)行查找喔。
四川成都云服務(wù)器租用托管【創(chuàng)新互聯(lián)】提供各地服務(wù)器租用,電信服務(wù)器托管、移動(dòng)服務(wù)器托管、聯(lián)通服務(wù)器托管,云服務(wù)器虛擬主機(jī)租用。成都機(jī)房托管咨詢:13518219792
創(chuàng)新互聯(lián)(www.cdcxhl.com)擁有10多年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)、開啟建站+互聯(lián)網(wǎng)銷售服務(wù),與企業(yè)客戶共同成長(zhǎng),共創(chuàng)價(jià)值。
新聞名稱:Zookeeper如何讀取舊版本數(shù)據(jù)庫?(zookeeper讀舊數(shù)據(jù)庫)
轉(zhuǎn)載注明:http://m.5511xx.com/article/dpsidej.html


咨詢
建站咨詢
