對(duì)在線(xiàn)熱備份數(shù)據(jù)庫(kù)的復(fù)制的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種用于在線(xiàn)熱備份數(shù)據(jù)庫(kù)的復(fù)制器的方法和裝置。
【背景技術(shù)】
[0002]在熱備份(HSB)數(shù)據(jù)庫(kù)中,事務(wù)是在兩個(gè)階段提交的,在事務(wù)被認(rèn)為正確提交前,主節(jié)點(diǎn)和備份節(jié)點(diǎn)都必須成功地認(rèn)可更改。這是一個(gè)兩階段提交(2PC)協(xié)議,其保證了在兩個(gè)節(jié)點(diǎn)的數(shù)據(jù)庫(kù)總是具有同樣的狀態(tài)。2PC是原子提交協(xié)議(ACP),并且是一種用于協(xié)調(diào)參與分布式原子事務(wù)的全部過(guò)程是否提交或中止(回滾)事務(wù)的專(zhuān)門(mén)類(lèi)型的共識(shí)協(xié)議。有些HSB數(shù)據(jù)庫(kù)通過(guò)提供更寬松的事務(wù),為用戶(hù)提供選項(xiàng)以交換性能的一致性。這種事務(wù)是在兩階安全接收(2SR)協(xié)議中定義的,其中只要備份節(jié)點(diǎn)認(rèn)可其已接收到提交事務(wù)的所有日志記錄,主節(jié)點(diǎn)就認(rèn)可。
[0003]主節(jié)點(diǎn)(primary node)有時(shí)被稱(chēng)為主要節(jié)點(diǎn)(master node),備份節(jié)點(diǎn)(backupnode)有時(shí)也被稱(chēng)為次要節(jié)點(diǎn)(secondary node)、備用節(jié)點(diǎn)(standy node)或從屬節(jié)點(diǎn)(slave node)。通常,主節(jié)點(diǎn)接受所有事務(wù),而備份節(jié)點(diǎn)只接受只讀事務(wù)。
[0004]有不同的方式來(lái)保持備份節(jié)點(diǎn)和主節(jié)點(diǎn)同步,但在本公開(kāi)中,考慮的是日志復(fù)制(也被稱(chēng)為日志傳送復(fù)制)。在日志復(fù)制中,主節(jié)點(diǎn)將每一個(gè)寫(xiě)事務(wù)存儲(chǔ)到其數(shù)據(jù)庫(kù)以及日志記錄,借此將日志記錄進(jìn)一步復(fù)制到備份節(jié)點(diǎn)。當(dāng)備份節(jié)點(diǎn)接收到日志記錄時(shí),其為接收的每個(gè)日志記錄執(zhí)行重做(REDO)事務(wù)。重做事務(wù)重復(fù)該引用的事務(wù)。
[0005]在實(shí)施例中,將HSB數(shù)據(jù)庫(kù)存儲(chǔ)在主存儲(chǔ)器中以便數(shù)據(jù)的快速訪(fǎng)問(wèn),因?yàn)橄鄬?duì)于對(duì)持久性存儲(chǔ)器的間接訪(fǎng)問(wèn)和較慢的訪(fǎng)問(wèn)速度,主存儲(chǔ)器是由計(jì)算機(jī)處理單元(CPU)直接尋址的??焖俅鎯?chǔ)器訪(fǎng)問(wèn)尤其不是HSB數(shù)據(jù)庫(kù)的屬性,但是它適用于可支持熱備份功能的存儲(chǔ)器內(nèi)(in-memory)數(shù)據(jù)庫(kù)。日志記錄通常存儲(chǔ)在持久存儲(chǔ)器中。存儲(chǔ)器內(nèi)數(shù)據(jù)庫(kù)通過(guò)周期性地(或按需)將數(shù)據(jù)庫(kù)的檢查點(diǎn)映像(也稱(chēng)為快照)寫(xiě)入到持久存儲(chǔ)器來(lái)保證對(duì)數(shù)據(jù)的持續(xù)修改。檢查點(diǎn)映像寫(xiě)入是一個(gè)檢查點(diǎn)過(guò)程。在檢查點(diǎn)映像中,數(shù)據(jù)被組織為數(shù)據(jù)庫(kù)頁(yè),其是存儲(chǔ)器中的連續(xù)數(shù)據(jù)區(qū)域,并且通常與單個(gè)或多個(gè)存儲(chǔ)邏輯塊大小相等。為簡(jiǎn)單起見(jiàn),假定數(shù)據(jù)庫(kù)頁(yè)與磁盤(pán)塊大小相等。
[0006]存儲(chǔ)器內(nèi)數(shù)據(jù)庫(kù)在易失性存儲(chǔ)器中維護(hù)其活動(dòng)的數(shù)據(jù)。存儲(chǔ)器內(nèi)數(shù)據(jù)典型地包括存儲(chǔ)器的內(nèi)建管理器,其從操作系統(tǒng)分配大量存儲(chǔ)器,然后以最適合的方式將其組織以便在存儲(chǔ)器內(nèi)數(shù)據(jù)庫(kù)中使用。假定數(shù)據(jù)被存儲(chǔ)在不同大小的存儲(chǔ)器分段中,但每個(gè)存儲(chǔ)器分段包括使得將數(shù)據(jù)組織成存儲(chǔ)器頁(yè)大小以進(jìn)行檢查點(diǎn)映像創(chuàng)建成為可能的信息?;蛘?,該數(shù)據(jù)庫(kù)可以在存儲(chǔ)器中組織成存儲(chǔ)器頁(yè)大小。
[0007]在HSB數(shù)據(jù)庫(kù)中,有一個(gè)主節(jié)點(diǎn)和通常一個(gè)備份節(jié)點(diǎn),然而,一些變化中具有多個(gè)備份節(jié)點(diǎn)。在更復(fù)雜的系統(tǒng),可能有復(fù)制在分區(qū)(或“碎片”)上的數(shù)據(jù)庫(kù),其中一個(gè)分區(qū)被認(rèn)為是主分區(qū),其他分區(qū)被認(rèn)為是備份分區(qū)。實(shí)施例也可應(yīng)用于這種分區(qū)模型。節(jié)點(diǎn)可以表示一個(gè)物理分離的計(jì)算機(jī)單元、在機(jī)架上的卡、或在單個(gè)主機(jī)內(nèi)的虛擬機(jī)中的過(guò)程。有時(shí),HSB數(shù)據(jù)庫(kù)或運(yùn)行HSB數(shù)據(jù)庫(kù)的計(jì)算機(jī)節(jié)點(diǎn)會(huì)崩潰。這種崩潰將以存儲(chǔ)在違反節(jié)點(diǎn)上的數(shù)據(jù)庫(kù)不再能被恢復(fù)的方式,違反節(jié)點(diǎn)中一個(gè)節(jié)點(diǎn)的檢查點(diǎn)映像。如果另一個(gè)節(jié)點(diǎn)在崩潰期間保持運(yùn)行,那么它可以被切換為主節(jié)點(diǎn)(如果它還不是主節(jié)點(diǎn)),其將繼續(xù)執(zhí)行事務(wù)。
[0008]有時(shí)主節(jié)點(diǎn)失效后,另一個(gè)節(jié)點(diǎn)作為備份節(jié)點(diǎn)起動(dòng)。啟動(dòng)節(jié)點(diǎn)可能是失效(且已恢復(fù))節(jié)點(diǎn)或是在HSB數(shù)據(jù)庫(kù)中能夠充當(dāng)備份節(jié)點(diǎn)的備用節(jié)點(diǎn)。如果主節(jié)點(diǎn)失效,無(wú)法從非現(xiàn)有的檢查點(diǎn)映像啟動(dòng)備份節(jié)點(diǎn)。只有當(dāng)主節(jié)點(diǎn)啟動(dòng)并運(yùn)行時(shí),才有可能存在數(shù)據(jù)庫(kù)副本。如果起動(dòng)的備份節(jié)點(diǎn)沒(méi)有在其磁盤(pán)上存儲(chǔ)的數(shù)據(jù)庫(kù),那么它就無(wú)法恢復(fù),并且它不能夠處理存儲(chǔ)在重做事務(wù)中的事務(wù)。因此,創(chuàng)建檢查點(diǎn)映像之后,需要為啟動(dòng)的備份節(jié)點(diǎn)提供數(shù)據(jù)副本,以及包含在主節(jié)點(diǎn)中的數(shù)據(jù)庫(kù)上做出的所有修改的日志記錄。
[0009]如果備份節(jié)點(diǎn)在失效之后被重新啟動(dòng),那么它可能有損壞的檢查點(diǎn)映像或根本沒(méi)有檢查點(diǎn)映像。因此,需要從主節(jié)點(diǎn)將完整的檢查點(diǎn)映像復(fù)制到備份節(jié)點(diǎn),而不將主節(jié)點(diǎn)離線(xiàn)。備份節(jié)點(diǎn)需要:元數(shù)據(jù)、系統(tǒng)表、最新的檢查點(diǎn)映像;以及從啟動(dòng)檢查點(diǎn)映像創(chuàng)建到主節(jié)點(diǎn)和備份節(jié)點(diǎn)一致時(shí)執(zhí)行的寫(xiě)事務(wù)的重做事務(wù)。
[0010]將備份節(jié)點(diǎn)上的數(shù)據(jù)庫(kù)與主節(jié)點(diǎn)上的數(shù)據(jù)同步包括2個(gè)階段:復(fù)制階段和追趕階段。復(fù)制階段包括將主節(jié)點(diǎn)上的數(shù)據(jù)庫(kù)復(fù)制到備份節(jié)點(diǎn)上。追趕階段包括在備份節(jié)點(diǎn)上執(zhí)行在主節(jié)點(diǎn)上已經(jīng)執(zhí)行并且提交的事務(wù)有關(guān)的日志記錄。當(dāng)一個(gè)節(jié)點(diǎn)失效或恢復(fù),因?yàn)橛捎谠撌?,HSB數(shù)據(jù)庫(kù)故障容忍已下降,那么系統(tǒng)處于脆弱階段。
[0011]已知的HSB同步解決方案執(zhí)行包括檢查點(diǎn)映像的迭代版本以及由最近事務(wù)創(chuàng)建的日志記錄的一個(gè)或多個(gè)檢查點(diǎn)映像的全部復(fù)制。
[0012]例如,已知的HSB同步過(guò)程可分為在主節(jié)點(diǎn)上的主同步過(guò)程:將檢查點(diǎn)映像(包括元數(shù)據(jù)和實(shí)際數(shù)據(jù))從主節(jié)點(diǎn)發(fā)送到備份節(jié)點(diǎn);發(fā)送檢查點(diǎn)映像創(chuàng)建期間活動(dòng)的重做事務(wù);以及發(fā)送在同步期間主節(jié)點(diǎn)中執(zhí)行的重做事務(wù)。相應(yīng)的備份節(jié)點(diǎn)同步過(guò)程可以分為相應(yīng)的步驟:接收檢查點(diǎn)映像(包括元數(shù)據(jù)和實(shí)際數(shù)據(jù));接收檢查點(diǎn)映像創(chuàng)建期間活動(dòng)的重做事務(wù);以及接收在同步期間主節(jié)點(diǎn)中執(zhí)行的重做事務(wù)。
[0013]運(yùn)行在商業(yè)硬件上的存儲(chǔ)器內(nèi)數(shù)據(jù)庫(kù)可以每秒執(zhí)行成百上千個(gè)單獨(dú)的寫(xiě)事務(wù)。在正常情況下,只讀事務(wù)可以在主節(jié)點(diǎn)和備份節(jié)點(diǎn)兩者上執(zhí)行,從而將部分負(fù)載從主節(jié)點(diǎn)分走。當(dāng)其他節(jié)點(diǎn)失效時(shí),剩下的節(jié)點(diǎn)可能不得不將其角色轉(zhuǎn)換為主節(jié)點(diǎn)(如果它還不是主節(jié)點(diǎn))。主節(jié)點(diǎn)立即負(fù)責(zé)所有寫(xiě)和只讀事務(wù),這在實(shí)踐中可能會(huì)將其活動(dòng)的客戶(hù)機(jī)連接的數(shù)量增加一倍。其結(jié)果是,主節(jié)點(diǎn)的存儲(chǔ)器消耗顯著增加,并根據(jù)負(fù)載的類(lèi)型和實(shí)施細(xì)節(jié),由于同時(shí)執(zhí)行的事務(wù)的數(shù)量增加,性能可能會(huì)下降。
[0014]當(dāng)備份節(jié)點(diǎn)開(kāi)始恢復(fù),主節(jié)點(diǎn)負(fù)責(zé)創(chuàng)建數(shù)據(jù)庫(kù)的當(dāng)前狀態(tài)的新的檢查點(diǎn)映像,該映像將被復(fù)制到備份節(jié)點(diǎn)中,成為數(shù)據(jù)庫(kù)種子。所有在檢查點(diǎn)映像創(chuàng)建期間未提交的事務(wù)都將在主節(jié)點(diǎn)中被記錄為重做事務(wù),被發(fā)送到備份節(jié)點(diǎn)并被執(zhí)行。這是追趕階段。
[0015]必須在主節(jié)點(diǎn)存儲(chǔ)器耗盡前執(zhí)行從主節(jié)點(diǎn)到備份節(jié)點(diǎn)復(fù)制檢查點(diǎn)映像以及使備份節(jié)點(diǎn)追趕上主節(jié)點(diǎn)。如果主節(jié)點(diǎn)的存儲(chǔ)器耗盡,那么HSB同步過(guò)程將失敗或者,必須將主節(jié)點(diǎn)的重做事務(wù)存儲(chǔ)到存儲(chǔ)器中以減少存儲(chǔ)器消耗。需要從持久性存儲(chǔ)磁盤(pán)上讀取持久性存儲(chǔ)重做事務(wù),而這比從快速存儲(chǔ)器讀取數(shù)據(jù)要慢得多。
[0016]從持久性存儲(chǔ)器中訪(fǎng)問(wèn)重做事務(wù)將減慢追趕階段的速度。緩慢的追趕增加了隨之而來(lái)的故障的風(fēng)險(xiǎn),以及增加了備份節(jié)點(diǎn)及時(shí)追趕上主節(jié)點(diǎn)的整體能力的風(fēng)險(xiǎn)。易受傷害期間額外的故障從HSB數(shù)據(jù)庫(kù)的角度來(lái)說(shuō)可能是致命的。如果備份節(jié)點(diǎn)不能在第一次失效之后追趕上主節(jié)點(diǎn),那么將來(lái)致命錯(cuò)誤的風(fēng)險(xiǎn)會(huì)增加。
[0017]因此,在更新頻率很高的情況下,追趕階段成為HSB數(shù)據(jù)庫(kù)可用性的嚴(yán)重威脅,使HSB同步過(guò)程盡可能地快以減少該風(fēng)險(xiǎn)是很重要的。
【發(fā)明內(nèi)容】
[0018]在本發(fā)明的第一方面,提供了一種在分布式數(shù)據(jù)庫(kù)環(huán)境中復(fù)制來(lái)自可操作的主節(jié)點(diǎn)的數(shù)據(jù)庫(kù)映像的復(fù)制器,該復(fù)制器包括:映像引擎,用于定義包括數(shù)據(jù)庫(kù)結(jié)構(gòu)和多個(gè)數(shù)據(jù)庫(kù)頁(yè)的主節(jié)點(diǎn)的檢查點(diǎn)映像;控制器,用于通過(guò)啟動(dòng)備份節(jié)點(diǎn)以及將該定義的數(shù)據(jù)庫(kù)結(jié)構(gòu)存儲(chǔ)在啟動(dòng)的該備份節(jié)點(diǎn)上來(lái)在該備份節(jié)點(diǎn)上創(chuàng)建復(fù)本數(shù)據(jù)庫(kù);傳輸機(jī)制,用于將該檢查點(diǎn)映像的每個(gè)數(shù)據(jù)庫(kù)頁(yè)發(fā)送給該備份節(jié)點(diǎn)以存儲(chǔ);記錄器,用于檢查點(diǎn)映像創(chuàng)建啟動(dòng)后,存儲(chǔ)在該主節(jié)點(diǎn)上的每個(gè)后續(xù)事務(wù),從而創(chuàng)建對(duì)應(yīng)的重做事務(wù)以發(fā)送到該備份節(jié)點(diǎn);頁(yè)識(shí)別器,用于識(shí)別由每個(gè)后續(xù)事務(wù)操作的每個(gè)數(shù)據(jù)頁(yè);并行傳輸機(jī)制,用于與發(fā)送數(shù)據(jù)庫(kù)頁(yè)并行地以對(duì)應(yīng)事務(wù)發(fā)生的順序發(fā)送每個(gè)創(chuàng)建的重做事務(wù)到該備份節(jié)點(diǎn),以便該備份節(jié)點(diǎn)能夠以正確的順序復(fù)制事務(wù);以及頁(yè)控制器,用于將每個(gè)識(shí)別的數(shù)據(jù)庫(kù)頁(yè)按重要性排列以便在對(duì)應(yīng)的重做事務(wù)之前或基本同時(shí)到達(dá)該備份節(jié)點(diǎn),由此該對(duì)應(yīng)的重做事務(wù)無(wú)需等待剩余的數(shù)據(jù)庫(kù)頁(yè)被存儲(chǔ)到該備份節(jié)點(diǎn)上就能夠在該識(shí)別的數(shù)據(jù)庫(kù)頁(yè)上操作。
[0019]根據(jù)本發(fā)明的第二方面,提供了一種在分布式數(shù)據(jù)庫(kù)環(huán)境中將來(lái)自可操作的主節(jié)點(diǎn)的數(shù)據(jù)庫(kù)映像復(fù)制到備份節(jié)點(diǎn)的方法,該方法包括:定義