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