點(diǎn)對(duì)點(diǎn)數(shù)據(jù)復(fù)制方法、設(shè)備和系統(tǒng)以及主節(jié)點(diǎn)切換方法、設(shè)備和系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及點(diǎn)對(duì)點(diǎn)數(shù)據(jù)復(fù)制方法、設(shè)備和系統(tǒng)以及主節(jié)點(diǎn)切換方法、設(shè)備和系統(tǒng)。
【背景技術(shù)】
[0002]在許多電信和企業(yè)的應(yīng)用程序中,常規(guī)做法是單主機(jī)RDBMS(關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng))復(fù)制。有一個(gè)節(jié)點(diǎn)充當(dāng)主節(jié)點(diǎn),在該節(jié)點(diǎn)上進(jìn)行寫入。然后,通過復(fù)制這些物理寫入或復(fù)制結(jié)構(gòu)化查詢語言(SQL)語句(S卩,邏輯寫入),將這些寫入同步至一個(gè)或多個(gè)用戶。
[0003]圖1為現(xiàn)有技術(shù)中的單主機(jī)復(fù)制拓?fù)浣Y(jié)構(gòu)。如圖1所示,應(yīng)用程序連接到所述主數(shù)據(jù)庫(kù)(主節(jié)點(diǎn))。允許該應(yīng)用程序通過SQL語句(數(shù)據(jù)操縱語言(DML)或數(shù)據(jù)定義語言(DDL))在所述數(shù)據(jù)庫(kù)上寫入。一旦寫入成功,所述主數(shù)據(jù)庫(kù)復(fù)制數(shù)據(jù)至用戶數(shù)據(jù)庫(kù)I和2。所述復(fù)制可由物理復(fù)制或邏輯復(fù)制完成,并可以是異步或同步的。圖2為根據(jù)圖1所示的單主機(jī)復(fù)制拓?fù)浣Y(jié)構(gòu)進(jìn)行的復(fù)制的一種標(biāo)準(zhǔn)實(shí)現(xiàn)方式的示意圖。如圖2所示,所述應(yīng)用程序推送DML/DDL語句至所述主數(shù)據(jù)庫(kù)S201,所述主數(shù)據(jù)庫(kù)解析所述DML/DDL語句S202,然后再執(zhí)行所述DML/DDL語句S203,結(jié)果產(chǎn)生數(shù)據(jù)庫(kù)中的物理寫入S204。所述物理寫入可以位于所述主節(jié)點(diǎn)的內(nèi)存頁上,或者可以是所述主數(shù)據(jù)庫(kù)的存儲(chǔ)盤中的直接輸入/輸出(I/O)寫入。一旦該寫入成功,所述主數(shù)據(jù)庫(kù)判斷是否需要復(fù)制正在被寫入的數(shù)據(jù)至任何連接所述主數(shù)據(jù)庫(kù)的用戶數(shù)據(jù)庫(kù)S205,如果否,所述主數(shù)據(jù)庫(kù)結(jié)束復(fù)制S206;如果是,所述主數(shù)據(jù)庫(kù)發(fā)送重做實(shí)體至每個(gè)連接所述主數(shù)據(jù)庫(kù)的用戶數(shù)據(jù)庫(kù),以復(fù)制正在被寫入的數(shù)據(jù)至所述用戶數(shù)據(jù)庫(kù)S207,其中,所述數(shù)據(jù)復(fù)制流程與上述寫操作流程類似,并且傳送的是所述SQL語句,而非物理重做。
[0004]上述現(xiàn)有技術(shù)存在單個(gè)網(wǎng)絡(luò)瓶頸的重大缺點(diǎn)。主節(jié)點(diǎn)成為整個(gè)方案的瓶頸。根據(jù)圖1所示的單主機(jī)復(fù)制拓?fù)浣Y(jié)構(gòu),所述主數(shù)據(jù)庫(kù)不得不復(fù)制同一數(shù)據(jù)兩次,因此導(dǎo)致網(wǎng)絡(luò)負(fù)荷翻倍。
【發(fā)明內(nèi)容】
[0005]本發(fā)明實(shí)施例提供了點(diǎn)對(duì)點(diǎn)數(shù)據(jù)復(fù)制方法、設(shè)備和系統(tǒng),以及主節(jié)點(diǎn)切換方法、設(shè)備和系統(tǒng),通過在點(diǎn)對(duì)點(diǎn)模式中進(jìn)行分布式復(fù)制來緩解復(fù)制集群中主節(jié)點(diǎn)的復(fù)制瓶頸問題。
[0006]本發(fā)明實(shí)施例采用以下技術(shù)方案。
[0007]本發(fā)明的第一方面提供了一種點(diǎn)對(duì)點(diǎn)數(shù)據(jù)復(fù)制方法,包括:
[0008]當(dāng)主節(jié)點(diǎn)第一物理實(shí)體上發(fā)生第一寫操作時(shí),所述主節(jié)點(diǎn)生成附帶提交序號(hào)(CSN)的第一提交重做記錄,其中,所述主節(jié)點(diǎn)預(yù)設(shè)有包括所述第一物理實(shí)體和第二物理實(shí)體在內(nèi)的至少兩個(gè)物理實(shí)體,并且所述主節(jié)點(diǎn)與包括第一用戶節(jié)點(diǎn)和第二用戶節(jié)點(diǎn)在內(nèi)的至少兩個(gè)用戶節(jié)點(diǎn)相連接,所述第一提交重做記錄附帶的CSN用于指示所述主節(jié)點(diǎn)中所述第一寫操作的順序;
[0009]所述主節(jié)點(diǎn)基于物理實(shí)體與用戶節(jié)點(diǎn)之間的映射關(guān)系推送附帶CSN的所述第一提交重做記錄至與所述第一物理實(shí)體對(duì)應(yīng)的第一用戶節(jié)點(diǎn),其中,通過所述第一用戶節(jié)點(diǎn)推送接收到的第一提交重做記錄至所述第二用戶節(jié)點(diǎn),所述第一提交重做記錄用于將所述第一寫操作的數(shù)據(jù)從所述主節(jié)點(diǎn)復(fù)制到與所述第一物理實(shí)體對(duì)應(yīng)的所述第一用戶節(jié)點(diǎn),然后再?gòu)?fù)制到所述第二用戶節(jié)點(diǎn)。
[0010]在本發(fā)明第一方面的第一實(shí)現(xiàn)方式中,所述物理實(shí)體為表空間、設(shè)備檔案文件、頁面和/或分區(qū)。
[0011]在本發(fā)明第一方面的第二實(shí)現(xiàn)方式中,所述物理實(shí)體與用戶節(jié)點(diǎn)之間的映射關(guān)系由所述主節(jié)點(diǎn)通過以下方式建立:將不同的用戶節(jié)點(diǎn)映射至所述主節(jié)點(diǎn)與用戶節(jié)點(diǎn)之間的不同連接,并將不同的連接映射至所述主節(jié)點(diǎn)中的不同物理實(shí)體組,其中,各物理實(shí)體組包括一個(gè)或多個(gè)物理實(shí)體;
[0012]所述主節(jié)點(diǎn)基于物理實(shí)體與用戶節(jié)點(diǎn)之間的映射關(guān)系推送附帶CSN的所述第一提交重做記錄至與所述第一物理實(shí)體對(duì)應(yīng)的第一用戶節(jié)點(diǎn),包括:
[0013]所述主節(jié)點(diǎn)基于所述第一物理實(shí)體與所述第一用戶節(jié)點(diǎn)之間的映射關(guān)系并通過所述主節(jié)點(diǎn)與所述第一用戶節(jié)點(diǎn)之間的連接,推送附帶CSN的所述第一提交重做記錄至與所述第一物理實(shí)體對(duì)應(yīng)的第一用戶節(jié)點(diǎn)。
[0014]在本發(fā)明第一方面的第三實(shí)現(xiàn)方式中,所述物理實(shí)體與用戶節(jié)點(diǎn)之間的映射關(guān)系由所述主節(jié)點(diǎn)通過以下方式建立:將不同的用戶節(jié)點(diǎn)映射至所述主節(jié)點(diǎn)與用戶節(jié)點(diǎn)之間的不同連接,并將不同的連接映射至所述主節(jié)點(diǎn)中的不同物理實(shí)體組,其中,所述主節(jié)點(diǎn)中的各物理實(shí)體組包括多個(gè)物理實(shí)體,同時(shí)還將所述主節(jié)點(diǎn)中一個(gè)物理實(shí)體組的不同物理實(shí)體映射至與該物理實(shí)體組對(duì)應(yīng)的用戶節(jié)點(diǎn)中的不同物理實(shí)體;
[0015]所述主節(jié)點(diǎn)基于物理實(shí)體與用戶節(jié)點(diǎn)之間的映射關(guān)系推送附帶CSN的所述第一提交重做記錄至與所述第一物理實(shí)體對(duì)應(yīng)的第一用戶節(jié)點(diǎn),包括:
[0016]基于所述主節(jié)點(diǎn)中的所述第一物理實(shí)體所屬的物理實(shí)體組與所述第一用戶節(jié)點(diǎn)之間的映射關(guān)系,以及所述第一物理實(shí)體與第三物理實(shí)體之間的映射關(guān)系,并且通過所述主節(jié)點(diǎn)與所述第一用戶節(jié)點(diǎn)之間的連接,所述主節(jié)點(diǎn)推送附帶CSN的所述第一提交重做記錄至與所述第一物理實(shí)體對(duì)應(yīng)的所述第三物理實(shí)體,其中,所述第一用戶節(jié)點(diǎn)預(yù)設(shè)有包括所述第三物理實(shí)體和第四物理實(shí)體在內(nèi)的至少兩個(gè)物理實(shí)體。
[0017]在本發(fā)明第一方面的第四實(shí)現(xiàn)方式中,當(dāng)新的用戶節(jié)點(diǎn)與所述主節(jié)點(diǎn)連接時(shí),還包括:
[0018]在重配置所述主節(jié)點(diǎn)中的物理實(shí)體,以及所述物理實(shí)體與包括所述新的用戶節(jié)點(diǎn)在內(nèi)的所述用戶節(jié)點(diǎn)之間的映射關(guān)系后,所述主節(jié)點(diǎn)將提交重做記錄同步至所述新的用戶節(jié)點(diǎn)。
[0019]在本發(fā)明第一方面的第五實(shí)現(xiàn)方式中,所述第一提交記錄基于發(fā)生相關(guān)寫操作的物理實(shí)體與第二提交記錄相分離,所述第二提交記錄由所述主節(jié)點(diǎn)在第二寫操作發(fā)生在第二物理實(shí)體上時(shí)生成。
[0020]在本發(fā)明第一方面的第六實(shí)現(xiàn)方式中,所述主節(jié)點(diǎn)分別并行推送所述第一提交記錄和所述第二提交記錄至所述第一用戶節(jié)點(diǎn)和所述第二用戶節(jié)點(diǎn),以使所述第一提交記錄和所述第二提交記錄由所述第一用戶節(jié)點(diǎn)和第二用戶節(jié)點(diǎn)分別并行重播;其中,通過所述第二用戶節(jié)點(diǎn)將接收到的第二提交重做記錄推送至所述第一用戶節(jié)點(diǎn),所述第二提交重做記錄用于將所述第二寫操作的數(shù)據(jù)從所述主節(jié)點(diǎn)復(fù)制到與所述第二物理實(shí)體對(duì)應(yīng)的第二用戶節(jié)點(diǎn),然后再?gòu)?fù)制到所述第一用戶節(jié)點(diǎn)。
[0021 ]本發(fā)明的第二方面提供了一種點(diǎn)對(duì)點(diǎn)數(shù)據(jù)復(fù)制方法,包括:
[0022]用戶節(jié)點(diǎn)從主節(jié)點(diǎn)接收附帶提交序號(hào)(CSN)的提交重做記錄,其中,所述提交重做記錄附帶的CSN用于指示所述主節(jié)點(diǎn)中寫操作的順序;
[0023]當(dāng)所述提交重做記錄附帶的CSN減去所述用戶節(jié)點(diǎn)的CSN的絕對(duì)值為I時(shí),更新所述用戶節(jié)點(diǎn)的CSN至所述提交重做記錄附帶的CSN,其中,所述用戶節(jié)點(diǎn)的CSN在初始化過程中設(shè)置為O;
[0024]所述用戶節(jié)點(diǎn)重播所述提交重做記錄,以將發(fā)生在主節(jié)點(diǎn)上的寫操作的數(shù)據(jù)從所述主節(jié)點(diǎn)復(fù)制到所述用戶節(jié)點(diǎn),其中,所述用戶節(jié)點(diǎn)與所述主節(jié)點(diǎn)相連接,并且其他用戶節(jié)點(diǎn)與所述主節(jié)點(diǎn)相連接;
[0025]所述用戶節(jié)點(diǎn)推送所述提交重做記錄至所述其他用戶節(jié)點(diǎn),以將發(fā)生在所述主節(jié)點(diǎn)上的所述寫操作的數(shù)據(jù)復(fù)制到其他用戶。
[0026]在本發(fā)明第二方面的第一實(shí)現(xiàn)方式中,還包括:
[0027]當(dāng)接收到的提交重做記錄附帶的CSN減去所述用戶節(jié)點(diǎn)的CSN的絕對(duì)值不為I時(shí),所述用戶節(jié)點(diǎn)保存接收到的提交重做記錄并且等待另一提交重做記錄;
[0028]在所述用戶節(jié)點(diǎn)的CSN更新至某個(gè)值,使得接收到的提交重做記錄附帶的CSN減去所述用戶節(jié)點(diǎn)更新后的CSN的絕對(duì)值為I后,所述用戶節(jié)點(diǎn)重播所述提交重做記錄,以將發(fā)生在所述主節(jié)點(diǎn)上的所述寫操作的數(shù)據(jù)從所述主節(jié)點(diǎn)復(fù)制到所述用戶節(jié)點(diǎn)。
[0029]在本發(fā)明第二方面的第二實(shí)現(xiàn)方式中,還包括:
[0030]在所述主節(jié)點(diǎn)宕機(jī)并且所述用戶節(jié)點(diǎn)被選為新的主節(jié)點(diǎn)后,所述用戶節(jié)點(diǎn)傳輸拉取請(qǐng)求至所有其他用戶節(jié)點(diǎn),以獲取所述其他用戶節(jié)點(diǎn)中的發(fā)生在所述主節(jié)點(diǎn)上的所述寫操作的所有數(shù)據(jù),所述所有數(shù)據(jù)通過重播所述提交重做記錄獲得;
[0031 ]所述充當(dāng)新的主節(jié)點(diǎn)的用戶節(jié)點(diǎn)重新分配所述新的主節(jié)點(diǎn)中的物理實(shí)體與除所述用戶節(jié)點(diǎn)外的所述其他用戶節(jié)點(diǎn)之間的映射關(guān)系。
[0032]在本發(fā)明第二方面的第三實(shí)現(xiàn)方式中,還包括:
[0033]在前主節(jié)點(diǎn)宕機(jī)并且另一用戶節(jié)點(diǎn)被選為新的主節(jié)點(diǎn)后,所述用戶節(jié)點(diǎn)將所述用戶節(jié)點(diǎn)中的發(fā)生在所述前主節(jié)點(diǎn)上的所述寫操作的數(shù)據(jù)傳輸至充當(dāng)新的主節(jié)點(diǎn)的用戶節(jié)點(diǎn),以響應(yīng)所述新的主節(jié)點(diǎn)傳輸?shù)睦≌?qǐng)求。
[0034]本發(fā)明的第三方面提供了一種主節(jié)點(diǎn)切換方法,包括:
[0035]當(dāng)主節(jié)點(diǎn)宕機(jī)時(shí),至少兩個(gè)用戶節(jié)點(diǎn)中的一個(gè)用戶節(jié)點(diǎn)在所述用戶節(jié)點(diǎn)與其他用戶節(jié)點(diǎn)之間進(jìn)行數(shù)據(jù)同步,直到完成所述數(shù)據(jù)同步或達(dá)到所述數(shù)據(jù)同步的預(yù)配置時(shí)間段,其中,所述多個(gè)用戶節(jié)點(diǎn)和所述主節(jié)點(diǎn)在同一集群中;
[0036]基于用戶節(jié)點(diǎn)的最大提交序號(hào)(CSN)從多個(gè)用戶節(jié)點(diǎn)中選擇所述用戶節(jié)點(diǎn)作為新的主節(jié)點(diǎn)后,所述充當(dāng)新的主節(jié)點(diǎn)的用戶節(jié)點(diǎn)傳輸拉取請(qǐng)求至未被選為新的主節(jié)點(diǎn)的其余用戶節(jié)點(diǎn);
[0037]所述充當(dāng)新的主節(jié)點(diǎn)的用戶節(jié)點(diǎn)從未被選為新的主節(jié)點(diǎn)的其余用戶節(jié)點(diǎn)中接收數(shù)據(jù)。
[0038]在本發(fā)明第三方面的第一實(shí)現(xiàn)方式中,還包括:
[0039]所述充當(dāng)新的主節(jié)點(diǎn)的用戶節(jié)點(diǎn)建立所述新的主節(jié)點(diǎn)中的物理實(shí)體與除所述用戶節(jié)點(diǎn)外的其他用戶節(jié)點(diǎn)之間的映射關(guān)系;
[0040]當(dāng)所述新的主節(jié)點(diǎn)中的物理實(shí)體上發(fā)生寫操作時(shí),所述充當(dāng)新的主節(jié)點(diǎn)的用戶節(jié)點(diǎn)根據(jù)所述映射關(guān)系在所述新的主節(jié)點(diǎn)與未被選為新的主節(jié)點(diǎn)的其他用戶節(jié)點(diǎn)之間進(jìn)行點(diǎn)對(duì)點(diǎn)數(shù)據(jù)復(fù)制。
[0041]本發(fā)明的第四方面提供了一種主節(jié)點(diǎn)切換方法,包括:
[0042]當(dāng)主節(jié)點(diǎn)宕機(jī)時(shí),至少兩個(gè)用戶節(jié)點(diǎn)中的一個(gè)用戶節(jié)點(diǎn)在所述用戶節(jié)點(diǎn)與其他用戶節(jié)點(diǎn)之間進(jìn)行數(shù)據(jù)同步,直到完成所述數(shù)據(jù)同步或達(dá)到所述數(shù)據(jù)同步的預(yù)配置時(shí)間段,其中,所述多個(gè)用戶節(jié)點(diǎn)和所述主節(jié)點(diǎn)在同一集群中;
[0043]所述用戶節(jié)點(diǎn)與其他用戶節(jié)點(diǎn)一起基于用戶節(jié)點(diǎn)的最大提交序號(hào)(CSN)從多個(gè)用戶節(jié)點(diǎn)中選擇一個(gè)用戶節(jié)點(diǎn)作為新的主節(jié)點(diǎn);
[0044]未被選為新的主節(jié)點(diǎn)的用戶節(jié)點(diǎn)接收新的主節(jié)點(diǎn)下發(fā)的拉取請(qǐng)求;
[0045]未被選為新的主節(jié)點(diǎn)的用戶節(jié)點(diǎn)將所述用戶節(jié)點(diǎn)中的數(shù)據(jù)傳輸至新的主節(jié)點(diǎn),以響應(yīng)所述新的主節(jié)點(diǎn)傳輸?shù)乃隼≌?qǐng)求。
[0046]本發(fā)明的第五方面提供了一種點(diǎn)對(duì)點(diǎn)數(shù)據(jù)復(fù)制設(shè)備,所述設(shè)備位于主節(jié)點(diǎn)上,所述設(shè)備包括:
[0047]生成單元,用于當(dāng)所述主節(jié)點(diǎn)第一物理實(shí)體上發(fā)生第一寫操作時(shí),生成附帶提交序號(hào)(CSN)的第一提交重做記錄,其中,所述主節(jié)點(diǎn)預(yù)設(shè)有包括所述第一物理實(shí)體和第二物理實(shí)體在內(nèi)的至少兩個(gè)物理實(shí)體,并且所述主節(jié)點(diǎn)與包括第一用戶節(jié)點(diǎn)和第二用戶節(jié)點(diǎn)在內(nèi)的至少兩個(gè)用戶節(jié)點(diǎn)相連接,所述第一提交重做記錄附帶的CSN用于指示所述主節(jié)點(diǎn)中所述第一寫操作的順序;
[0048]復(fù)制單元,用于基于物理實(shí)體與用戶節(jié)點(diǎn)之間的映射關(guān)系推送附帶CSN的所述第一提交重做記錄至與所述第一物理實(shí)體對(duì)應(yīng)的第一用戶節(jié)點(diǎn),其中,通過所述第一用戶節(jié)點(diǎn)推送接收到的第一提交重做記錄至所述第二用戶節(jié)點(diǎn),所述第一提交重做記錄用于將所述第一寫操作的數(shù)據(jù)從所述主節(jié)點(diǎn)復(fù)制到與所述第一物理實(shí)體對(duì)應(yīng)的所述第一用戶節(jié)點(diǎn),然后再?gòu)?fù)制到所述第二用戶節(jié)點(diǎn)。
[0049]在本發(fā)明第五方面的第一實(shí)現(xiàn)方式中,所述物理實(shí)體為表空間、設(shè)備檔案文件、頁面和/或分區(qū)。
[0050]在本發(fā)明第五方面的第二實(shí)現(xiàn)方式中,還包括:
[0051]第一映射單元,用于通過以下方式建立物理實(shí)體與用戶節(jié)點(diǎn)之間的映射關(guān)系:將不同的用戶節(jié)點(diǎn)映射至所述主節(jié)點(diǎn)與用戶節(jié)點(diǎn)之間的不同連接,并將不同的連接映射至所述主節(jié)點(diǎn)中的不同物理實(shí)體組,其中,各物理實(shí)體組包括一個(gè)或多個(gè)物理實(shí)體;
[0052]所述復(fù)制單元具體用于,基于所述第一物理實(shí)體與所述第一用戶節(jié)點(diǎn)之間的映射關(guān)系并且通過所述主節(jié)點(diǎn)與所述第一用戶節(jié)點(diǎn)之間的連接,推送附帶CSN的所述第一提交重做記錄至與所述第一物理實(shí)體對(duì)應(yīng)的第一用戶節(jié)點(diǎn),其中,通過所述第一用戶節(jié)點(diǎn)推送接收到的第一提交重做記錄至所述第二用戶節(jié)點(diǎn),所述第一提交重做記錄用于將所述第一寫操作的數(shù)據(jù)從所述主節(jié)點(diǎn)復(fù)制到與所述第一物理實(shí)體對(duì)應(yīng)的所述第一用戶節(jié)點(diǎn),然后再?gòu)?fù)制到所述第二用戶節(jié)點(diǎn)。
[0053]在本發(fā)明第五方面的第三實(shí)現(xiàn)方式中,還包括:
[0054]第二映射單元,用于通過以下方式建立物理實(shí)體與用戶節(jié)點(diǎn)之間的映射關(guān)系:將不同的用戶節(jié)點(diǎn)映射至所述主節(jié)點(diǎn)與用戶節(jié)點(diǎn)之間的不同連接,并將不同的連接映射至所述主節(jié)點(diǎn)中的不同物理實(shí)體組,其中,所述主節(jié)點(diǎn)中的各物理實(shí)體組包括多個(gè)物理實(shí)體,同時(shí)還將所述主節(jié)點(diǎn)中一個(gè)物理實(shí)體組的不同物理實(shí)體映射至與該物理實(shí)體組對(duì)應(yīng)的用戶節(jié)點(diǎn)中的不同物理實(shí)體;
[0055]所述復(fù)制單元具體用于,基于所述主節(jié)點(diǎn)中的所述第一物理實(shí)體所屬的物理實(shí)體組與所述第一用戶節(jié)點(diǎn)之間的映射關(guān)系,以及所述第一物理實(shí)體與第三物理實(shí)體之間的映射關(guān)系,并且通過所述主節(jié)點(diǎn)與所述第一用戶節(jié)點(diǎn)之間的連接,推送附帶CSN的所述第一提交重做記錄至與所述第一物理實(shí)體對(duì)應(yīng)的所述第三物理實(shí)體,其中,所述第一用戶節(jié)點(diǎn)預(yù)設(shè)有包括所述第三物理實(shí)體和第四物理實(shí)體在內(nèi)的至少兩個(gè)物理實(shí)體;其中,通過所述第一用戶節(jié)點(diǎn)推送接收到的第一提交重做記錄至所述第二用戶節(jié)點(diǎn),所述第一提交重做記錄用于將所述第一寫操作的數(shù)據(jù)從所述主節(jié)點(diǎn)復(fù)制到與所述第一物理實(shí)體對(duì)應(yīng)的所述第一用戶節(jié)點(diǎn),然后再?gòu)?fù)制到所述第二用戶節(jié)點(diǎn)。
[0056]在本發(fā)明第五方面的第四實(shí)現(xiàn)方式中,所述復(fù)制單元還用于,當(dāng)新的用戶節(jié)點(diǎn)與所述主節(jié)點(diǎn)連接時(shí),在重配置所述主節(jié)點(diǎn)中的物理實(shí)體,以及所述物理實(shí)體與包括所述新的用戶節(jié)點(diǎn)在內(nèi)的所述用戶節(jié)點(diǎn)之間的映射關(guān)系后,將提交重做記錄同步至所述新的用戶節(jié)點(diǎn)。
[0057]在本發(fā)明第五方面的第五實(shí)現(xiàn)方式中,所述第一提交記錄基于發(fā)生相關(guān)寫操作的物理實(shí)體與第二提交記錄相分離,所述第二提交記錄由所述設(shè)備在第二寫操作發(fā)生在第二物理實(shí)體上時(shí)生成。
[0058]在本發(fā)明第五方面的第六實(shí)現(xiàn)方式中,所述復(fù)制單元分別并行推送所述第一提交記錄和所述第二提交記錄至所述第一用戶節(jié)點(diǎn)和所述第二用戶節(jié)點(diǎn),以使所述第一提交記錄和所述第二提交記錄由所述第一用戶節(jié)點(diǎn)和第二用戶節(jié)點(diǎn)分別并行重播;其中,通過所述第二用戶節(jié)點(diǎn)將接收到的第二提交重做記錄推送至所述第一用戶節(jié)點(diǎn),所述第二提交重做記錄用于將所述第二寫操作的數(shù)據(jù)從所述主節(jié)點(diǎn)復(fù)制到與所述第二物理實(shí)體對(duì)應(yīng)的第二用戶節(jié)點(diǎn),然后再?gòu)?fù)制到所述第一用戶節(jié)點(diǎn)。
[0059]本發(fā)明的第六方面提供了一種點(diǎn)對(duì)點(diǎn)數(shù)據(jù)復(fù)制設(shè)備,所述設(shè)備位于用戶節(jié)點(diǎn)上,所述設(shè)備包括:
[0060]接收單元,用于從主節(jié)點(diǎn)接收附帶提交序號(hào)(CSN)的提交重做記錄,其中,所述提交重做記錄附帶的CSN用于指示所述主節(jié)點(diǎn)中寫操作的順序;
[0061]CSN處理單元,用于當(dāng)所述提交重做記錄附帶的CSN減去所述用戶節(jié)點(diǎn)的CSN的絕對(duì)值為I時(shí),更新所述用戶節(jié)點(diǎn)的CSN至所述提交重做記錄附帶的CSN,其中,所述用戶節(jié)點(diǎn)的CSN在初始化過程中設(shè)置為O;
[0062]復(fù)制單元,用于重播所述提交重做記錄,以將發(fā)生在主節(jié)點(diǎn)上的寫操作的數(shù)據(jù)從所述主節(jié)點(diǎn)復(fù)制到所述用戶節(jié)點(diǎn),其中,所述用戶節(jié)點(diǎn)與所述主節(jié)點(diǎn)相連接,并且其他用戶節(jié)點(diǎn)與所述主節(jié)點(diǎn)相連接;推送所述提交重做記錄至所述其他用戶節(jié)點(diǎn),以將發(fā)生在所述主節(jié)點(diǎn)上的所述寫操作的數(shù)據(jù)復(fù)制到其他用戶。
[0063]在本發(fā)明第六方面的第一實(shí)現(xiàn)方式中,所述CSN處理單元還用于,當(dāng)接收到的提交重做記錄附帶的CSN減去所述用戶節(jié)點(diǎn)的CSN的絕對(duì)值不為I時(shí),保存接收到的提交重做記錄并且等待另一提交重做記錄;
[0064]所述復(fù)制單元還用于,在所述用戶節(jié)點(diǎn)的CSN更新至某個(gè)值,使得接收到的提交重做記錄附帶的CSN減去所述用戶節(jié)點(diǎn)更新后的CSN的絕對(duì)值為I后,重播所述提交重做記錄,以將發(fā)生在所述主節(jié)點(diǎn)上的所述寫操作的數(shù)據(jù)從所述主節(jié)點(diǎn)復(fù)制到所述用戶節(jié)點(diǎn)。
[0065]在本發(fā)明第六方面的第二實(shí)現(xiàn)方式中,所述復(fù)制單元還用于,在所述主節(jié)點(diǎn)宕機(jī)并且所述用戶節(jié)點(diǎn)被選為新的主節(jié)點(diǎn)后,傳輸拉取請(qǐng)求至所有其他用戶節(jié)點(diǎn),以獲取所述其他用戶節(jié)點(diǎn)中的發(fā)生在所述主節(jié)點(diǎn)上的所述寫操作的所有數(shù)據(jù),所述所有數(shù)據(jù)通過重播所述提交重做記錄獲得;
[0066]所述設(shè)備還包括:
[0067]映射單元,用于當(dāng)所述用戶節(jié)點(diǎn)充當(dāng)新的主節(jié)點(diǎn)時(shí),重新分配所述新的主節(jié)點(diǎn)中的物理實(shí)體與除充當(dāng)新的主節(jié)點(diǎn)的用戶節(jié)點(diǎn)外的所述其他用戶節(jié)點(diǎn)之間的映射關(guān)系。
[0068]在本發(fā)明第六方面的第三實(shí)現(xiàn)方式中,所述復(fù)制單元還用于,在前主節(jié)點(diǎn)宕機(jī)并且另一用戶節(jié)點(diǎn)被選為新的主節(jié)點(diǎn)后,將所述用戶節(jié)點(diǎn)中的發(fā)生在所述前主節(jié)點(diǎn)上的所述寫操作的數(shù)據(jù)傳輸至充當(dāng)新的主節(jié)點(diǎn)的用戶節(jié)點(diǎn),以響應(yīng)所述新的主節(jié)點(diǎn)傳輸?shù)睦≌?qǐng)求。
[0069]本發(fā)明的第七方面提供了一種主節(jié)點(diǎn)切換設(shè)備,所述設(shè)備位于用戶節(jié)點(diǎn)上,所述設(shè)備包括:
[0070]同步單元,用于當(dāng)主節(jié)點(diǎn)宕機(jī)時(shí),在所述用戶節(jié)點(diǎn)與其他用戶節(jié)點(diǎn)之間進(jìn)行數(shù)據(jù)同步,直到完成所述數(shù)據(jù)同步或達(dá)到所述數(shù)據(jù)同步的預(yù)配置時(shí)間段,其中,所述多個(gè)用戶節(jié)點(diǎn)和所述主節(jié)點(diǎn)在同一集群中;
[0071]傳輸單元,用于在基于用戶節(jié)點(diǎn)的最大提交序號(hào)(CSN)從多個(gè)用戶節(jié)點(diǎn)中選擇所述用戶節(jié)點(diǎn)作為新的主節(jié)點(diǎn)后,傳輸拉取請(qǐng)求至未被選為新的主節(jié)點(diǎn)的其余用戶節(jié)點(diǎn);
[0072]接收單元,用于從未被選為新的主節(jié)點(diǎn)的其余用戶節(jié)點(diǎn)中接收數(shù)據(jù)。
[0073]在本發(fā)明第七方面的第一實(shí)現(xiàn)方式中,還包括:
[0074]映射單元,用于當(dāng)所述用戶節(jié)點(diǎn)充當(dāng)新的主節(jié)點(diǎn)時(shí),建立所述新的主節(jié)點(diǎn)中的物理實(shí)體與除所述用戶節(jié)點(diǎn)外的其他用戶節(jié)點(diǎn)之間的映射關(guān)系;
[0075]所述同步單元還用于,當(dāng)所述新的主節(jié)點(diǎn)中的物理實(shí)體上發(fā)生寫操作時(shí),根據(jù)所述映射關(guān)系在所述新的主節(jié)點(diǎn)與未被選為新的主節(jié)點(diǎn)的其他用戶節(jié)點(diǎn)之間進(jìn)行點(diǎn)對(duì)點(diǎn)數(shù)據(jù)復(fù)制。
[0076]本發(fā)明的第八方面提供了一種主節(jié)點(diǎn)切換設(shè)備,所述設(shè)備位于用戶節(jié)點(diǎn)上,所述設(shè)備包括:
[0077]同步單元,用于當(dāng)主節(jié)點(diǎn)宕機(jī)時(shí),在所述用戶節(jié)點(diǎn)與其他用戶節(jié)點(diǎn)之間進(jìn)行數(shù)據(jù)同步,直到完成所述數(shù)據(jù)同步或達(dá)到所述數(shù)據(jù)同步的預(yù)配置時(shí)間段,其中,所述多個(gè)用戶節(jié)點(diǎn)和所述主節(jié)點(diǎn)在同一集群中;
[0078]選擇單元,用于與其他用戶節(jié)點(diǎn)一起基于用戶節(jié)點(diǎn)的最大提交序號(hào)(CSN)從多個(gè)用戶節(jié)點(diǎn)中選擇一個(gè)用戶節(jié)點(diǎn)作為新的主節(jié)點(diǎn);
[0079]接收單元,用于當(dāng)用戶節(jié)點(diǎn)未被選為新的主節(jié)點(diǎn)時(shí),接收新的主節(jié)點(diǎn)下發(fā)的拉取請(qǐng)求;
[0080]傳輸單元,用于當(dāng)用戶節(jié)點(diǎn)未被選為新的主節(jié)點(diǎn)時(shí),將所述用戶節(jié)點(diǎn)中的數(shù)據(jù)傳輸至新的主節(jié)點(diǎn),以響應(yīng)所述新的主節(jié)點(diǎn)傳輸?shù)乃隼≌?qǐng)求。
[0081]本發(fā)明的第九方面提供了一種點(diǎn)對(duì)點(diǎn)數(shù)據(jù)復(fù)制設(shè)備,所述設(shè)備位于主節(jié)點(diǎn)上,所述設(shè)備包括:
[00