數(shù)據(jù)復(fù)制的方法及裝置制造方法
【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種數(shù)據(jù)復(fù)制的方法及裝置,屬于數(shù)據(jù)處理領(lǐng)域。方法包括:從本地復(fù)制組的一至多臺(tái)服務(wù)器中獲取記錄有更新數(shù)據(jù)的日志事件;將獲取到的日志事件存放到本地復(fù)制組的中繼日志中;更新本地復(fù)制組的中繼日志的版本號(hào),并獲取其他復(fù)制組的中繼日志及其他復(fù)制組的中繼日志的版本號(hào),其他復(fù)制組的中繼日志中存放有從其他復(fù)制組的一至多臺(tái)服務(wù)器中獲取的記錄有更新數(shù)據(jù)的日志事件;根據(jù)每個(gè)中繼日志的版本號(hào)從本地復(fù)制組的中繼日志及其他復(fù)制組的中繼日志中選擇中繼日志,并根據(jù)選擇的中繼日志更新本地復(fù)制組的一至多臺(tái)服務(wù)器的數(shù)據(jù)。本發(fā)明可節(jié)省日志事件的傳輸次數(shù)及網(wǎng)絡(luò)流量,實(shí)現(xiàn)數(shù)據(jù)和服務(wù)的高可用性和高容錯(cuò)性。
【專(zhuān)利說(shuō)明】數(shù)據(jù)復(fù)制的方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,特別涉及一種數(shù)據(jù)復(fù)制的方法及裝置。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,互聯(lián)網(wǎng)業(yè)務(wù)的種類(lèi)和數(shù)量也在不斷地增長(zhǎng)。為了對(duì)互聯(lián)網(wǎng)業(yè)務(wù)進(jìn)行有效地管理,實(shí)現(xiàn)互聯(lián)網(wǎng)業(yè)務(wù)的服務(wù)器一般托管在運(yùn)營(yíng)商的IDCdnternetData Center,互聯(lián)網(wǎng)數(shù)據(jù)中心)機(jī)房中。然而,目前的IDC機(jī)房之間的網(wǎng)絡(luò)連通性不太好,時(shí)常會(huì)出現(xiàn)大量丟包的問(wèn)題。為了解決該問(wèn)題,通過(guò)采用將一臺(tái)服務(wù)器的數(shù)據(jù)復(fù)制到其他服務(wù)器的方式,從而在該服務(wù)器故障后可切換其他服務(wù)器繼續(xù)工作。其中,用于復(fù)制數(shù)據(jù)的服務(wù)器稱(chēng)為從服務(wù)器,被復(fù)制數(shù)據(jù)的服務(wù)器稱(chēng)為主服務(wù)器。
[0003]現(xiàn)有技術(shù)在實(shí)現(xiàn)數(shù)據(jù)復(fù)制時(shí),通常采用MySQL數(shù)據(jù)庫(kù)的主主復(fù)制技術(shù)。主主復(fù)制是指參與數(shù)據(jù)復(fù)制的服務(wù)器既可以作為主服務(wù)器,也可以作為從服務(wù)器。在MySQL數(shù)據(jù)庫(kù)的主主復(fù)制技術(shù)中,包含兩臺(tái)服務(wù)器,每臺(tái)服務(wù)器既可以作為主服務(wù)器,又可以作為從服務(wù)器。無(wú)論哪臺(tái)服務(wù)器作為主服務(wù)器,哪臺(tái)服務(wù)器作為從服務(wù)器,從服務(wù)器將主服務(wù)器的數(shù)據(jù)復(fù)制到從服務(wù)器的過(guò)程均分為三步:第一步,主服務(wù)器將更新數(shù)據(jù)記錄到主服務(wù)器的日志事件中。第二步,從服務(wù)器將主服務(wù)器的日志事件拷貝到從服務(wù)器的中繼日志(Relay Log)中。第三步,從服務(wù)器重放從服務(wù)器的中繼日志中的事件,根據(jù)其中的更新數(shù)據(jù)更新從服務(wù)器的數(shù)據(jù),并將更新數(shù)據(jù)記錄到從服務(wù)器生成的新的日志事件中,由此完成數(shù)據(jù)復(fù)制過(guò)程。
[0004]在實(shí)現(xiàn)本發(fā)明的過(guò)程中,發(fā)明人發(fā)現(xiàn)上述現(xiàn)有技術(shù)至少存在以下缺點(diǎn):
[0005]現(xiàn)有技術(shù)所提供的MySQL數(shù)據(jù)庫(kù)的主主復(fù)制技術(shù)中,當(dāng)?shù)谝慌_(tái)服務(wù)器作為主服務(wù)器,第二臺(tái)服務(wù)器作為從服務(wù)器時(shí),第一臺(tái)服務(wù)器產(chǎn)生的日志事件會(huì)被傳輸?shù)降诙_(tái)服務(wù)器,并由第二臺(tái)服務(wù)器執(zhí)行數(shù)據(jù)復(fù)制操作后,生成新的日志事件;當(dāng)?shù)诙_(tái)服務(wù)器作為主服務(wù)器,第一臺(tái)服務(wù)器作為從服務(wù)器時(shí),第二臺(tái)服務(wù)器生成的新的日志事件又會(huì)被傳輸?shù)降谝慌_(tái)服務(wù)器,由第一臺(tái)服務(wù)器執(zhí)行數(shù)據(jù)復(fù)制過(guò)程。然而,這兩臺(tái)服務(wù)器的日志事件中記錄的是相同的更新數(shù)據(jù),導(dǎo)致記錄相同更新數(shù)據(jù)的日志事件被多次傳輸,造成了雙倍的網(wǎng)絡(luò)流量。另外,現(xiàn)有技術(shù)提供的MySQL的主主復(fù)制技術(shù)僅在兩臺(tái)服務(wù)器之間實(shí)現(xiàn)數(shù)據(jù)復(fù)制,在面對(duì)互聯(lián)網(wǎng)海量數(shù)據(jù)業(yè)務(wù)的情況下顯得無(wú)能為力。
【發(fā)明內(nèi)容】
[0006]為了解決現(xiàn)有技術(shù)的問(wèn)題,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)復(fù)制的方法及裝置。所述技術(shù)方案如下:
[0007]—方面,提供了一種數(shù)據(jù)復(fù)制的方法,所述方法包括:
[0008]從本地復(fù)制組的一至多臺(tái)服務(wù)器中獲取記錄有更新數(shù)據(jù)的日志事件;
[0009]將獲取到的日志事件存放到所述本地復(fù)制組的中繼日志中;
[0010]更新所述本地復(fù)制組的中繼日志的版本號(hào),并獲取其他復(fù)制組的中繼日志及所述其他復(fù)制組的中繼日志的版本號(hào),所述其他復(fù)制組的中繼日志中存放有從所述其他復(fù)制組的一至多臺(tái)服務(wù)器中獲取的記錄有更新數(shù)據(jù)的日志事件;
[0011]根據(jù)每個(gè)中繼日志的版本號(hào)從所述本地復(fù)制組的中繼日志及所述其他復(fù)制組的中繼日志中選擇中繼日志,并根據(jù)選擇的中繼日志更新所述本地復(fù)制組的一至多臺(tái)服務(wù)器的數(shù)據(jù)。
[0012]優(yōu)選地,所述更新所述本地復(fù)制組的中繼日志的版本號(hào),包括:
[0013]根據(jù)所述本地復(fù)制組的中繼日志的更新時(shí)間戳及所述本地復(fù)制組的中繼日志所在節(jié)點(diǎn)的節(jié)點(diǎn)編號(hào)更新所述本地復(fù)制組的中繼日志的版本號(hào)。
[0014]優(yōu)選地,所述獲取其他復(fù)制組的中繼日志之后,還包括:
[0015]根據(jù)預(yù)設(shè)的第一過(guò)濾規(guī)則對(duì)獲取到的其他復(fù)制組的中繼日志進(jìn)行過(guò)濾;
[0016]所述根據(jù)每個(gè)中繼日志的版本號(hào)從所述本地復(fù)制組的中繼日志及所述其他復(fù)制組的中繼日志中選擇中繼日志,包括:
[0017]根據(jù)每個(gè)中繼日志的版本號(hào)從所述本地復(fù)制組的中繼日志及過(guò)濾后的其他復(fù)制組的中繼日志中選擇中繼日志。
[0018]優(yōu)選地,所述從本地復(fù)制組的一至多臺(tái)服務(wù)器中獲取記錄有更新數(shù)據(jù)的日志事件之后,還包括:
[0019]記錄從所述本地復(fù)制組的一至多臺(tái)服務(wù)器中獲取日志事件的狀態(tài)信息,所述狀態(tài)信息至少包括所述本地復(fù)制組的一至多臺(tái)服務(wù)器的節(jié)點(diǎn)標(biāo)識(shí)、日志文件名、日志文件偏移量和當(dāng)前狀態(tài)信息。
[0020]優(yōu)選地,所述根據(jù)選擇的中繼日志更新所述本地復(fù)制組的一至多臺(tái)服務(wù)器的數(shù)據(jù),包括:
[0021 ] 讀取選擇的中繼日志中的日志事件;
[0022]對(duì)讀取的日志事件進(jìn)行回放,得到日志事件記錄的更新數(shù)據(jù);
[0023]將得到的更新數(shù)據(jù)寫(xiě)入所述本地復(fù)制組的一至多臺(tái)服務(wù)器中。
[0024]優(yōu)選地,所述將讀取的日志事件所記錄的更新數(shù)據(jù)寫(xiě)入所述本地復(fù)制組的一至多臺(tái)服務(wù)器中之后,還包括:
[0025]記錄將得到的更新數(shù)據(jù)寫(xiě)入所述本地復(fù)制組的一至多臺(tái)服務(wù)器中的狀態(tài)信息,所述狀態(tài)信息至少包括具有所述更新數(shù)據(jù)的復(fù)制組標(biāo)識(shí)、所述更新數(shù)據(jù)寫(xiě)入的服務(wù)器的節(jié)點(diǎn)標(biāo)識(shí)、所述更新數(shù)據(jù)所在中繼日志的文件名、日志事件偏移量和當(dāng)前狀態(tài)信息。
[0026]另一方面,還提供了一種數(shù)據(jù)復(fù)制的裝置,所述裝置包括:
[0027]第一獲取模塊,用于從本地復(fù)制組的一至多臺(tái)服務(wù)器中獲取記錄有更新數(shù)據(jù)的日志事件;
[0028]存放模塊,用于將獲取到的日志事件存放到所述本地復(fù)制組的中繼日志中;
[0029]第一更新模塊,用于更新所述本地復(fù)制組的中繼日志的版本號(hào);
[0030]第二獲取模塊,用于獲取其他復(fù)制組的中繼日志及所述其他復(fù)制組的中繼日志的版本號(hào),所述其他復(fù)制組的中繼日志中存放有從所述其他復(fù)制組的一至多臺(tái)服務(wù)器中獲取的記錄有更新數(shù)據(jù)的日志事件;
[0031]選擇模塊,用于根據(jù)每個(gè)中繼日志的版本號(hào)從所述本地復(fù)制組的中繼日志及所述其他復(fù)制組的中繼日志中選擇中繼日志;
[0032]第二更新模塊,用于根據(jù)選擇的中繼日志更新所述本地復(fù)制組的一至多臺(tái)服務(wù)器的數(shù)據(jù)。
[0033]優(yōu)選地,所述第一更新模塊,用于根據(jù)所述本地復(fù)制組的中繼日志的更新時(shí)間戳及所述本地復(fù)制組的中繼日志所在節(jié)點(diǎn)的節(jié)點(diǎn)編號(hào)更新所述本地復(fù)制組的中繼日志的版本號(hào)。
[0034]優(yōu)選地,所述裝置,還包括:
[0035]過(guò)濾模塊,用于根據(jù)預(yù)設(shè)的第一過(guò)濾規(guī)則對(duì)獲取到的其他復(fù)制組的中繼日志進(jìn)行過(guò)濾;
[0036]所述選擇模塊,用于根據(jù)每個(gè)中繼日志的版本號(hào)從所述本地復(fù)制組的中繼日志及過(guò)濾后的其他復(fù)制組的中繼日志中選擇中繼日志。
[0037]優(yōu)選地,所述裝置,還包括:
[0038]第一記錄模塊,用于記錄從所述本地復(fù)制組的一至多臺(tái)服務(wù)器中獲取日志事件的狀態(tài)信息,所述狀態(tài)信息至少包括所述本地復(fù)制組的一至多臺(tái)服務(wù)器的節(jié)點(diǎn)標(biāo)識(shí)、日志文件名、日志文件偏移量和當(dāng)前狀態(tài)信息。
[0039]優(yōu)選地,所述第二更新模塊,用于讀取選擇的中繼日志中的日志事件,對(duì)讀取的日志事件進(jìn)行回放,得到日志事件記錄的更新數(shù)據(jù);將得到的更新數(shù)據(jù)寫(xiě)入所述本地復(fù)制組的一至多臺(tái)服務(wù)器中。
[0040]優(yōu)選地,所述裝置,還包括:
[0041]第二記錄模塊,用于記錄將得到的更新數(shù)據(jù)寫(xiě)入所述本地復(fù)制組的一至多臺(tái)服務(wù)器中的狀態(tài)信息,所述狀態(tài)信息至少包括具有所述更新數(shù)據(jù)的復(fù)制組標(biāo)識(shí)、所述更新數(shù)據(jù)寫(xiě)入的服務(wù)器的節(jié)點(diǎn)標(biāo)識(shí)、所述更新數(shù)據(jù)所在中繼日志的文件名、日志事件偏移量和當(dāng)前狀態(tài)信息。
[0042]本發(fā)明實(shí)施例提供的技術(shù)方案帶來(lái)的有益效果是:
[0043]由于每個(gè)復(fù)制組的中繼日志中存放有從每個(gè)復(fù)制組的一至多臺(tái)服務(wù)器中獲取的記錄有更新數(shù)據(jù)的日志事件,因而通過(guò)獲取其他復(fù)制組的中繼日志及其他復(fù)制組的中繼日志的版本號(hào),并根據(jù)每個(gè)中繼日志的版本號(hào)從本地復(fù)制組的中繼日志及其他復(fù)制組的中繼日志中選擇中繼日志后,根據(jù)選擇的中繼日志更新本地復(fù)制組的一至多臺(tái)服務(wù)器的數(shù)據(jù),節(jié)省了日志事件的傳輸次數(shù)及網(wǎng)絡(luò)流量。另外,由于本發(fā)明實(shí)施例提供的方法可實(shí)現(xiàn)多個(gè)服務(wù)器之間的數(shù)據(jù)復(fù)制,因而在任一服務(wù)器發(fā)生故障時(shí),其他服務(wù)器能夠繼續(xù)提供服務(wù),從而在面對(duì)互聯(lián)網(wǎng)海量數(shù)據(jù)業(yè)務(wù)的情況下可以實(shí)現(xiàn)數(shù)據(jù)和服務(wù)的高可用性和高容錯(cuò)性。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0044]為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其它的附圖。
[0045]圖1是本發(fā)明實(shí)施例提供的一種數(shù)據(jù)復(fù)制的系統(tǒng)結(jié)構(gòu)示意圖;
[0046]圖2是本發(fā)明實(shí)施例一提供的一種數(shù)據(jù)復(fù)制的方法流程圖;
[0047]圖3是本發(fā)明實(shí)施例二提供的一種數(shù)據(jù)復(fù)制的方法流程圖;
[0048]圖4是本發(fā)明實(shí)施例三提供的第一種數(shù)據(jù)復(fù)制的裝置結(jié)構(gòu)示意圖;[0049]圖5是本發(fā)明實(shí)施例三提供的第二種數(shù)據(jù)復(fù)制的裝置結(jié)構(gòu)示意圖;
[0050]圖6是本發(fā)明實(shí)施例三提供的第三種數(shù)據(jù)復(fù)制的裝置結(jié)構(gòu)示意圖;
[0051]圖7是本發(fā)明實(shí)施例三提供的第四種數(shù)據(jù)復(fù)制的裝置結(jié)構(gòu)示意圖;
[0052]圖8是本發(fā)明實(shí)施例四提供的一種數(shù)據(jù)復(fù)制的系統(tǒng)結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0053]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方式作進(jìn)ー步地詳細(xì)描述。
[0054]本發(fā)明實(shí)施例以圖1所示的方法實(shí)施環(huán)境示意圖為例,提供了一種數(shù)據(jù)復(fù)制的方法。其中,圖1所示的實(shí)施環(huán)境中包括三個(gè)復(fù)制組,每個(gè)復(fù)制組包括一個(gè)同步節(jié)點(diǎn)和一個(gè)服務(wù)器群,同步節(jié)點(diǎn)與服務(wù)器群相連,一個(gè)服務(wù)器群包括三臺(tái)服務(wù)器,每臺(tái)服務(wù)器均具有MySQL數(shù)據(jù)庫(kù)。同步節(jié)點(diǎn)中的HA(High Availability,高可用性)監(jiān)管器對(duì)外提供I和2兩個(gè)接ロ,I和兩個(gè)2接ロ分別可以提供telnet和http(Hyper Text Transfer Protocol,超文本傳輸協(xié)議)兩種服務(wù)器給系統(tǒng)管理員使用,系統(tǒng)管理員通過(guò)這兩個(gè)接ロ可以實(shí)施在線維護(hù)和管理監(jiān)控功能,基本的在線維護(hù)功能包括但不限于:添加新的復(fù)制組、給ー個(gè)復(fù)制組中填加新的服務(wù)器、調(diào)節(jié)同步日志的位置信息和調(diào)節(jié)復(fù)制組的同步日志位置等等,基本的管理監(jiān)控功能包括但不限于獲取當(dāng)前的同步狀態(tài)信息,如:查詢復(fù)制組中當(dāng)前的日志位置信息等。通過(guò)這種監(jiān)控接ロ,系統(tǒng)管理員還可以定時(shí)獲取相關(guān)信息,實(shí)現(xiàn)相應(yīng)的預(yù)警功能。
[0055]此外,如圖1所示的同步節(jié)點(diǎn)的結(jié)構(gòu)中,元數(shù)據(jù)用于存儲(chǔ)同步節(jié)點(diǎn)的配置數(shù)據(jù)和狀態(tài)數(shù)據(jù)。其中,配置數(shù)據(jù)主要描述服務(wù)器群中的各臺(tái)服務(wù)器之間的復(fù)制關(guān)系以及一致性模型等內(nèi)容,狀態(tài)數(shù)據(jù)用于描述數(shù)據(jù)的讀位置和寫(xiě)位置。關(guān)于復(fù)制關(guān)系、一致性模型及讀位置和寫(xiě)位置等內(nèi)容將在后續(xù)對(duì)應(yīng)的步驟中進(jìn)行詳細(xì)地描述,此處暫不贅述。具體實(shí)施時(shí),該同步節(jié)點(diǎn)的配置數(shù)據(jù)和狀態(tài)數(shù)據(jù)可通過(guò)兩個(gè)文件來(lái)存儲(chǔ),例如,以Master, info和relay-log.1nfo這兩個(gè)文件來(lái)存儲(chǔ)配置數(shù)據(jù)和狀態(tài)數(shù)據(jù)。另外,為了使同步節(jié)點(diǎn)能夠?qū)崿F(xiàn)多對(duì)多的復(fù)制和更加復(fù)雜的過(guò)濾、一致性模型配置,該元數(shù)據(jù)可以采用一臺(tái)単獨(dú)的服務(wù)器來(lái)存儲(chǔ)。優(yōu)選地,為了避免采用一臺(tái)単獨(dú)的服務(wù)器來(lái)存儲(chǔ)元數(shù)據(jù)時(shí)發(fā)生單點(diǎn)故障,還可以再采用另一臺(tái)服務(wù)器復(fù)制元數(shù)據(jù),以實(shí)現(xiàn)將元數(shù)據(jù)進(jìn)行備份,本實(shí)施例不對(duì)存儲(chǔ)元數(shù)據(jù)的方式進(jìn)行限定。
[0056]需要說(shuō)明的是,圖1僅以三個(gè)復(fù)制組,每個(gè)復(fù)制組包括一個(gè)同步節(jié)點(diǎn)和一個(gè)服務(wù)器群,每個(gè)服務(wù)器群包括三臺(tái)服務(wù)器為例,對(duì)實(shí)施環(huán)境進(jìn)行的舉例說(shuō)明。具體實(shí)施吋,還可以包括兩個(gè)復(fù)制組或四個(gè)復(fù)制組,每個(gè)復(fù)制組可以包括兩個(gè)同步節(jié)點(diǎn)和兩個(gè)服務(wù)器群,每個(gè)服務(wù)器群包括四個(gè)或五個(gè)服務(wù)器等,本實(shí)施例不對(duì)實(shí)施環(huán)境中復(fù)制組的個(gè)數(shù)、每個(gè)復(fù)制組包括的同步節(jié)點(diǎn)和服務(wù)器群的個(gè)數(shù)、每個(gè)服務(wù)器群中包括的服務(wù)器的個(gè)數(shù)進(jìn)行限定。
[0057]接下來(lái),結(jié)合上述內(nèi)容以及圖1所示的實(shí)施環(huán)境對(duì)數(shù)據(jù)復(fù)制的方法進(jìn)行詳細(xì)的解釋說(shuō)明,詳見(jiàn)如下實(shí)施例一至實(shí)施例ニ的內(nèi)容:
[0058]實(shí)施例一
[0059]結(jié)合上述內(nèi)容以及圖1所示的實(shí)施環(huán)境示意圖,為了在節(jié)省日志事件的傳輸次數(shù)及網(wǎng)絡(luò)流量的條件下,實(shí)現(xiàn)在面對(duì)互聯(lián)網(wǎng)海量數(shù)據(jù)業(yè)務(wù)的情況下的數(shù)據(jù)和服務(wù)的高可用性和高容錯(cuò)性,本實(shí)施例提供了一種數(shù)據(jù)復(fù)制的方法。參見(jiàn)圖2,本實(shí)施例提供的方法流程具體如下:
[0060]201:從本地復(fù)制組的一至多臺(tái)服務(wù)器中獲取記錄有更新數(shù)據(jù)的日志事件;
[0061]作為ー種優(yōu)選實(shí)施例,從本地復(fù)制組的一至多臺(tái)服務(wù)器中獲取記錄有更新數(shù)據(jù)的日志事件之后,還包括:
[0062]記錄從本地復(fù)制組的一至多臺(tái)服務(wù)器中獲取日志事件的狀態(tài)信息,狀態(tài)信息至少包括本地復(fù)制組的一至多臺(tái)服務(wù)器的節(jié)點(diǎn)標(biāo)識(shí)、日志文件名、日志文件偏移量和當(dāng)前狀態(tài)信息。
[0063]202:將獲取到的日志事件存放到本地復(fù)制組的中繼日志中;
[0064]203:更新本地復(fù)制組的中繼日志的版本號(hào),并獲取其他復(fù)制組的中繼日志及其他復(fù)制組的中繼日志的版本號(hào),其他復(fù)制組的中繼日志中存放有從該其他復(fù)制組的一至多臺(tái)服務(wù)器中獲取的記錄有更新數(shù)據(jù)的日志事件;
[0065]其中,更新本地復(fù)制組的中繼日志的版本號(hào),包括但不限于:
[0066]根據(jù)本地復(fù)制組的中繼日志的更新時(shí)間戳及本地復(fù)制組的中繼日志所在節(jié)點(diǎn)的節(jié)點(diǎn)編號(hào)更新本地復(fù)制組的中繼日志的版本號(hào)。
[0067]204:根據(jù)每個(gè)中繼日志的版本號(hào)從本地復(fù)制組的中繼日志及其他復(fù)制組的中繼日志中選擇中繼日志,井根據(jù)選擇的中繼日志更新本地復(fù)制組的一至多臺(tái)服務(wù)器的數(shù)據(jù)。
[0068]作為ー種優(yōu)選實(shí)施例,獲取其他復(fù)制組的中繼日志之后,還包括:
[0069]根據(jù)預(yù)設(shè)的第一過(guò)濾規(guī)則對(duì)獲取到的其他復(fù)制組的中繼日志進(jìn)行過(guò)濾;
[0070]根據(jù)每個(gè)中繼日志的版本號(hào)從本地復(fù)制組的中繼日志及其他復(fù)制組的中繼日志中選擇中繼日志,包括:
[0071]根據(jù)每個(gè)中繼日志的版本號(hào)從本地復(fù)制組的中繼日志及過(guò)濾后的其他復(fù)制組的中繼日志中選擇中繼日志。
[0072]作為ー種優(yōu)選實(shí)施例,根據(jù)選擇的中繼日志更新本地復(fù)制組的一至多臺(tái)服務(wù)器的數(shù)據(jù),包括但不限干:
[0073]讀取選擇的中繼日志中的日志事件;
[0074]對(duì)讀取的日志事件進(jìn)行回放,得到日志事件記錄的更新數(shù)據(jù);
[0075]將得到的更新數(shù)據(jù)寫(xiě)入所述本地復(fù)制組的一至多臺(tái)服務(wù)器中。
[0076]作為ー種優(yōu)選實(shí)施例,將讀取的日志事件所記錄的更新數(shù)據(jù)寫(xiě)入本地復(fù)制組的一至多臺(tái)服務(wù)器中之后,還包括:
[0077]記錄將得到的更新數(shù)據(jù)寫(xiě)入本地復(fù)制組的一至多臺(tái)服務(wù)器中的狀態(tài)信息,狀態(tài)信息至少包括具有更新數(shù)據(jù)的復(fù)制組標(biāo)識(shí)、更新數(shù)據(jù)寫(xiě)入的服務(wù)器的節(jié)點(diǎn)標(biāo)識(shí)、更新數(shù)據(jù)所在中繼日志的文件名、日志事件偏移量和當(dāng)前狀態(tài)信息。
[0078]本實(shí)施例提供的方法中,由于每個(gè)復(fù)制組的中繼日志中存放有從每個(gè)復(fù)制組的一至多臺(tái)服務(wù)器中獲取的記錄有更新數(shù)據(jù)的日志事件,因而通過(guò)獲取其他復(fù)制組的中繼日志及其他復(fù)制組的中繼日志的版本號(hào),并根據(jù)每個(gè)中繼日志的版本號(hào)從本地復(fù)制組的中繼日志及其他復(fù)制組的中繼日志中選擇中繼日志后,根據(jù)選擇的中繼日志更新本地復(fù)制組的一至多臺(tái)服務(wù)器的數(shù)據(jù),節(jié)省了日志事件的傳輸次數(shù)及網(wǎng)絡(luò)流量。另外,由于本發(fā)明實(shí)施例提供的方法可實(shí)現(xiàn)多個(gè)服務(wù)器之間的數(shù)據(jù)復(fù)制,因而在任一服務(wù)器發(fā)生故障時(shí),其他服務(wù)器能夠繼續(xù)提供服務(wù),從而在面對(duì)互聯(lián)網(wǎng)海量數(shù)據(jù)業(yè)務(wù)的情況下實(shí)現(xiàn)數(shù)據(jù)和服務(wù)的高可用性和高容錯(cuò)性。
[0079]實(shí)施例二
[0080]本實(shí)施例提供了一種數(shù)據(jù)復(fù)制的方法,為了便于說(shuō)明,本實(shí)施例結(jié)合上述實(shí)施例一的內(nèi)容,以如圖1所示的實(shí)施環(huán)境為例,對(duì)本實(shí)施例提供的方法進(jìn)行詳細(xì)地說(shuō)明。參見(jiàn)圖3,本實(shí)施例提供的方法流程具體如下:
[0081]301:從本地復(fù)制組的一至多臺(tái)服務(wù)器中獲取記錄有更新數(shù)據(jù)的日志事件;
[0082]針對(duì)該步驟,本地復(fù)制組為本實(shí)施例提供的方法的執(zhí)行主體所在的復(fù)制組。以圖1所示的實(shí)施環(huán)境中的同步節(jié)點(diǎn)I執(zhí)行數(shù)據(jù)復(fù)制的方法為例,本地復(fù)制組為同步節(jié)點(diǎn)I所在的復(fù)制組。每個(gè)復(fù)制組中的一至多臺(tái)服務(wù)器之間存在復(fù)制關(guān)系,該復(fù)制關(guān)系可存儲(chǔ)在同步節(jié)點(diǎn)的元數(shù)據(jù)中,且可以通過(guò)ー對(duì)一的表達(dá)方式進(jìn)行表示。例如,如果存在服務(wù)器A到服務(wù)器B的復(fù)制關(guān)系,則A->B的復(fù)制即表示服務(wù)器A作為主服務(wù)器,服務(wù)器B作為從服務(wù)器,數(shù)據(jù)從服務(wù)器A復(fù)制到服務(wù)器B ;B->A的復(fù)制即表示服務(wù)器B作為主服務(wù)器,服務(wù)器A作為從服務(wù)器,數(shù)據(jù)從服務(wù)器B復(fù)制到服務(wù)器A。如果描述服務(wù)器A與服務(wù)器B之間的主主復(fù)制關(guān)系,則需要在元數(shù)據(jù)中增加兩條復(fù)制關(guān)系,即A->B的復(fù)制和B->A的復(fù)制。優(yōu)選地,為了簡(jiǎn)化復(fù)制關(guān)系,對(duì)于復(fù)制組內(nèi)任意兩臺(tái)服務(wù)器之間均為主主復(fù)制關(guān)系的情況,本實(shí)施例定義了復(fù)制組中的服務(wù)器群概念,從而簡(jiǎn)化了多臺(tái)服務(wù)器之間的關(guān)系描述。例如,復(fù)制組中的服務(wù)器群表示方式可以為{A,B,C},表示服務(wù)器A、B和C中任意兩臺(tái)服務(wù)器之間存在主主復(fù)制關(guān)系。
[0083]當(dāng)然,除采用上述方式表示復(fù)制組內(nèi)的各臺(tái)服務(wù)器的復(fù)制關(guān)系外,還可以采用其他方式對(duì)復(fù)制組內(nèi)的各臺(tái)服務(wù)器的復(fù)制關(guān)系進(jìn)行表示,本實(shí)施例對(duì)此不作具體限定。該步驟在具體實(shí)施時(shí),可由同步節(jié)點(diǎn)的I/o線程池中的I/O線程從本地復(fù)制組的一至多臺(tái)服務(wù)器獲取記錄有更新數(shù)據(jù)的日志事件。其中,I/o線程池中的每個(gè)線程可以連接到本地復(fù)制組中的一臺(tái)服務(wù)器,從對(duì)應(yīng)的服務(wù)器獲取日志事件。為了保證信息安全,每臺(tái)服務(wù)器上可以配置一個(gè)對(duì)應(yīng)的包含用戶名和密碼的賬戶,以使每個(gè)I/o線程可以使用對(duì)應(yīng)的用戶名和密碼來(lái)連接到對(duì)應(yīng)的服務(wù)器。
[0084]進(jìn)ー步地,I/O線程通過(guò)對(duì)應(yīng)的用戶名和密碼與服務(wù)器進(jìn)行連接吋,由于用戶名和密碼將會(huì)被保存在元數(shù)據(jù)中,為了安全起見(jiàn),可以在每臺(tái)服務(wù)器中創(chuàng)建ー個(gè)有權(quán)限的用戶賬戶專(zhuān)門(mén)用來(lái)做數(shù)據(jù)復(fù)制,從而使I/o線程在被授予權(quán)限后再訪問(wèn)該服務(wù)器。其中,本實(shí)施例不對(duì)創(chuàng)建該有權(quán)限的用戶賬戶的方式進(jìn)行限定。例如,可以創(chuàng)建一個(gè)能夠在任何以duowan.com結(jié)尾的主機(jī)都能夠訪問(wèn)的用戶賬戶,倉(cāng)ll建用戶賬戶的腳本如下所示:
【權(quán)利要求】
1.一種數(shù)據(jù)復(fù)制的方法,其特征在于,所述方法包括:從本地復(fù)制組的一至多臺(tái)服務(wù)器中獲取記錄有更新數(shù)據(jù)的日志事件;將獲取到的日志事件存放到所述本地復(fù)制組的中繼日志中;更新所述本地復(fù)制組的中繼日志的版本號(hào),并獲取其他復(fù)制組的中繼日志及所述其他復(fù)制組的中繼日志的版本號(hào),所述其他復(fù)制組的中繼日志中存放有從所述其他復(fù)制組的一至多臺(tái)服務(wù)器中獲取的記錄有更新數(shù)據(jù)的日志事件;根據(jù)每個(gè)中繼日志的版本號(hào)從所述本地復(fù)制組的中繼日志及所述其他復(fù)制組的中繼日志中選擇中繼日志,并根據(jù)選擇的中繼日志更新所述本地復(fù)制組的一至多臺(tái)服務(wù)器的數(shù)據(jù)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述更新所述本地復(fù)制組的中繼日志的版本號(hào),包括:根據(jù)所述本地復(fù)制組的中繼日志的更新時(shí)間戳及所述本地復(fù)制組的中繼日志所在節(jié)點(diǎn)的節(jié)點(diǎn)編號(hào)更新所述本地復(fù)制組的中繼日志的版本號(hào)。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述獲取其他復(fù)制組的中繼日志之后,還包括:根據(jù)預(yù)設(shè)的第一過(guò)濾規(guī)則對(duì)獲取到的其他復(fù)制組的中繼日志進(jìn)行過(guò)濾;所述根據(jù)每個(gè)中繼日志的版本號(hào)從所述本地復(fù)制組的中繼日志及所述其他復(fù)制組的中繼日志中選擇中繼日志,包括:根據(jù)每個(gè)中繼日志的版本號(hào)從`所述本地復(fù)制組的中繼日志及過(guò)濾后的其他復(fù)制組的中繼日志中選擇中繼日志。
4.根據(jù)權(quán)利要求1至3中任一權(quán)利要求所述的方法,其特征在于,所述從本地復(fù)制組的一至多臺(tái)服務(wù)器中獲取記錄有更新數(shù)據(jù)的日志事件之后,還包括:記錄從所述本地復(fù)制組的一至多臺(tái)服務(wù)器中獲取日志事件的狀態(tài)信息,所述狀態(tài)信息至少包括所述本地復(fù)制組的一至多臺(tái)服務(wù)器的節(jié)點(diǎn)標(biāo)識(shí)、日志文件名、日志文件偏移量和當(dāng)前狀態(tài)信息。
5.根據(jù)權(quán)利要求1至3中任一權(quán)利要求所述的方法,其特征在于,所述根據(jù)選擇的中繼日志更新所述本地復(fù)制組的一至多臺(tái)服務(wù)器的數(shù)據(jù),包括:讀取選擇的中繼日志中的日志事件;對(duì)讀取的日志事件進(jìn)行回放,得到日志事件記錄的更新數(shù)據(jù);將得到的更新數(shù)據(jù)寫(xiě)入所述本地復(fù)制組的一至多臺(tái)服務(wù)器中。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述將得到的更新數(shù)據(jù)寫(xiě)入所述本地復(fù)制組的一至多臺(tái)服務(wù)器中之后,還包括:記錄將得到的更新數(shù)據(jù)寫(xiě)入所述本地復(fù)制組的一至多臺(tái)服務(wù)器中的狀態(tài)信息,所述狀態(tài)信息至少包括具有所述更新數(shù)據(jù)的復(fù)制組標(biāo)識(shí)、所述更新數(shù)據(jù)寫(xiě)入的服務(wù)器的節(jié)點(diǎn)標(biāo)識(shí)、所述更新數(shù)據(jù)所在中繼日志的文件名、日志事件偏移量和當(dāng)前狀態(tài)信息。
7.一種數(shù)據(jù)復(fù)制的裝置,其特征在于,所述裝置包括:第一獲取模塊,用于從本地復(fù)制組的一至多臺(tái)服務(wù)器中獲取記錄有更新數(shù)據(jù)的日志事件;存放模塊,用于將獲取到的日志事件存放到所述本地復(fù)制組的中繼日志中;第一更新模塊,用于更新所述本地復(fù)制組的中繼日志的版本號(hào);第二獲取模塊,用于獲取其他復(fù)制組的中繼日志及所述其他復(fù)制組的中繼日志的版本號(hào),所述其他復(fù)制組的中繼日志中存放有從所述其他復(fù)制組的一至多臺(tái)服務(wù)器中獲取的記錄有更新數(shù)據(jù)的日志事件;選擇模塊,用于根據(jù)每個(gè)中繼日志的版本號(hào)從所述本地復(fù)制組的中繼日志及所述其他復(fù)制組的中繼日志中選擇中繼日志;第二更新模塊,用于根據(jù)選擇的中繼日志更新所述本地復(fù)制組的一至多臺(tái)服務(wù)器的數(shù)據(jù)。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述第一更新模塊,用于根據(jù)所述本地復(fù)制組的中繼日志的更新時(shí)間戳及所述本地復(fù)制組的中繼日志所在節(jié)點(diǎn)的節(jié)點(diǎn)編號(hào)更新所述本地復(fù)制組的中繼日志的版本號(hào)。
9.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述裝置,還包括:過(guò)濾模塊,用于根據(jù)預(yù)設(shè)的第一過(guò)濾規(guī)則對(duì)獲取到的其他復(fù)制組的中繼日志進(jìn)行過(guò)濾;所述選擇模塊,用于根據(jù)每個(gè)中繼日志的版本號(hào)從所述本地復(fù)制組的中繼日志及過(guò)濾后的其他復(fù)制組的中繼日志中選擇中繼日志。
10.根據(jù)權(quán)利要求7至9中任一權(quán)利要求所述的裝置,其特征在于,所述裝置,還包括:第一記錄模塊,用于記錄從所述本地復(fù)制組的一至多臺(tái)服務(wù)器中獲取日志事件的狀態(tài)信息,所述狀態(tài)信息至少包括所述本地復(fù)制組的一至多臺(tái)服務(wù)器的節(jié)點(diǎn)標(biāo)識(shí)、日志文件名、日志文件偏移量和當(dāng)前狀態(tài)信息。
11.根據(jù)權(quán)利要求7至9中任一權(quán)利要求所述的裝置,其特征在于,所述第二更新模塊,用于讀取選擇的中繼日志中的日志事件,對(duì)讀取的日志事件進(jìn)行回放,得到日志事件記錄的更新數(shù)據(jù);將得到的更新數(shù)據(jù)寫(xiě)入所述本地復(fù)制組的一至多臺(tái)服務(wù)器中。
12.根據(jù)權(quán)利要求11所述的裝置,其特征在于,所述裝置,還包括:第二記錄模塊,用于記錄將得到的更新數(shù)據(jù)寫(xiě)入所述本地復(fù)制組的一至多臺(tái)服務(wù)器中的狀態(tài)信息,所述狀態(tài)信息至少包括具有所述更新數(shù)據(jù)的復(fù)制組標(biāo)識(shí)、所述更新數(shù)據(jù)寫(xiě)入的服務(wù)器的節(jié)點(diǎn)標(biāo)識(shí)、所述更新數(shù)據(jù)所在中繼日志的文件名、日志事件偏移量和當(dāng)前狀態(tài)信息。
【文檔編號(hào)】H04L12/24GK103560906SQ201310499683
【公開(kāi)日】2014年2月5日 申請(qǐng)日期:2013年10月22日 優(yōu)先權(quán)日:2013年10月22日
【發(fā)明者】喻先兵 申請(qǐng)人:珠海多玩信息技術(shù)有限公司