本發(fā)明涉及通信
技術(shù)領(lǐng)域:
:,具體涉及一種數(shù)據(jù)容災(zāi)方法、裝置和系統(tǒng)。
背景技術(shù):
::數(shù)據(jù)容災(zāi),指的是建立一個(gè)數(shù)據(jù)系統(tǒng),使得系統(tǒng)發(fā)生故障時(shí),能夠保證用戶數(shù)據(jù)的安全性,甚至,可以提供不間斷的應(yīng)用服務(wù)。在傳統(tǒng)的數(shù)據(jù)容災(zāi)方案中,系統(tǒng)至少存在兩個(gè)設(shè)備,一個(gè)作為主用設(shè)備(Master),另一個(gè)作為備用設(shè)備(Slave),其中,主用設(shè)備對(duì)外提供服務(wù),而備用設(shè)備則作為主用設(shè)備的備份,當(dāng)主用設(shè)備發(fā)生故障時(shí),替代主用設(shè)備。這種主備復(fù)制容災(zāi)方案雖然可以在一定程度上達(dá)到容災(zāi)的目的,但是,由于該方案大部分操作只支持手動(dòng)切換,因此,當(dāng)故障發(fā)生時(shí),并無(wú)法及時(shí)切換至備用設(shè)備中。為此,現(xiàn)有技術(shù)又提出了主主復(fù)制的容災(zāi)方案,即兩臺(tái)設(shè)備之間互為主備,任何一個(gè)設(shè)備中數(shù)據(jù)發(fā)送變化,均為同步到另一設(shè)備中,這樣,兩臺(tái)設(shè)備可以同時(shí)對(duì)外提供服務(wù),并互為鏡像,當(dāng)其中一臺(tái)設(shè)備發(fā)生故障時(shí),業(yè)務(wù)便可以直接切換到另一臺(tái)設(shè)備中,而無(wú)需運(yùn)維人員干預(yù)。在對(duì)現(xiàn)有技術(shù)的研究和實(shí)踐過(guò)程中,本發(fā)明的發(fā)明人發(fā)現(xiàn),現(xiàn)有的主主復(fù)制的容災(zāi)方案雖然在一定程度上可以保證切換前后數(shù)據(jù)的一致性,但是,由于存在兩個(gè)主用設(shè)備,因此,需要在業(yè)務(wù)層上對(duì)這兩個(gè)設(shè)備進(jìn)行嚴(yán)格區(qū)分,否則業(yè)務(wù)隨意選擇主用設(shè)備會(huì)造成大規(guī)模主鍵沖突,所以,該方案實(shí)現(xiàn)較為復(fù)雜,系統(tǒng)可用性不高。技術(shù)實(shí)現(xiàn)要素:本發(fā)明實(shí)施例提供一種數(shù)據(jù)容災(zāi)方法、裝置和系統(tǒng),不僅可以實(shí)現(xiàn)主備切換前后數(shù)據(jù)的一致性,而且,無(wú)需在業(yè)務(wù)層上對(duì)設(shè)備進(jìn)行嚴(yán)格區(qū)分,實(shí)現(xiàn)較為簡(jiǎn)單,系統(tǒng)可用性高。本發(fā)明實(shí)施例提供一種數(shù)據(jù)容災(zāi)方法,包括:對(duì)邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)進(jìn)行監(jiān)控,所述邏輯單元包括主節(jié)點(diǎn)和多個(gè)備用節(jié)點(diǎn);當(dāng)監(jiān)控到所述主節(jié)點(diǎn)發(fā)生異常時(shí),分別獲取所述多個(gè)備用節(jié)點(diǎn)的日志信息,所述備用節(jié)點(diǎn)的日志信息包括備用節(jié)點(diǎn)與主節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步的時(shí)間點(diǎn);選擇所述時(shí)間點(diǎn)最接近當(dāng)前時(shí)間的備用節(jié)點(diǎn)作為目標(biāo)節(jié)點(diǎn);將主節(jié)點(diǎn)更新為所述目標(biāo)節(jié)點(diǎn)。相應(yīng)的,本發(fā)明實(shí)施例還提供一種數(shù)據(jù)容災(zāi)裝置,包括:監(jiān)控單元,用于對(duì)邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)進(jìn)行監(jiān)控,所述邏輯單元包括主節(jié)點(diǎn)和多個(gè)備用節(jié)點(diǎn);獲取單元,用于在監(jiān)控到所述主節(jié)點(diǎn)發(fā)生異常時(shí),分別獲取所述多個(gè)備用節(jié)點(diǎn)的日志信息,所述備用節(jié)點(diǎn)的日志信息包括備用節(jié)點(diǎn)與主節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步的時(shí)間點(diǎn);選擇單元,用于選擇所述時(shí)間點(diǎn)最接近當(dāng)前時(shí)間的備用節(jié)點(diǎn)作為目標(biāo)節(jié)點(diǎn);更新單元,用于將主節(jié)點(diǎn)更新為所述目標(biāo)節(jié)點(diǎn)。此外,本發(fā)明實(shí)施例還提供一種數(shù)據(jù)容災(zāi)系統(tǒng),可以包括本發(fā)明實(shí)施例所提供的任一種數(shù)據(jù)容災(zāi)裝置。本發(fā)明實(shí)施例采用對(duì)邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)進(jìn)行監(jiān)控,當(dāng)監(jiān)控到主節(jié)點(diǎn)發(fā)生異常時(shí),分別獲取多個(gè)備用節(jié)點(diǎn)的日志信息,其中,備用節(jié)點(diǎn)的日志信息包括備用節(jié)點(diǎn)與主節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步的時(shí)間點(diǎn),然后,選擇時(shí)間點(diǎn)最接近當(dāng)前時(shí)間的備用節(jié)點(diǎn)作為目標(biāo)節(jié)點(diǎn),并將主節(jié)點(diǎn)更新為該目標(biāo)節(jié)點(diǎn),從而實(shí)現(xiàn)主備之間的切換;由于該方案的邏輯單元可以包括多個(gè)備用節(jié)點(diǎn),然后,在主節(jié)點(diǎn)發(fā)生異常時(shí),從中選擇出具有最新數(shù)據(jù)的備用節(jié)點(diǎn)作為新的主節(jié)點(diǎn),因此,可以保證切換前后,原主節(jié)點(diǎn)與新的主節(jié)點(diǎn)之間數(shù)據(jù)的一致性;而且,由于該邏輯單元只有一個(gè)主節(jié)點(diǎn),因此,不會(huì)出現(xiàn)如現(xiàn)有技術(shù)中所面臨的大規(guī)模主鍵沖突問(wèn)題,可以不在業(yè)務(wù)層對(duì)各個(gè)設(shè)備進(jìn)行區(qū)分,實(shí)現(xiàn)更為簡(jiǎn)單,可以大大提高系統(tǒng)的可用性。附圖說(shuō)明為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1a是本發(fā)明實(shí)施例提供的數(shù)據(jù)容災(zāi)系統(tǒng)的場(chǎng)景示意圖;圖1b是本發(fā)明實(shí)施例提供的數(shù)據(jù)容災(zāi)方法的場(chǎng)景示意圖;圖1c是本發(fā)明實(shí)施例提供的數(shù)據(jù)容災(zāi)方法的流程圖;圖2a是本發(fā)明實(shí)施例提供的數(shù)據(jù)容災(zāi)裝置的架構(gòu)示例圖;圖2b是本發(fā)明實(shí)施例提供的數(shù)據(jù)容災(zāi)方法中臨時(shí)節(jié)點(diǎn)注冊(cè)時(shí)的場(chǎng)景示意圖;圖2c是本發(fā)明實(shí)施例提供的數(shù)據(jù)容災(zāi)方法的另一流程圖;圖3a是本發(fā)明實(shí)施例提供的邏輯單元備份的場(chǎng)景示意圖;圖3b是本發(fā)明實(shí)施例提供的跨城容災(zāi)流程的場(chǎng)景示意圖;圖4a是本發(fā)明實(shí)施例提供的數(shù)據(jù)容災(zāi)裝置的結(jié)構(gòu)示意圖;圖4b是本發(fā)明實(shí)施例提供的數(shù)據(jù)容災(zāi)裝置的另一結(jié)構(gòu)示意圖;圖5是本發(fā)明實(shí)施例提供的服務(wù)器的結(jié)構(gòu)示意圖。具體實(shí)施方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。本發(fā)明實(shí)施例提供一種數(shù)據(jù)容災(zāi)方法、裝置和系統(tǒng)。其中,該數(shù)據(jù)容災(zāi)系統(tǒng)可以包括本發(fā)明實(shí)施例所提供的任一種數(shù)據(jù)容災(zāi)裝置,該數(shù)據(jù)容災(zāi)裝置的數(shù)量可以根據(jù)實(shí)際應(yīng)用的需求而定,此外,如圖1a所示,該數(shù)據(jù)容災(zāi)系統(tǒng)還可以包括其他的設(shè)備,比如接入網(wǎng)關(guān)(GW,GateWay)、以及用戶設(shè)備等;其中,接入網(wǎng)關(guān)可以接收用戶設(shè)備發(fā)送的連接建立請(qǐng)求,根據(jù)該連接建立請(qǐng)求獲取多個(gè)數(shù)據(jù)容災(zāi)裝置的負(fù)載信息,然后,根據(jù)該負(fù)載信息選擇匹配的數(shù)據(jù)容災(zāi)裝置,并建立該用戶設(shè)備與匹配到的數(shù)據(jù)容災(zāi)裝置之間的連接關(guān)系,這樣,后續(xù)用戶設(shè)備發(fā)送的數(shù)據(jù)處理請(qǐng)求,便可以基于該連接關(guān)系將數(shù)據(jù)處理請(qǐng)求轉(zhuǎn)發(fā)至相應(yīng)的數(shù)據(jù)容災(zāi)裝置中,由該數(shù)據(jù)容災(zāi)裝置根據(jù)該數(shù)據(jù)處理請(qǐng)求進(jìn)行數(shù)據(jù)處理,比如進(jìn)行數(shù)據(jù)的讀取、寫(xiě)入、刪除或更改,等等。其中,具體實(shí)現(xiàn)時(shí),該數(shù)據(jù)容災(zāi)裝置可以作為一個(gè)實(shí)體來(lái)實(shí)現(xiàn),也可以由多個(gè)實(shí)體共同來(lái)實(shí)現(xiàn),即該數(shù)據(jù)容災(zāi)裝置可以包括多個(gè)網(wǎng)絡(luò)設(shè)備,比如,如圖1b所示,該數(shù)據(jù)容災(zāi)裝置可以包括調(diào)度器和邏輯單元(set),其中,該邏輯單元可以包括主節(jié)點(diǎn)和多個(gè)備用節(jié)點(diǎn),這些節(jié)點(diǎn)可以部署在同一機(jī)房中,也可以部署在不同機(jī)房中,可以位于同一區(qū)域,也可以是位于不同區(qū)域。其中,主節(jié)點(diǎn)主要用于根據(jù)數(shù)據(jù)處理請(qǐng)求進(jìn)行數(shù)據(jù)處理,比如,進(jìn)行數(shù)據(jù)的讀或?qū)懙炔僮?;而備用?jié)點(diǎn)則是可以通過(guò)數(shù)據(jù)同步的方式來(lái)對(duì)主節(jié)點(diǎn)中的數(shù)據(jù)進(jìn)行備份,備用節(jié)點(diǎn)可以提供“讀”的功能。調(diào)度器主要用于對(duì)邏輯單元中的節(jié)點(diǎn)的狀態(tài)進(jìn)行監(jiān)控、以及對(duì)主備節(jié)點(diǎn)的切換進(jìn)行控制,比如,具體可以對(duì)邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)進(jìn)行監(jiān)控,若監(jiān)控到主節(jié)點(diǎn)發(fā)生異常,則分別獲取該多個(gè)備用節(jié)點(diǎn)的日志信息,其中,該備用節(jié)點(diǎn)的日志信息包括備用節(jié)點(diǎn)與主節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步的時(shí)間點(diǎn),然后,選擇該時(shí)間點(diǎn)最接近當(dāng)前時(shí)間的備用節(jié)點(diǎn)作為目標(biāo)節(jié)點(diǎn),并將主節(jié)點(diǎn)更新為該目標(biāo)節(jié)點(diǎn),即將該目標(biāo)節(jié)點(diǎn)作為新的主節(jié)點(diǎn),而原主節(jié)點(diǎn)則可以降為備用節(jié)點(diǎn),等等。此外,該數(shù)據(jù)容災(zāi)裝置還可以包括代理服務(wù)器,用于接收接入網(wǎng)關(guān)發(fā)送的數(shù)據(jù)處理請(qǐng)求,并根據(jù)預(yù)設(shè)路由信息將該數(shù)據(jù)處理請(qǐng)求發(fā)送至相應(yīng)的邏輯單元的節(jié)點(diǎn)中進(jìn)行處理,以及,與調(diào)度器進(jìn)行交互,以獲取相應(yīng)的路由信息,等等。以下將分別進(jìn)行詳細(xì)說(shuō)明。需說(shuō)明的是,以下實(shí)施例的序號(hào)不作為對(duì)實(shí)施例優(yōu)先順序的限定。實(shí)施例一、本實(shí)施例將從數(shù)據(jù)容災(zāi)裝置的角度進(jìn)行描述,該數(shù)據(jù)容災(zāi)裝置可以作為一個(gè)實(shí)體來(lái)實(shí)現(xiàn),也可以由多個(gè)實(shí)體共同來(lái)實(shí)現(xiàn),即該數(shù)據(jù)容災(zāi)裝置具體可以集成在服務(wù)器等設(shè)備中,或者,也可以包括多個(gè)網(wǎng)絡(luò)設(shè)備,比如可以包括調(diào)度器和邏輯單元(set)等,此外,該數(shù)據(jù)容災(zāi)裝置還可以包括其他設(shè)備,比如代理服務(wù)器等。一種數(shù)據(jù)容災(zāi)方法,包括:對(duì)邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)進(jìn)行監(jiān)控,當(dāng)監(jiān)控到該主節(jié)點(diǎn)發(fā)生異常時(shí),分別獲取該多個(gè)備用節(jié)點(diǎn)的日志信息,該備用節(jié)點(diǎn)的日志信息包括備用節(jié)點(diǎn)與主節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步的時(shí)間點(diǎn),選擇該時(shí)間點(diǎn)最接近當(dāng)前時(shí)間的備用節(jié)點(diǎn)作為目標(biāo)節(jié)點(diǎn),將主節(jié)點(diǎn)更新為該目標(biāo)節(jié)點(diǎn)。如圖1c所示,該數(shù)據(jù)容災(zāi)方法的具體流程可以如下:101、對(duì)邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)進(jìn)行監(jiān)控。其中,該邏輯單元可以包括主節(jié)點(diǎn)和多個(gè)備用節(jié)點(diǎn),主節(jié)點(diǎn)主要用于根據(jù)數(shù)據(jù)處理請(qǐng)求進(jìn)行數(shù)據(jù)處理,比如,進(jìn)行數(shù)據(jù)的讀或?qū)懙炔僮鳎欢鴤溆霉?jié)點(diǎn)則是可以通過(guò)數(shù)據(jù)同步的方式來(lái)對(duì)主節(jié)點(diǎn)中的數(shù)據(jù)進(jìn)行備份,備用節(jié)點(diǎn)可以提供“讀”的功能。這些節(jié)點(diǎn)可以部署在同一機(jī)房中,也可以部署在不同機(jī)房中,可以位于同一區(qū)域,也可以是位于不同區(qū)域;可選的,為了提高傳輸效率,各個(gè)節(jié)點(diǎn)之間還可以通過(guò)專線進(jìn)行傳輸。其中,對(duì)邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)(包括主節(jié)點(diǎn)和備用節(jié)點(diǎn))進(jìn)行監(jiān)控的方式可以有多種,比如,可以對(duì)數(shù)據(jù)庫(kù)實(shí)例,如mysql(一種關(guān)系型數(shù)據(jù)庫(kù))實(shí)例進(jìn)行監(jiān)控、對(duì)各個(gè)節(jié)點(diǎn)所執(zhí)行的事務(wù)進(jìn)行監(jiān)控、和/或?qū)壿媶卧獌?nèi)各個(gè)節(jié)點(diǎn)的硬件狀態(tài)和核心程序運(yùn)行狀態(tài)進(jìn)行監(jiān)控,等等,例如,具體可以如下:(1)對(duì)邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)的數(shù)據(jù)庫(kù)實(shí)例的運(yùn)行進(jìn)行監(jiān)控,如下:分別對(duì)邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)中的數(shù)據(jù)庫(kù)實(shí)例進(jìn)行周期性訪問(wèn),若該數(shù)據(jù)庫(kù)實(shí)例不可讀和/或不可寫(xiě),則確定相應(yīng)的節(jié)點(diǎn)發(fā)生異常。(2)對(duì)邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)所執(zhí)行的事務(wù)進(jìn)行監(jiān)控,如下:分別對(duì)邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)從主節(jié)點(diǎn)上拉取事務(wù)線程的工作狀態(tài)進(jìn)行監(jiān)控,若該工作狀態(tài)指示當(dāng)前處于非工作狀態(tài),比如,該工作狀態(tài)為“NO”,則確定相應(yīng)的節(jié)點(diǎn)發(fā)生異常。(3)對(duì)邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)的硬件狀態(tài)和核心程序運(yùn)行狀態(tài)進(jìn)行監(jiān)控,如下:定時(shí)獲取邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)的硬件狀態(tài)信息、以及核心程序運(yùn)行狀態(tài)信息,根據(jù)該硬件狀態(tài)信息確定節(jié)點(diǎn)發(fā)生硬件故障時(shí),和/或,根據(jù)該核心程序運(yùn)行狀態(tài)信息確定節(jié)點(diǎn)發(fā)生軟件故障時(shí),確定相應(yīng)的節(jié)點(diǎn)發(fā)生異常。其中,該邏輯單元可以是預(yù)設(shè)的,也可以由系統(tǒng)根據(jù)具體的服務(wù)請(qǐng)求進(jìn)行建立,即在步驟“對(duì)邏輯單元內(nèi)的節(jié)點(diǎn)進(jìn)行監(jiān)控”之前,該數(shù)據(jù)容災(zāi)方法還可以包括:獲取接入網(wǎng)關(guān)發(fā)送的服務(wù)請(qǐng)求,根據(jù)該服務(wù)請(qǐng)求選擇多個(gè)節(jié)點(diǎn),根據(jù)選擇的節(jié)點(diǎn)創(chuàng)建邏輯單元,并確定邏輯單元中各個(gè)節(jié)點(diǎn)的主備關(guān)系,使得該邏輯單元包括主節(jié)點(diǎn)和多個(gè)備用節(jié)點(diǎn)??蛇x的,為了提高數(shù)據(jù)的安全性,在將主節(jié)點(diǎn)中的數(shù)據(jù)同步到各個(gè)備用節(jié)點(diǎn)的同時(shí),還可以將數(shù)據(jù)備份到其他的存儲(chǔ)設(shè)備,比如分布式文件系統(tǒng)(HDFS,HadoopDistributeFileSystem)中,即在分布式文件系統(tǒng)中保存該邏輯單元相應(yīng)的鏡像文件,這樣,當(dāng)該邏輯單元中的節(jié)點(diǎn)發(fā)生故障時(shí),便可以基于當(dāng)天的鏡像文件以及指定時(shí)間點(diǎn)的日志信息,將該邏輯單元節(jié)點(diǎn)中的數(shù)據(jù),以極快的速度(比如秒級(jí))恢復(fù)到指定時(shí)間點(diǎn)??蛇x的,為了提高數(shù)據(jù)備份的效率,以及減少數(shù)據(jù)備份時(shí)對(duì)各個(gè)節(jié)點(diǎn)運(yùn)行的影響,還可以在備用節(jié)點(diǎn)中選擇相應(yīng)的節(jié)點(diǎn),作為冷備節(jié)點(diǎn),來(lái)執(zhí)行數(shù)據(jù)備份的操作,即,在步驟“確定邏輯單元中各個(gè)節(jié)點(diǎn)的主備關(guān)系”之后,該數(shù)據(jù)容災(zāi)方法還可以包括:按照預(yù)設(shè)策略從備用節(jié)點(diǎn)中選擇相應(yīng)的節(jié)點(diǎn),作為冷備節(jié)點(diǎn),通過(guò)該冷備節(jié)點(diǎn)以管道流的方式將數(shù)據(jù)備份至分布式文件系統(tǒng)??蛇x的,為了進(jìn)一步提高備份數(shù)據(jù)的效率,以及減少對(duì)各個(gè)節(jié)點(diǎn)運(yùn)行的影響,冷備節(jié)點(diǎn)在將數(shù)據(jù)備份至分布式文件系統(tǒng)時(shí),可以避開(kāi)邏輯單元運(yùn)作的高峰期,比如,可以一天備份一次,并且,可以選擇一天中的一個(gè)隨機(jī)事件來(lái)進(jìn)行備份,等等。102、當(dāng)監(jiān)控到該主節(jié)點(diǎn)發(fā)生異常時(shí),分別獲取該多個(gè)備用節(jié)點(diǎn)的日志信息。其中,該備用節(jié)點(diǎn)的日志信息可以包括備用節(jié)點(diǎn)與主節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步的時(shí)間點(diǎn),此外,可選的,該日志信息還可以包括其他的信息,比如所執(zhí)行的事務(wù)的名稱、數(shù)據(jù)的類(lèi)型、和/或大小,等等。該備用節(jié)點(diǎn)的日志信息的表現(xiàn)形式可以有多種,比如,具體可以為二進(jìn)制日志(binlog)等??蛇x的,在監(jiān)控到該主節(jié)點(diǎn)發(fā)生異常時(shí),除了直接觸發(fā)“獲取該多個(gè)備用節(jié)點(diǎn)的日志信息”操作之外,還可以通過(guò)其他的方式來(lái)觸發(fā)執(zhí)行該“獲取該多個(gè)備用節(jié)點(diǎn)的日志信息”的操作,比如,可以將該主節(jié)點(diǎn)降級(jí)為備用節(jié)點(diǎn),從而使得該邏輯單元中不存在主節(jié)點(diǎn),這樣,該邏輯單元便會(huì)生成指示不存在主節(jié)點(diǎn)的狀態(tài)信息,而后續(xù)調(diào)度器若監(jiān)控到該指示不存在主節(jié)點(diǎn)的狀態(tài)信息,便可以停止備用節(jié)點(diǎn)的同步日志的輸入輸出(I/O,Input/Output)接口,并觸發(fā)執(zhí)行該“獲取該多個(gè)備用節(jié)點(diǎn)的日志信息”的操作;也就是說(shuō),在步驟“分別獲取該多個(gè)備用節(jié)點(diǎn)的日志信息”之前,該數(shù)據(jù)容災(zāi)方法還可以包括:將該主節(jié)點(diǎn)降級(jí)為備用節(jié)點(diǎn),并停止備用節(jié)點(diǎn)的同步日志(比如binlog)的I/O接口。在監(jiān)控到該主節(jié)點(diǎn)發(fā)生異常時(shí),還可以對(duì)主節(jié)點(diǎn)中的數(shù)據(jù)進(jìn)行修復(fù),比如,具體可以如下:獲取該主節(jié)點(diǎn)的日志信息,根據(jù)該主節(jié)點(diǎn)的日志信息對(duì)該主節(jié)點(diǎn)中的數(shù)據(jù)進(jìn)行修復(fù),等等。其中,該主節(jié)點(diǎn)的日志信息可以包括主節(jié)點(diǎn)更新數(shù)據(jù)的時(shí)間點(diǎn)(即主節(jié)點(diǎn)更新自身數(shù)據(jù)的時(shí)間點(diǎn)),此外,可選的,該日志信息還可以包括其他的信息,比如所執(zhí)行的事務(wù)的名稱、數(shù)據(jù)的類(lèi)型、和/或大小,等等。該主節(jié)點(diǎn)的日志信息的表現(xiàn)形式可以有多種,比如,具體可以為二進(jìn)制日志(binlog)等。需說(shuō)明的是,由于在本發(fā)明實(shí)施例中,客戶端在發(fā)出一條數(shù)據(jù)處理請(qǐng)求,比如結(jié)構(gòu)化查詢語(yǔ)言(sql,StructuredQueryLanguage)后,需要等待主節(jié)點(diǎn)將該數(shù)據(jù)處理請(qǐng)求對(duì)應(yīng)的日志信息(比如binlog)同步到備用節(jié)點(diǎn)上時(shí),才能正常返回,否則客戶端會(huì)返回超時(shí)的錯(cuò)誤。因此,當(dāng)主節(jié)點(diǎn)突然發(fā)生異常,日志信息可能還沒(méi)來(lái)得及發(fā)送到其他備用節(jié)點(diǎn)時(shí),如果此時(shí)主節(jié)點(diǎn)依照自身的日志信息進(jìn)行數(shù)據(jù)恢復(fù),則結(jié)果會(huì)多出這筆數(shù)據(jù)(即此時(shí)主節(jié)點(diǎn)比備用節(jié)點(diǎn)多出這一筆數(shù)據(jù)),因而,為了避免出現(xiàn)這種情況,在對(duì)主節(jié)點(diǎn)進(jìn)行數(shù)據(jù)恢復(fù)之前,可以對(duì)這筆數(shù)據(jù)所對(duì)應(yīng)的日志信息做閃回處理,即,在步驟“獲取該主節(jié)點(diǎn)的日志信息”之前,該數(shù)據(jù)容災(zāi)方法還可以包括:確定主節(jié)點(diǎn)中的數(shù)據(jù)是否已同步至備用節(jié)點(diǎn),若是,則執(zhí)行獲取該主節(jié)點(diǎn)的日志信息的步驟;若否,則對(duì)尚未同步的數(shù)據(jù)所對(duì)應(yīng)的日志信息進(jìn)行閃回處理??蛇x的,在對(duì)尚未同步的數(shù)據(jù)所對(duì)應(yīng)的日志信息進(jìn)行閃回處理之前,還可以確定該尚未同步的數(shù)據(jù)所對(duì)應(yīng)的日志信息是否能夠被閃回,若是,才執(zhí)行該對(duì)尚未同步的數(shù)據(jù)所對(duì)應(yīng)的日志信息進(jìn)行閃回處理的步驟;否則,若不能被閃回,則從該目標(biāo)節(jié)點(diǎn)中全量拉取鏡像數(shù)據(jù),以重構(gòu)該主節(jié)點(diǎn)中的數(shù)據(jù)。比如,對(duì)于刪除表(droptable)之類(lèi)的,就無(wú)法被閃回,因此,對(duì)于此類(lèi)數(shù)據(jù),可以從目標(biāo)節(jié)點(diǎn)中全量拉取鏡像數(shù)據(jù),來(lái)進(jìn)行數(shù)據(jù)的重構(gòu),等等。需說(shuō)明的是,除了可以由該數(shù)據(jù)容災(zāi)裝置自動(dòng)從目標(biāo)節(jié)點(diǎn)中全量拉取鏡像數(shù)據(jù)之外,也可以由運(yùn)維人員進(jìn)行干預(yù),即由人工從目標(biāo)節(jié)點(diǎn)中全量拉取鏡像數(shù)據(jù),以重構(gòu)該主節(jié)點(diǎn)中的數(shù)據(jù)。103、根據(jù)該日志信息,選擇該時(shí)間點(diǎn)(即備用節(jié)點(diǎn)與主節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步的時(shí)間點(diǎn))最接近當(dāng)前時(shí)間的備用節(jié)點(diǎn)作為目標(biāo)節(jié)點(diǎn)。比如,當(dāng)前時(shí)間點(diǎn)為7月1日的12:10:01,而備用節(jié)點(diǎn)A與主節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步的時(shí)間點(diǎn)為7月1日的12:10:00分,備用節(jié)點(diǎn)B與主節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步的時(shí)間點(diǎn)為7月1日的12:09:59分,備用節(jié)點(diǎn)C與主節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步的時(shí)間點(diǎn)為7月1日的12:10:01分,則此時(shí),可以選擇備用節(jié)點(diǎn)C作為目標(biāo)節(jié)點(diǎn),從而保證該目標(biāo)節(jié)點(diǎn)中的數(shù)據(jù)與主節(jié)點(diǎn)的數(shù)據(jù)的一致性。104、將主節(jié)點(diǎn)更新為該目標(biāo)節(jié)點(diǎn),即,將該目標(biāo)節(jié)點(diǎn)作為新的主節(jié)點(diǎn),從而將原主節(jié)點(diǎn)中的業(yè)務(wù)切換至該目標(biāo)節(jié)點(diǎn)上。可選的,為了提高數(shù)據(jù)的安全性,還可以對(duì)該邏輯單元中的數(shù)據(jù)進(jìn)行異地備份,比如,若該邏輯單元位于A地,則可以在B地對(duì)該邏輯單元進(jìn)行備份,從而使得當(dāng)A地的邏輯單元發(fā)生異常,比如A地發(fā)生災(zāi)難時(shí),可以將A地邏輯單元的業(yè)務(wù)切換至B地的備份邏輯單元;即該數(shù)據(jù)容災(zāi)方法還可以包括:對(duì)該邏輯單元進(jìn)行異地備份,得到備用邏輯單元,在該邏輯單元發(fā)生故障時(shí),將該邏輯單元的業(yè)務(wù)切換至該備用邏輯單元中。此外,還可以利用B地備份的數(shù)據(jù)對(duì)A地的邏輯單元進(jìn)行數(shù)據(jù)重建,即在步驟“將該邏輯單元的業(yè)務(wù)切換至該備用邏輯單元中”之后,該數(shù)據(jù)容災(zāi)方法還可以包括:將該備用邏輯單元中各個(gè)節(jié)點(diǎn)的數(shù)據(jù)同步至該邏輯單元相應(yīng)節(jié)點(diǎn)中;確定該邏輯單元和備用邏輯單元中各個(gè)節(jié)點(diǎn)的數(shù)據(jù)延遲小于預(yù)設(shè)值時(shí),將該備用邏輯單元設(shè)置為只讀,并在該延遲(即該邏輯單元和備用邏輯單元中各個(gè)節(jié)點(diǎn)的數(shù)據(jù)延遲)為0時(shí),將該業(yè)務(wù)切換回該邏輯單元中。其中,該預(yù)設(shè)值可以根據(jù)實(shí)際應(yīng)用的需求進(jìn)行設(shè)置,在此不再贅述。由上可知,本實(shí)施例采用對(duì)邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)進(jìn)行監(jiān)控,當(dāng)監(jiān)控到主節(jié)點(diǎn)發(fā)生異常時(shí),分別獲取多個(gè)備用節(jié)點(diǎn)的日志信息,其中,備用節(jié)點(diǎn)的日志信息包括備用節(jié)點(diǎn)與主節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步的時(shí)間點(diǎn),然后,選擇時(shí)間點(diǎn)最接近當(dāng)前時(shí)間的備用節(jié)點(diǎn)作為目標(biāo)節(jié)點(diǎn),并將主節(jié)點(diǎn)更新為該目標(biāo)節(jié)點(diǎn),從而實(shí)現(xiàn)主備之間的切換;由于該方案的邏輯單元可以包括多個(gè)備用節(jié)點(diǎn),然后,在主節(jié)點(diǎn)發(fā)生異常時(shí),從中選擇出具有最新數(shù)據(jù)的備用節(jié)點(diǎn)作為新的主節(jié)點(diǎn),因此,可以保證切換前后,原主節(jié)點(diǎn)與新的主節(jié)點(diǎn)之間數(shù)據(jù)的一致性;而且,由于該邏輯單元只有一個(gè)主節(jié)點(diǎn),因此,不會(huì)出現(xiàn)如現(xiàn)有技術(shù)中所面臨的大規(guī)模主鍵沖突問(wèn)題,可以不在業(yè)務(wù)層對(duì)各個(gè)設(shè)備進(jìn)行區(qū)分,實(shí)現(xiàn)更為簡(jiǎn)單,可以大大提高系統(tǒng)的可用性。實(shí)施例二、根據(jù)實(shí)施例一所描述的方法,以下將舉例作進(jìn)一步詳細(xì)說(shuō)明。在本實(shí)施例中,將以數(shù)據(jù)容災(zāi)系統(tǒng)包括用戶設(shè)備、接入網(wǎng)關(guān)、以及多個(gè)數(shù)據(jù)容災(zāi)裝置,而該數(shù)據(jù)容災(zāi)裝置包括代理服務(wù)器、調(diào)度器和邏輯單元(set)為例進(jìn)行詳細(xì)說(shuō)明。其中,參見(jiàn)圖1a、圖1b和圖2a,該數(shù)據(jù)容災(zāi)系統(tǒng)中各個(gè)設(shè)備的具體功能可以如下:(1)用戶設(shè)備;用戶設(shè)備,用于通過(guò)接入網(wǎng)關(guān)與數(shù)據(jù)容災(zāi)裝置建立連接關(guān)系,并基于該連接關(guān)系向相應(yīng)的數(shù)據(jù)容災(zāi)裝置發(fā)送數(shù)據(jù)處理請(qǐng)求,以獲取相應(yīng)的服務(wù)。(2)接入網(wǎng)關(guān);在用戶新建連接時(shí),接入網(wǎng)關(guān)可以獲取多個(gè)數(shù)據(jù)容災(zāi)裝置的負(fù)載信息,根據(jù)這些負(fù)載信息選擇匹配的數(shù)據(jù)容災(zāi)裝置,并建立用戶設(shè)備與匹配到的數(shù)據(jù)容災(zāi)裝置之間的連接關(guān)系;此外,接入網(wǎng)關(guān)中還可以保存該連接關(guān)系的相關(guān)信息,比如保存該連接的會(huì)話信息等。而對(duì)于已經(jīng)建立連接的用戶請(qǐng)求,比如用戶設(shè)備發(fā)送的數(shù)據(jù)處理請(qǐng)求,則可以根據(jù)該連接的會(huì)話信息,將該數(shù)據(jù)處理請(qǐng)求轉(zhuǎn)發(fā)到對(duì)應(yīng)的數(shù)據(jù)容災(zāi)裝置上,從而達(dá)到負(fù)載均衡的目的。其中,為了可以及時(shí)且準(zhǔn)確地獲取各個(gè)數(shù)據(jù)容災(zāi)裝置的負(fù)載信息,還可以設(shè)置一服務(wù)列表,用于保存有多個(gè)可以提供服務(wù)的數(shù)據(jù)容災(zāi)裝置的信息,這樣,在需要選擇數(shù)據(jù)容災(zāi)裝置時(shí),便可以根據(jù)該服務(wù)列表中的信息,來(lái)選擇所需的數(shù)據(jù)容災(zāi)裝置;與此同時(shí),為了保持該服務(wù)列表中信息的準(zhǔn)確性和實(shí)時(shí)性,接入網(wǎng)關(guān)還可以周期性地探測(cè)各個(gè)數(shù)據(jù)容災(zāi)裝置的狀態(tài),并基于這些狀態(tài)對(duì)該服務(wù)列表中的信息進(jìn)行更新,比如,可以將故障的數(shù)據(jù)容災(zāi)裝置及時(shí)從服務(wù)列表中刪除,而當(dāng)檢測(cè)到該故障的數(shù)據(jù)容災(zāi)裝置恢復(fù)正常,則可以添加回服務(wù)列表中,等等。需說(shuō)明的是,由于該接入網(wǎng)關(guān)保存了連接的會(huì)話信息,因此,即便對(duì)數(shù)據(jù)容災(zāi)裝置進(jìn)行擴(kuò)容,比如增加多幾個(gè)數(shù)據(jù)容災(zāi)裝置,也不會(huì)對(duì)已經(jīng)存在的用戶連接造成影響,所以,該方案可以很方便地進(jìn)行擴(kuò)容。(3)數(shù)據(jù)容災(zāi)裝置;參見(jiàn)圖1b,該數(shù)據(jù)容災(zāi)裝置可以包括代理服務(wù)器(proxy)、調(diào)度器和邏輯單元(set)等設(shè)備,具體可以如下:A、代理服務(wù)器;代理服務(wù)器,用于從調(diào)度器中獲取和保存路由信息,并根據(jù)該路由信息將用戶設(shè)備發(fā)送的數(shù)據(jù)處理請(qǐng)求,比如sql語(yǔ)句轉(zhuǎn)發(fā)至相應(yīng)的邏輯單元。此外,該代理服務(wù)器,還可以對(duì)接收到的數(shù)據(jù)處理請(qǐng)求進(jìn)行鑒權(quán),比如,根據(jù)該數(shù)據(jù)處理請(qǐng)求中攜帶的用戶設(shè)備的標(biāo)識(shí),比如網(wǎng)際協(xié)議(IP,InternetProtocol)地址、用戶名和/或用戶密碼等信息進(jìn)行鑒權(quán),等等。B、調(diào)度器;該調(diào)度器作為該數(shù)據(jù)容災(zāi)裝置的調(diào)度管理中心,可以進(jìn)行邏輯單元(set)的創(chuàng)建、刪除、以及邏輯單元中節(jié)點(diǎn)的選擇、以及替換等操作。此外,該調(diào)度器還可以對(duì)邏輯單元中的各個(gè)節(jié)點(diǎn)進(jìn)行監(jiān)控,當(dāng)監(jiān)控到該主節(jié)點(diǎn)發(fā)生異常時(shí),則發(fā)起主備切換流程,比如,可以分別獲取該多個(gè)備用節(jié)點(diǎn)的日志信息,并根據(jù)該日志信息選擇新的主節(jié)點(diǎn),等等。其中,該調(diào)度器可以包括多個(gè)調(diào)度程序(Scheduler),然后由這多個(gè)Scheduler來(lái)協(xié)作完成該調(diào)度器的主要操作,比如,創(chuàng)建和刪除邏輯單元,以及對(duì)邏輯單元中的節(jié)點(diǎn)進(jìn)行選擇和替換,以及對(duì)各個(gè)節(jié)點(diǎn)的狀態(tài)進(jìn)行監(jiān)控,并在確定主節(jié)點(diǎn)發(fā)生異常時(shí),發(fā)起主備切換流程,等等。而該Scheduler與其他部分,比如代理服務(wù)器和邏輯單元之間的交互則可以通過(guò)開(kāi)源的分布式應(yīng)用程序協(xié)調(diào)服務(wù),比如Zookeeper來(lái)完成;比如,該Zookeeper可以接收各個(gè)節(jié)點(diǎn)上報(bào)的狀態(tài)信息,并將該狀態(tài)信息提供給Scheduler,或者,Scheduler也可以對(duì)Zookeeper進(jìn)行監(jiān)控,并從Zookeeper中獲取到相應(yīng)的節(jié)點(diǎn)的狀態(tài)信息,等等。需說(shuō)明的是,由于Zookeeper可能會(huì)面對(duì)多個(gè)邏輯單元,因此,為了方便對(duì)各個(gè)邏輯單元進(jìn)行管理,如圖2b所示,在建立邏輯單元時(shí),可以在Zookeeper中注冊(cè)一個(gè)與該邏輯單元對(duì)應(yīng)的臨時(shí)節(jié)點(diǎn),并由該臨時(shí)節(jié)點(diǎn)來(lái)處理該邏輯單元的事務(wù),比如接收該邏輯單元中各個(gè)節(jié)點(diǎn)的狀態(tài)信息,等等。需說(shuō)明的是,Scheduler的容災(zāi)可以通過(guò)Zookeeper的選舉機(jī)制完成,在此不作細(xì)述。C、邏輯單元(set);邏輯單元,可以包括主節(jié)點(diǎn)和多個(gè)備用節(jié)點(diǎn),主節(jié)點(diǎn)主要用于根據(jù)數(shù)據(jù)處理請(qǐng)求進(jìn)行數(shù)據(jù)處理,比如,進(jìn)行數(shù)據(jù)的讀或?qū)懙炔僮?;而備用?jié)點(diǎn)則是可以通過(guò)數(shù)據(jù)同步的方式來(lái)對(duì)主節(jié)點(diǎn)中的數(shù)據(jù)進(jìn)行備份,備用節(jié)點(diǎn)可以提供“讀”的功能。這些節(jié)點(diǎn)可以部署在同一機(jī)房中,也可以部署在不同機(jī)房中,可以位于同一區(qū)域,也可以是位于不同區(qū)域。為了便于對(duì)這些節(jié)點(diǎn)進(jìn)行管理和數(shù)據(jù)傳輸,還可以為每一個(gè)節(jié)點(diǎn)分別設(shè)置一個(gè)代理模塊(Agent),該代理模塊可以獨(dú)立于各個(gè)節(jié)點(diǎn),也可以集成在各個(gè)節(jié)點(diǎn)中,例如,參見(jiàn)圖2a。該代理模塊,可以通過(guò)短連接的方式周期性訪問(wèn)所屬節(jié)點(diǎn)的數(shù)據(jù)庫(kù)實(shí)例(DB),以檢測(cè)是否可讀和可寫(xiě),若可讀且可寫(xiě),則表示該節(jié)點(diǎn)正常,若不可讀或不可寫(xiě),則表示該節(jié)點(diǎn)發(fā)生異常,此時(shí),代理模塊便可以生成相應(yīng)的表示節(jié)點(diǎn)異常的狀態(tài)信息,并將該狀態(tài)信息上報(bào)給調(diào)度器,比如,具體可以上報(bào)給Zookeeper中相應(yīng)的臨時(shí)節(jié)點(diǎn),從而使得調(diào)度器可以檢測(cè)到該節(jié)點(diǎn)發(fā)生異常,進(jìn)而進(jìn)行主備切換。其中,該代理模塊對(duì)所屬節(jié)點(diǎn)的數(shù)據(jù)庫(kù)實(shí)例的訪問(wèn)周期可以根據(jù)實(shí)際應(yīng)用的需求而定,比如,可以設(shè)置為每3秒則監(jiān)測(cè)一次,等等。該代理模塊,還可以對(duì)所屬節(jié)點(diǎn)在執(zhí)行事務(wù)時(shí)的延時(shí)時(shí)間、以及延遲的事務(wù)數(shù)量進(jìn)行統(tǒng)計(jì),并定期將攜帶統(tǒng)計(jì)結(jié)果的狀態(tài)信息上報(bào)給調(diào)度器,比如,具體可以上報(bào)給Zookeeper中相應(yīng)的臨時(shí)節(jié)點(diǎn),以便調(diào)度器可以據(jù)此確定是否發(fā)起主備切換流程,比如,如果統(tǒng)計(jì)結(jié)果超過(guò)預(yù)設(shè)閾值,則進(jìn)行主備切換,等等。此外,如發(fā)生了主備切換,代理模塊還可以根據(jù)新的主節(jié)點(diǎn)重建主備關(guān)系,而對(duì)于新增的數(shù)據(jù)庫(kù)實(shí)例也可以采用如xtrabackup(一種數(shù)據(jù)備份工具)等方式,通過(guò)主節(jié)點(diǎn)重建數(shù)據(jù),因此,該方案的數(shù)據(jù)重建均可自動(dòng)進(jìn)行,而無(wú)需數(shù)據(jù)庫(kù)管理員(DBA,DatabaseAdministrator)干預(yù)。需說(shuō)明的是,如果該邏輯單元發(fā)生硬件故障,和/或,核心程序發(fā)生異常,比如該代理模塊發(fā)生核心(core)故障,則Zookeeper中相應(yīng)的臨時(shí)節(jié)點(diǎn)也會(huì)相應(yīng)被刪除,所以,如果Scheduler檢測(cè)到該臨時(shí)節(jié)點(diǎn)消失了,則可以確定該邏輯單元中的主節(jié)點(diǎn)發(fā)生異常,此時(shí),可以進(jìn)行主備切換。基于上述數(shù)據(jù)容災(zāi)系統(tǒng)的架構(gòu),以下將舉例對(duì)其執(zhí)行流程進(jìn)行詳細(xì)說(shuō)明。如圖2c所示,一種數(shù)據(jù)容災(zāi)方法,具體流程可以如下:201、邏輯單元中的各個(gè)代理模塊對(duì)各自所屬的節(jié)點(diǎn)進(jìn)行監(jiān)控,得到狀態(tài)信息,并將狀態(tài)信息發(fā)送給調(diào)度器。例如,以主節(jié)點(diǎn)A為例,則主節(jié)點(diǎn)A的代理模塊A對(duì)主節(jié)點(diǎn)A的監(jiān)控方式可以如下:代理模塊A周期性訪問(wèn)主節(jié)點(diǎn)A的數(shù)據(jù)庫(kù)實(shí)例,以檢測(cè)該數(shù)據(jù)庫(kù)實(shí)例是否可讀且可寫(xiě),若可讀且可寫(xiě),則確定主節(jié)點(diǎn)A正常,若不可讀或不可寫(xiě),則確定主節(jié)點(diǎn)A發(fā)生異常,生成相應(yīng)的表示節(jié)點(diǎn)異常的狀態(tài)信息,并將該表示節(jié)點(diǎn)異常的狀態(tài)信息發(fā)送給調(diào)度器,比如,具體可以發(fā)送給Zookeeper中相應(yīng)的臨時(shí)節(jié)點(diǎn)。和/或,代理模塊A定時(shí)獲取自身(即該代理模塊A)和主節(jié)點(diǎn)A的硬件狀態(tài)信息、以及核心程序運(yùn)行狀態(tài)信息,并將該硬件狀態(tài)信息、以及核心程序運(yùn)行狀態(tài)信息發(fā)送給調(diào)度器,比如,具體可以發(fā)送給Zookeeper中相應(yīng)的臨時(shí)節(jié)點(diǎn),等等。需說(shuō)明的是,上述代理模塊A對(duì)主節(jié)點(diǎn)A的監(jiān)控方式同樣適用于其他節(jié)點(diǎn),在此不再贅述。202、調(diào)度器接收到該狀態(tài)信息后,根據(jù)該狀態(tài)信息確定相應(yīng)的主節(jié)點(diǎn)是否發(fā)生異常,若發(fā)生異常,則執(zhí)行步驟203,而若沒(méi)有發(fā)生異常,則可以返回執(zhí)行步驟201的步驟。例如,具體可以由Zookeeper中相應(yīng)的臨時(shí)節(jié)點(diǎn)來(lái)接收該狀態(tài)信息,并將該狀態(tài)信息提供該Scheduler,當(dāng)Scheduler根據(jù)該狀態(tài)信息確定主節(jié)點(diǎn)發(fā)生異常時(shí),則執(zhí)行步驟203。需說(shuō)明的是,由于當(dāng)邏輯單元發(fā)生硬件故障,和/或,該邏輯單元中的核心程序發(fā)生異常時(shí),該邏輯單元相應(yīng)的臨時(shí)節(jié)點(diǎn)會(huì)消失,因此,若Scheduler檢測(cè)到該臨時(shí)節(jié)點(diǎn)消失了,則也可以確定該邏輯單元中的主節(jié)點(diǎn)發(fā)生了異常,因此,此時(shí)也可以執(zhí)行步驟203。203、調(diào)度器將該主節(jié)點(diǎn)降級(jí)為備用節(jié)點(diǎn),并停止備用節(jié)點(diǎn)的同步日志(binlog)的I/O接口,然后執(zhí)行步驟204。例如,具體可以由Scheduler來(lái)將該主節(jié)點(diǎn)降級(jí)為備用節(jié)點(diǎn),并通過(guò)Zookeeper向相應(yīng)的備用節(jié)點(diǎn)發(fā)送線程停止指令,以便備用節(jié)點(diǎn)可以根據(jù)該線程停止指令停止同步日志(binlog)的I/O接口,等等。204、調(diào)度器分別獲取該邏輯單元中多個(gè)備用節(jié)點(diǎn)的日志信息。例如,具體可以由Scheduler來(lái)獲取該邏輯單元中多個(gè)備用節(jié)點(diǎn)的日志信息,比如relaylog(中繼日志)等。其中,該備用節(jié)點(diǎn)的日志信息可以包括備用節(jié)點(diǎn)與主節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步的時(shí)間點(diǎn),此外,可選的,該日志信息還可以包括其他的信息,比如所執(zhí)行的事務(wù)的名稱、數(shù)據(jù)的類(lèi)型、和/或大小,等等。205、調(diào)度器根據(jù)該日志信息,選擇時(shí)間點(diǎn)(即備用節(jié)點(diǎn)與主節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步的時(shí)間點(diǎn))最接近當(dāng)前時(shí)間的備用節(jié)點(diǎn)作為目標(biāo)節(jié)點(diǎn)。例如,具體可以由Scheduler來(lái)選擇該目標(biāo)節(jié)點(diǎn);比如,當(dāng)前時(shí)間點(diǎn)為7月1日的12:10:01,而備用節(jié)點(diǎn)A與主節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步的時(shí)間點(diǎn)為7月1日的12:10:00分,備用節(jié)點(diǎn)B與主節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步的時(shí)間點(diǎn)為7月1日的12:09:59分,備用節(jié)點(diǎn)C與主節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步的時(shí)間點(diǎn)為7月1日的12:10:01分,則此時(shí),Scheduler可以選擇備用節(jié)點(diǎn)C作為目標(biāo)節(jié)點(diǎn)。206、調(diào)度器將主節(jié)點(diǎn)更新為該目標(biāo)節(jié)點(diǎn),即將目標(biāo)節(jié)點(diǎn)作為新的主節(jié)點(diǎn),以便將原主節(jié)點(diǎn)中的業(yè)務(wù)切換至該目標(biāo)節(jié)點(diǎn)上。例如,具體可以由Scheduler將該主節(jié)點(diǎn)更新為該目標(biāo)節(jié)點(diǎn),比如,可以生成表示主節(jié)點(diǎn)更新為該目標(biāo)節(jié)點(diǎn)的指示信息,然后,通過(guò)Zookeeper向該目標(biāo)節(jié)點(diǎn)的代理模塊發(fā)送該指示信息,這樣,該代理模塊便可以基于該指示信息重建主備關(guān)系,比如,確定自身(即該目標(biāo)節(jié)點(diǎn))為新的主節(jié)點(diǎn),而其他節(jié)點(diǎn)為備用節(jié)點(diǎn),并生成相應(yīng)的路由信息,然后,將該路由信息通過(guò)Zookeeper,提供給Scheduler,等等??蛇x的,如圖2a所示,為了提高數(shù)據(jù)的安全性,在將主節(jié)點(diǎn)中的數(shù)據(jù)同步到各個(gè)備用節(jié)點(diǎn)的同時(shí),還可以將數(shù)據(jù)備份到其他的存儲(chǔ)設(shè)備,比如分布式文件系統(tǒng)中。需說(shuō)明的是,為了提高數(shù)據(jù)備份的效率,以及減少數(shù)據(jù)備份時(shí)對(duì)各個(gè)節(jié)點(diǎn)運(yùn)行的影響,可以在備用節(jié)點(diǎn)中選擇相應(yīng)的節(jié)點(diǎn),作為冷備節(jié)點(diǎn),來(lái)執(zhí)行將數(shù)據(jù)備份到分布式文件系統(tǒng)的操作;而且,冷備節(jié)點(diǎn)在進(jìn)行備份時(shí),可以采用流管道的方式向分布式文件系統(tǒng)進(jìn)行傳輸,以提高傳輸效率;進(jìn)一步,還可以選擇一天中的一個(gè)隨機(jī)事件來(lái)進(jìn)行備份,從而避開(kāi)邏輯單元運(yùn)作的高峰期??蛇x的,在確定主節(jié)點(diǎn)發(fā)生異常(即步驟202)時(shí),除了可以進(jìn)行主備切換之外,還可以對(duì)主節(jié)點(diǎn)中的數(shù)據(jù)進(jìn)行恢復(fù),即該數(shù)據(jù)容災(zāi)方法還可以執(zhí)行步驟207,如下:207、調(diào)度器獲取該主節(jié)點(diǎn)的日志信息,然后執(zhí)行步驟209。例如,具體可以由Scheduler來(lái)獲取該主節(jié)點(diǎn)的日志信息,比如relaylog等。其中,該主節(jié)點(diǎn)的日志信息可以包括主節(jié)點(diǎn)更新數(shù)據(jù)的時(shí)間點(diǎn)(即主節(jié)點(diǎn)更新自身數(shù)據(jù)的時(shí)間點(diǎn)),此外,可選的,該日志信息還可以包括其他的信息,比如所執(zhí)行的事務(wù)的名稱、數(shù)據(jù)的類(lèi)型、和/或大小,等等。需說(shuō)明的是,為了避免主節(jié)點(diǎn)的日志信息中出現(xiàn)多余的數(shù)據(jù)(具體可參見(jiàn)實(shí)施例一中的說(shuō)明),可以先確定該主節(jié)點(diǎn)中的數(shù)據(jù)是否已同步至備用節(jié)點(diǎn),若是,才執(zhí)行獲取該主節(jié)點(diǎn)的日志信息的步驟(即步驟207),否則,此時(shí)可以對(duì)尚未同步的數(shù)據(jù)所對(duì)應(yīng)的日志信息進(jìn)行閃回處理??蛇x的,在對(duì)尚未同步的數(shù)據(jù)所對(duì)應(yīng)的日志信息進(jìn)行閃回處理之前,還可以對(duì)該尚未同步的數(shù)據(jù)所對(duì)應(yīng)的日志信息是否能夠被閃回進(jìn)行判斷,若可以被閃回,才執(zhí)行該對(duì)尚未同步的數(shù)據(jù)所對(duì)應(yīng)的日志信息進(jìn)行閃回處理的步驟;否則,若不能被閃回,則此時(shí)可以從該目標(biāo)節(jié)點(diǎn)中全量拉取鏡像數(shù)據(jù),以重構(gòu)該主節(jié)點(diǎn)中的數(shù)據(jù),具體可參見(jiàn)實(shí)施例一,在此不再贅述。還需說(shuō)明的是,步驟207與步驟203~206的執(zhí)行順序可以不分先后。208、調(diào)度器根據(jù)該主節(jié)點(diǎn)的日志信息對(duì)該主節(jié)點(diǎn)中的數(shù)據(jù)進(jìn)行修復(fù)。由上可知,本實(shí)施例采用對(duì)邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)進(jìn)行監(jiān)控,當(dāng)監(jiān)控到主節(jié)點(diǎn)發(fā)生異常時(shí),分別獲取多個(gè)備用節(jié)點(diǎn)的日志信息,其中,該備用節(jié)點(diǎn)的日志信息包括備用節(jié)點(diǎn)與主節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步的時(shí)間點(diǎn),然后,選擇時(shí)間點(diǎn)最接近當(dāng)前時(shí)間的備用節(jié)點(diǎn)作為目標(biāo)節(jié)點(diǎn),并將主節(jié)點(diǎn)更新為該目標(biāo)節(jié)點(diǎn),從而實(shí)現(xiàn)主備之間的切換;由于該方案的邏輯單元可以包括多個(gè)備用節(jié)點(diǎn),然后,在主節(jié)點(diǎn)發(fā)生異常時(shí),從中選擇出具有最新數(shù)據(jù)的備用節(jié)點(diǎn)作為新的主節(jié)點(diǎn),因此,可以保證切換前后,原主節(jié)點(diǎn)與新的主節(jié)點(diǎn)之間數(shù)據(jù)的一致性;而且,由于該邏輯單元只有一個(gè)主節(jié)點(diǎn),因此,不會(huì)出現(xiàn)如現(xiàn)有技術(shù)中所面臨的大規(guī)模主鍵沖突問(wèn)題,可以不在業(yè)務(wù)層對(duì)各個(gè)設(shè)備進(jìn)行區(qū)分,實(shí)現(xiàn)更為簡(jiǎn)單,可以大大提高系統(tǒng)的可用性??蛇x的,由于該方案在對(duì)原主節(jié)點(diǎn)中的數(shù)據(jù)進(jìn)行恢復(fù)時(shí),還可以對(duì)尚未同步至備用節(jié)點(diǎn)的數(shù)據(jù)所對(duì)應(yīng)的日志信息作閃回處理,因此,可以進(jìn)一步提高各節(jié)點(diǎn)間,以及切換前后數(shù)據(jù)的一致性。此外,由于該方案可以在多個(gè)備用節(jié)點(diǎn)中選擇相應(yīng)的備用節(jié)點(diǎn)作為冷備節(jié)點(diǎn),并通過(guò)該冷備節(jié)點(diǎn)將數(shù)據(jù)備份至分布式文件系統(tǒng),因此,可以大大提高數(shù)據(jù)備份的效率,以及減少數(shù)據(jù)備份時(shí)對(duì)各個(gè)節(jié)點(diǎn)運(yùn)行的影響,有利于提高整個(gè)數(shù)據(jù)容災(zāi)系統(tǒng)的性能。實(shí)施例三、在實(shí)施例二的基礎(chǔ)上,可選的,提高數(shù)據(jù)的安全性,還可以對(duì)該邏輯單元中的數(shù)據(jù)進(jìn)行異地備份,比如,若該邏輯單元位于A地,則可以在B地對(duì)該邏輯單元進(jìn)行備份,從而使得當(dāng)A地的邏輯單元發(fā)生異常,比如A地發(fā)生災(zāi)難時(shí),可以將A地邏輯單元的業(yè)務(wù)切換至B地的備份邏輯單元,等等。以下將以源邏輯單元位于A城市,備份邏輯單元位于B城市為例進(jìn)行說(shuō)明。如圖3a所示,可以將A城市邏輯單元中的數(shù)據(jù)備份至B城市,比如,具體可以將A城市邏輯單元中主節(jié)點(diǎn)的數(shù)據(jù),異步傳輸至B城市邏輯單元中的主節(jié)點(diǎn),然后由B城市邏輯單元中的主節(jié)點(diǎn)將數(shù)據(jù)同步至邏輯單元(即B城市邏輯單元)中的其他備用節(jié)點(diǎn)。當(dāng)A城市的邏輯單元發(fā)生故障,比如,當(dāng)A城市發(fā)生自然災(zāi)害如水災(zāi)或地震等,或者發(fā)生一些其他人為的災(zāi)難如戰(zhàn)爭(zhēng)或爆炸等,而導(dǎo)致該邏輯單元發(fā)生故障的時(shí)候,便可以將A城市邏輯單元的業(yè)務(wù)切換至B城市邏輯單元,并利用B城市邏輯單元中的數(shù)據(jù)對(duì)其進(jìn)行修復(fù),在等待A城市邏輯單元的數(shù)據(jù)恢復(fù)后,便可以將業(yè)務(wù)切換回A城市邏輯單元;例如,參見(jiàn)圖3b,具體可以如下:301、當(dāng)A城市邏輯單元中的業(yè)務(wù)切換到B城市邏輯單元中之后,原本業(yè)務(wù)發(fā)送至A城市邏輯單元的數(shù)據(jù)處理請(qǐng)求,也會(huì)轉(zhuǎn)發(fā)至B城市邏輯單元,即此時(shí),B城市邏輯單元中的主節(jié)點(diǎn)可以接收該數(shù)據(jù)處理請(qǐng)求,并根據(jù)該數(shù)據(jù)處理請(qǐng)求進(jìn)行數(shù)據(jù)處理。302、當(dāng)A城市邏輯單元需要進(jìn)行數(shù)據(jù)重建時(shí),可以向B城市邏輯單元發(fā)送進(jìn)行數(shù)據(jù)同步的請(qǐng)求(即請(qǐng)求數(shù)據(jù)同步)。303、B城市邏輯單元接收到該進(jìn)行數(shù)據(jù)同步的請(qǐng)求后,將該B城市邏輯單元的數(shù)據(jù)同步至A城市邏輯單元。例如,可以獲取A城市邏輯單元的全局事務(wù)標(biāo)識(shí)(GTID,GlobalTransactionID)、A城市邏輯單元中各個(gè)節(jié)點(diǎn)的日志信息、B城市邏輯單元接收到該進(jìn)行數(shù)據(jù)同步的請(qǐng)求后,將B城市邏輯單元的GTID、以及B城市邏輯單元中各個(gè)節(jié)點(diǎn)的日志信息等,基于這些GTID和日志信息將該B城市邏輯單元的數(shù)據(jù)同步至A城市邏輯單元,等等。304、當(dāng)確定A城市邏輯單元和B城市邏輯單元中的數(shù)據(jù)延遲小于預(yù)設(shè)值時(shí),將B城市邏輯單元設(shè)置為只讀,并在該延遲等于0時(shí),將業(yè)務(wù)切換回A城市邏輯單元,即此時(shí),A城市邏輯單元中的主節(jié)點(diǎn)可以接收相應(yīng)業(yè)務(wù)發(fā)送的數(shù)據(jù)處理請(qǐng)求,并根據(jù)該數(shù)據(jù)處理請(qǐng)求進(jìn)行數(shù)據(jù)處理。其中,該預(yù)設(shè)值可以根據(jù)實(shí)際應(yīng)用的需求進(jìn)行設(shè)置,在此不再贅述??梢?jiàn),本實(shí)施例不僅可以實(shí)現(xiàn)如實(shí)施例二所能實(shí)現(xiàn)的有益效果之外,還可以支持跨城容災(zāi),大大提高數(shù)據(jù)的安全性。實(shí)施例四、為了更好地實(shí)施以上方法,本發(fā)明實(shí)施例還提供一種數(shù)據(jù)容災(zāi)裝置,如圖4a所示,該數(shù)據(jù)容災(zāi)裝置包括監(jiān)控單元401、獲取單元402、選擇單元403和更新單元404,如下:(1)監(jiān)控單元401;監(jiān)控單元401,用于對(duì)邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)進(jìn)行監(jiān)控。其中,該邏輯單元可以包括主節(jié)點(diǎn)和多個(gè)備用節(jié)點(diǎn)。這些節(jié)點(diǎn)可以部署在同一機(jī)房中,也可以部署在不同機(jī)房中,可以位于同一區(qū)域,也可以是位于不同區(qū)域,具體可參見(jiàn)前面的實(shí)施例,在此不再贅述。其中,對(duì)邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)進(jìn)行監(jiān)控的方式可以有多種,比如,可以對(duì)數(shù)據(jù)庫(kù)實(shí)例,如mysql實(shí)例進(jìn)行監(jiān)控、對(duì)各個(gè)節(jié)點(diǎn)所執(zhí)行的事務(wù)進(jìn)行監(jiān)控、和/或?qū)壿媶卧獌?nèi)各個(gè)節(jié)點(diǎn)的硬件狀態(tài)和核心程序運(yùn)行狀態(tài)進(jìn)行監(jiān)控,等等,例如,具體可以如下:監(jiān)控單元401,具體可以用于對(duì)邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)的數(shù)據(jù)庫(kù)實(shí)例的運(yùn)行進(jìn)行監(jiān)控,比如,可以如下:分別對(duì)邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)中的數(shù)據(jù)庫(kù)實(shí)例進(jìn)行周期性訪問(wèn),若該數(shù)據(jù)庫(kù)實(shí)例不可讀和/或不可寫(xiě),則確定相應(yīng)的節(jié)點(diǎn)發(fā)生異常。和/或,監(jiān)控單元401,具體可以用于對(duì)邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)所執(zhí)行的事務(wù)進(jìn)行監(jiān)控,比如,可以如下:分別對(duì)邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)從主節(jié)點(diǎn)上拉取事務(wù)線程的工作狀態(tài)進(jìn)行監(jiān)控;若該工作狀態(tài)指示當(dāng)前處于非工作狀態(tài),比如,如該工作狀態(tài)為“NO”,則確定相應(yīng)的節(jié)點(diǎn)發(fā)生異常。和/或,監(jiān)控單元401,具體可以用于對(duì)邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)的硬件狀態(tài)和核心程序運(yùn)行狀態(tài)進(jìn)行監(jiān)控,比如,可以如下:定時(shí)獲取邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)的硬件狀態(tài)信息、以及核心程序運(yùn)行狀態(tài)信息,根據(jù)該硬件狀態(tài)信息確定節(jié)點(diǎn)發(fā)生硬件故障時(shí),和/或,根據(jù)該核心程序運(yùn)行狀態(tài)信息確定節(jié)點(diǎn)發(fā)生軟件故障時(shí),確定相應(yīng)的節(jié)點(diǎn)發(fā)生異常。(2)獲取單元402;獲取單元402,用于在監(jiān)控到該主節(jié)點(diǎn)發(fā)生異常時(shí),分別獲取該多個(gè)備用節(jié)點(diǎn)的日志信息。其中,該備用節(jié)點(diǎn)的日志信息可以包括備用節(jié)點(diǎn)與主節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步的時(shí)間點(diǎn),此外,可選的,該日志信息還可以包括其他的信息,比如所執(zhí)行的事務(wù)的名稱、數(shù)據(jù)的類(lèi)型、和/或大小,等等。該備用節(jié)點(diǎn)的日志信息的表現(xiàn)形式可以有多種,比如,具體可以為二進(jìn)制日志(binlog)等。(3)選擇單元403;選擇單元403,用于選擇該時(shí)間點(diǎn)最接近當(dāng)前時(shí)間的備用節(jié)點(diǎn)作為目標(biāo)節(jié)點(diǎn)。(4)更新單元404;更新單元404,用于將主節(jié)點(diǎn)更新為該目標(biāo)節(jié)點(diǎn)。即,更新單元404可以將該目標(biāo)節(jié)點(diǎn)作為新的主節(jié)點(diǎn),從而將原主節(jié)點(diǎn)中的業(yè)務(wù)切換至該目標(biāo)節(jié)點(diǎn)上??蛇x的,在監(jiān)控到該主節(jié)點(diǎn)發(fā)生異常時(shí),除了直接觸發(fā)獲取單元402執(zhí)行“獲取該多個(gè)備用節(jié)點(diǎn)的日志信息”操作之外,還可以通過(guò)其他的方式來(lái)觸發(fā)執(zhí)行該“獲取該多個(gè)備用節(jié)點(diǎn)的日志信息”的操作,比如,可以將該主節(jié)點(diǎn)降級(jí)為備用節(jié)點(diǎn),從而使得該邏輯單元中不存在主節(jié)點(diǎn),這樣,該邏輯單元便會(huì)生成指示不存在主節(jié)點(diǎn)的狀態(tài)信息,而后續(xù)調(diào)度器若監(jiān)控到該狀態(tài)信息,便可以停止備用節(jié)點(diǎn)的同步日志(binlog)的I/O接口,并觸發(fā)獲取單元402執(zhí)行該“獲取該多個(gè)備用節(jié)點(diǎn)的日志信息”的操作;即如圖4b所示,該數(shù)據(jù)容災(zāi)裝置還可以包括處理單元405,如下:該處理單元405,具體可以用于在監(jiān)控單元401監(jiān)控到該主節(jié)點(diǎn)發(fā)生異常時(shí),將該主節(jié)點(diǎn)降級(jí)為備用節(jié)點(diǎn),停止備用節(jié)點(diǎn)的同步日志(binlog)的I/O接口,并觸發(fā)獲取單元402執(zhí)行分別獲取該多個(gè)備用節(jié)點(diǎn)的日志信息的操作。此外,監(jiān)控到該主節(jié)點(diǎn)發(fā)生異常時(shí),還可以對(duì)主節(jié)點(diǎn)中的數(shù)據(jù)進(jìn)行修復(fù),即如圖4b所示,該數(shù)據(jù)容災(zāi)裝置還可以包括修復(fù)單元406,如下:該修復(fù)單元406,可以用于在監(jiān)控單元401監(jiān)控到該主節(jié)點(diǎn)發(fā)生異常時(shí),獲取該主節(jié)點(diǎn)的日志信息,根據(jù)該主節(jié)點(diǎn)的日志信息對(duì)該主節(jié)點(diǎn)中的數(shù)據(jù)進(jìn)行修復(fù)。其中,該主節(jié)點(diǎn)的日志信息可以包括主節(jié)點(diǎn)更新數(shù)據(jù)的時(shí)間點(diǎn)(即主節(jié)點(diǎn)更新自身數(shù)據(jù)的時(shí)間點(diǎn)),此外,可選的,該日志信息還可以包括其他的信息,比如所執(zhí)行的事務(wù)的名稱、數(shù)據(jù)的類(lèi)型、和/或大小,等等。該主節(jié)點(diǎn)的日志信息的表現(xiàn)形式可以有多種,比如,具體可以為二進(jìn)制日志(binlog)等。需說(shuō)明的是,為了避免主節(jié)點(diǎn)的日志信息中出現(xiàn)多余的數(shù)據(jù)(具體可參見(jiàn)實(shí)施例一中的說(shuō)明),可以先確定該主節(jié)點(diǎn)中的數(shù)據(jù)是否已同步至備用節(jié)點(diǎn),若是,才執(zhí)行獲取該主節(jié)點(diǎn)的日志信息的操作,否則,此時(shí)可以對(duì)尚未同步的數(shù)據(jù)所對(duì)應(yīng)的日志信息進(jìn)行閃回處理。即:該修復(fù)單元406,還可以用于確定主節(jié)點(diǎn)中的數(shù)據(jù)是否已同步至備用節(jié)點(diǎn),若是,則執(zhí)行獲取該主節(jié)點(diǎn)的日志信息的操作;若否,則對(duì)尚未同步的數(shù)據(jù)所對(duì)應(yīng)的日志信息進(jìn)行閃回處理??蛇x的,為了減少無(wú)效操作,在對(duì)尚未同步的數(shù)據(jù)所對(duì)應(yīng)的日志信息進(jìn)行閃回處理之前,還可以對(duì)該尚未同步的數(shù)據(jù)所對(duì)應(yīng)的日志信息是否能夠被閃回進(jìn)行判斷,在確定可以被閃回時(shí)才進(jìn)行閃回處理,即:該修復(fù)單元406,還可以用于確定尚未同步的數(shù)據(jù)所對(duì)應(yīng)的日志信息是否能夠被閃回;若是,則執(zhí)行該對(duì)尚未同步的數(shù)據(jù)所對(duì)應(yīng)的日志信息進(jìn)行閃回處理的操作;若否,則從該目標(biāo)節(jié)點(diǎn)中全量拉取鏡像數(shù)據(jù),以重構(gòu)該主節(jié)點(diǎn)中的數(shù)據(jù),具體可參見(jiàn)實(shí)施例一,在此不再贅述。其中,該邏輯單元可以是預(yù)設(shè)的,也可以由系統(tǒng)根據(jù)具體的服務(wù)請(qǐng)求進(jìn)行建立,即如圖4b所示,該數(shù)據(jù)容災(zāi)裝置還可以包括建立單元407,如下:該建立單元407,可以用于獲取接入網(wǎng)關(guān)發(fā)送的服務(wù)請(qǐng)求;根據(jù)該服務(wù)請(qǐng)求選擇多個(gè)節(jié)點(diǎn),根據(jù)選擇的節(jié)點(diǎn)創(chuàng)建邏輯單元,并確定邏輯單元中各個(gè)節(jié)點(diǎn)的主備關(guān)系,使得該邏輯單元包括主節(jié)點(diǎn)和多個(gè)備用節(jié)點(diǎn)??蛇x的,為了提高數(shù)據(jù)的安全性,在將主節(jié)點(diǎn)中的數(shù)據(jù)同步到各個(gè)備用節(jié)點(diǎn)的同時(shí),還可以將數(shù)據(jù)備份到其他的存儲(chǔ)設(shè)備,比如分布式文件系統(tǒng)中,即如圖4b所示,該數(shù)據(jù)容災(zāi)裝置還可以包括備份單元408,如下:該備份單元408,可以用于在該建立單元407確定邏輯單元中各個(gè)節(jié)點(diǎn)的主備關(guān)系之后,按照預(yù)設(shè)策略從備用節(jié)點(diǎn)中選擇相應(yīng)的節(jié)點(diǎn),作為冷備節(jié)點(diǎn),通過(guò)該冷備節(jié)點(diǎn)以管道流的方式將數(shù)據(jù)備份至分布式文件系統(tǒng)??蛇x的,為了提高數(shù)據(jù)的安全性,還可以對(duì)該邏輯單元中的數(shù)據(jù)進(jìn)行異地備份,比如,若該邏輯單元位于A地,則可以在B地對(duì)該邏輯單元進(jìn)行備份,從而使得當(dāng)A地的邏輯單元發(fā)生異常,比如A地發(fā)生災(zāi)難時(shí),可以將A地邏輯單元的業(yè)務(wù)切換至B地的備份邏輯單元;即如圖4b所示,該數(shù)據(jù)容災(zāi)裝置還可以包括異地容災(zāi)單元409,如下:該異地容災(zāi)單元409,用于對(duì)該邏輯單元進(jìn)行異地備份,得到備用邏輯單元,在該邏輯單元發(fā)生故障時(shí),將該邏輯單元的業(yè)務(wù)切換至該備用邏輯單元中。此外,還可以利用B地備份的數(shù)據(jù)對(duì)A地的邏輯單元進(jìn)行數(shù)據(jù)重建,即:該異地容災(zāi)單元409,還可以用于將該備用邏輯單元中各個(gè)節(jié)點(diǎn)的數(shù)據(jù)同步至該邏輯單元相應(yīng)節(jié)點(diǎn)中;確定該邏輯單元和備用邏輯單元中各個(gè)節(jié)點(diǎn)的數(shù)據(jù)延遲小于預(yù)設(shè)值時(shí),將該備用邏輯單元設(shè)置為只讀,并在確定該延遲等于0,將該業(yè)務(wù)切換回該邏輯單元中。其中,該預(yù)設(shè)值可以根據(jù)實(shí)際應(yīng)用的需求進(jìn)行設(shè)置,在此不再贅述。具體實(shí)施時(shí),以上各個(gè)單元可以作為獨(dú)立的實(shí)體來(lái)實(shí)現(xiàn),也可以進(jìn)行任意組合,作為同一或若干個(gè)實(shí)體來(lái)實(shí)現(xiàn),比如,參見(jiàn)實(shí)施例二和三,該數(shù)據(jù)容災(zāi)裝置可以包括代理服務(wù)器、調(diào)度器和邏輯單元,等等。以上各個(gè)單元的具體實(shí)施可參見(jiàn)前面的方法實(shí)施例,在此不再贅述。由上可知,本實(shí)施例的數(shù)據(jù)容災(zāi)裝置中的監(jiān)控單元401可以對(duì)邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)進(jìn)行監(jiān)控,當(dāng)監(jiān)控到主節(jié)點(diǎn)發(fā)生異常時(shí),由獲取單元402分別獲取多個(gè)備用節(jié)點(diǎn)的日志信息,其中,備用節(jié)點(diǎn)的日志信息包括備用節(jié)點(diǎn)與主節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步的時(shí)間點(diǎn),然后,由選擇單元403選擇時(shí)間點(diǎn)最接近當(dāng)前時(shí)間的備用節(jié)點(diǎn)作為目標(biāo)節(jié)點(diǎn),并由更新單元404將主節(jié)點(diǎn)更新為該目標(biāo)節(jié)點(diǎn),從而實(shí)現(xiàn)主備之間的切換;由于該方案的邏輯單元可以包括多個(gè)備用節(jié)點(diǎn),然后,在主節(jié)點(diǎn)發(fā)生異常時(shí),從中選擇出具有最新數(shù)據(jù)的備用節(jié)點(diǎn)作為新的主節(jié)點(diǎn),因此,可以保證切換前后,原主節(jié)點(diǎn)與新的主節(jié)點(diǎn)之間數(shù)據(jù)的一致性;而且,由于該邏輯單元只有一個(gè)主節(jié)點(diǎn),因此,不會(huì)出現(xiàn)如現(xiàn)有技術(shù)中所面臨的大規(guī)模主鍵沖突問(wèn)題,可以不在業(yè)務(wù)層對(duì)各個(gè)設(shè)備進(jìn)行區(qū)分,實(shí)現(xiàn)更為簡(jiǎn)單,可以大大提高系統(tǒng)的可用性。實(shí)施例五、相應(yīng)的,本發(fā)明實(shí)施例還提供一種數(shù)據(jù)容災(zāi)系統(tǒng),包括本發(fā)明實(shí)施例所提供的任一種數(shù)據(jù)容災(zāi)裝置,具體可參見(jiàn)實(shí)施例四,例如,可以如下:數(shù)據(jù)容災(zāi)裝置,用于對(duì)邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)進(jìn)行監(jiān)控,當(dāng)監(jiān)控到該主節(jié)點(diǎn)發(fā)生異常時(shí),分別獲取該多個(gè)備用節(jié)點(diǎn)的日志信息,該備用節(jié)點(diǎn)的日志信息包括備用節(jié)點(diǎn)與主節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步的時(shí)間點(diǎn),選擇該時(shí)間點(diǎn)最接近當(dāng)前時(shí)間的備用節(jié)點(diǎn)作為目標(biāo)節(jié)點(diǎn),將主節(jié)點(diǎn)更新為該目標(biāo)節(jié)點(diǎn)。例如,該數(shù)據(jù)容災(zāi)裝置,具體可以用于對(duì)邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)的數(shù)據(jù)庫(kù)實(shí)例的運(yùn)行、邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)所執(zhí)行的事務(wù)、和/或邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)的硬件狀態(tài)和核心程序運(yùn)行狀態(tài)進(jìn)行監(jiān)控,等等。該數(shù)據(jù)容災(zāi)裝置的具體實(shí)施可參見(jiàn)前面的實(shí)施例,在此不再贅述。其中,該數(shù)據(jù)容災(zāi)裝置可以為多個(gè),具體數(shù)量可以根據(jù)實(shí)際應(yīng)用的需求而定。此外,該數(shù)據(jù)容災(zāi)系統(tǒng)還可以包括其他的設(shè)備,比如,還可以包括接入網(wǎng)關(guān),如下:該接入網(wǎng)關(guān),用于接收用戶設(shè)備發(fā)送的連接建立請(qǐng)求,根據(jù)該連接建立請(qǐng)求獲取多個(gè)數(shù)據(jù)容災(zāi)裝置的負(fù)載信息,根據(jù)該負(fù)載信息選擇匹配的數(shù)據(jù)容災(zāi)裝置,建立該用戶設(shè)備與匹配到的數(shù)據(jù)容災(zāi)裝置之間的連接關(guān)系;以及,接收用戶設(shè)備發(fā)送的數(shù)據(jù)處理請(qǐng)求,基于該連接關(guān)系將該數(shù)據(jù)處理請(qǐng)求發(fā)送至相應(yīng)的數(shù)據(jù)容災(zāi)裝置中。該數(shù)據(jù)容災(zāi)系統(tǒng)還可以包括用戶設(shè)備,用于向接入網(wǎng)關(guān)發(fā)送連接建立請(qǐng)求,以及發(fā)送數(shù)據(jù)處理請(qǐng)求等。以上各個(gè)設(shè)備的具體操作可參見(jiàn)前面的實(shí)施例,在此不再贅述。由于該數(shù)據(jù)容災(zāi)系統(tǒng)可以包括本發(fā)明實(shí)施例所提供的任一種數(shù)據(jù)容災(zāi)裝置,因此,可以實(shí)現(xiàn)本發(fā)明實(shí)施例所提供的任意一種數(shù)據(jù)容災(zāi)裝置所能實(shí)現(xiàn)的有益效果,相機(jī)前面的實(shí)施例,在此不再贅述。實(shí)施例六、此外,本發(fā)明實(shí)施例還提供一種服務(wù)器,如圖5所示,其示出了本發(fā)明實(shí)施例所涉及的服務(wù)器的結(jié)構(gòu)示意圖,具體來(lái)講:該服務(wù)器可以包括一個(gè)或者一個(gè)以上處理核心的處理器501、一個(gè)或一個(gè)以上計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的存儲(chǔ)器502、射頻(RadioFrequency,RF)電路503、電源504、輸入單元505、以及顯示單元506等部件。本領(lǐng)域技術(shù)人員可以理解,圖5中示出的服務(wù)器結(jié)構(gòu)并不構(gòu)成對(duì)服務(wù)器的限定,可以包括比圖示更多或更少的部件,或者組合某些部件,或者不同的部件布置。其中:處理器501是該服務(wù)器的控制中心,利用各種接口和線路連接整個(gè)服務(wù)器的各個(gè)部分,通過(guò)運(yùn)行或執(zhí)行存儲(chǔ)在存儲(chǔ)器502內(nèi)的軟件程序和/或模塊,以及調(diào)用存儲(chǔ)在存儲(chǔ)器502內(nèi)的數(shù)據(jù),執(zhí)行服務(wù)器的各種功能和處理數(shù)據(jù),從而對(duì)服務(wù)器進(jìn)行整體監(jiān)控??蛇x的,處理器501可包括一個(gè)或多個(gè)處理核心;優(yōu)選的,處理器501可集成應(yīng)用處理器和調(diào)制解調(diào)處理器,其中,應(yīng)用處理器主要處理操作系統(tǒng)、用戶界面和應(yīng)用程序等,調(diào)制解調(diào)處理器主要處理無(wú)線通信??梢岳斫獾氖?,上述調(diào)制解調(diào)處理器也可以不集成到處理器501中。存儲(chǔ)器502可用于存儲(chǔ)軟件程序以及模塊,處理器501通過(guò)運(yùn)行存儲(chǔ)在存儲(chǔ)器502的軟件程序以及模塊,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理。存儲(chǔ)器502可主要包括存儲(chǔ)程序區(qū)和存儲(chǔ)數(shù)據(jù)區(qū),其中,存儲(chǔ)程序區(qū)可存儲(chǔ)操作系統(tǒng)、至少一個(gè)功能所需的應(yīng)用程序(比如聲音播放功能、圖像播放功能等)等;存儲(chǔ)數(shù)據(jù)區(qū)可存儲(chǔ)根據(jù)服務(wù)器的使用所創(chuàng)建的數(shù)據(jù)等。此外,存儲(chǔ)器502可以包括高速隨機(jī)存取存儲(chǔ)器,還可以包括非易失性存儲(chǔ)器,例如至少一個(gè)磁盤(pán)存儲(chǔ)器件、閃存器件、或其他易失性固態(tài)存儲(chǔ)器件。相應(yīng)地,存儲(chǔ)器502還可以包括存儲(chǔ)器控制器,以提供處理器501對(duì)存儲(chǔ)器502的訪問(wèn)。RF電路503可用于收發(fā)信息過(guò)程中,信號(hào)的接收和發(fā)送,特別地,將基站的下行信息接收后,交由一個(gè)或者一個(gè)以上處理器501處理;另外,將涉及上行的數(shù)據(jù)發(fā)送給基站。通常,RF電路503包括但不限于天線、至少一個(gè)放大器、調(diào)諧器、一個(gè)或多個(gè)振蕩器、用戶身份模塊(SIM)卡、收發(fā)信機(jī)、耦合器、低噪聲放大器(LNA,LowNoiseAmplifier)、雙工器等。此外,RF電路503還可以通過(guò)無(wú)線通信與網(wǎng)絡(luò)和其他設(shè)備通信。所述無(wú)線通信可以使用任一通信標(biāo)準(zhǔn)或協(xié)議,包括但不限于全球移動(dòng)通訊系統(tǒng)(GSM,GlobalSystemofMobilecommunication)、通用分組無(wú)線服務(wù)(GPRS,GeneralPacketRadioService)、碼分多址(CDMA,CodeDivisionMultipleAccess)、寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)、長(zhǎng)期演進(jìn)(LTE,LongTermEvolution)、電子郵件、短消息服務(wù)(SMS,ShortMessagingService)等。服務(wù)器還包括給各個(gè)部件供電的電源504(比如電池),優(yōu)選的,電源504可以通過(guò)電源管理系統(tǒng)與處理器501邏輯相連,從而通過(guò)電源管理系統(tǒng)實(shí)現(xiàn)管理充電、放電、以及功耗管理等功能。電源504還可以包括一個(gè)或一個(gè)以上的直流或交流電源、再充電系統(tǒng)、電源故障檢測(cè)電路、電源轉(zhuǎn)換器或者逆變器、電源狀態(tài)指示器等任意組件。該服務(wù)器還可包括輸入單元505,該輸入單元505可用于接收輸入的數(shù)字或字符信息,以及產(chǎn)生與用戶設(shè)置以及功能控制有關(guān)的鍵盤(pán)、鼠標(biāo)、操作桿、光學(xué)或者軌跡球信號(hào)輸入。具體地,在一個(gè)具體的實(shí)施例中,輸入單元505可包括觸敏表面以及其他輸入設(shè)備。觸敏表面,也稱為觸摸顯示屏或者觸控板,可收集用戶在其上或附近的觸摸操作(比如用戶使用手指、觸筆等任何適合的物體或附件在觸敏表面上或在觸敏表面附近的操作),并根據(jù)預(yù)先設(shè)定的程式驅(qū)動(dòng)相應(yīng)的連接裝置??蛇x的,觸敏表面可包括觸摸檢測(cè)裝置和觸摸控制器兩個(gè)部分。其中,觸摸檢測(cè)裝置檢測(cè)用戶的觸摸方位,并檢測(cè)觸摸操作帶來(lái)的信號(hào),將信號(hào)傳送給觸摸控制器;觸摸控制器從觸摸檢測(cè)裝置上接收觸摸信息,并將它轉(zhuǎn)換成觸點(diǎn)坐標(biāo),再送給處理器501,并能接收處理器501發(fā)來(lái)的命令并加以執(zhí)行。此外,可以采用電阻式、電容式、紅外線以及表面聲波等多種類(lèi)型實(shí)現(xiàn)觸敏表面。除了觸敏表面,輸入單元505還可以包括其他輸入設(shè)備。具體地,其他輸入設(shè)備可以包括但不限于物理鍵盤(pán)、功能鍵(比如音量控制按鍵、開(kāi)關(guān)按鍵等)、軌跡球、鼠標(biāo)、操作桿等中的一種或多種。該服務(wù)器還可包括顯示單元506,該顯示單元506可用于顯示由用戶輸入的信息或提供給用戶的信息以及服務(wù)器的各種圖形用戶接口,這些圖形用戶接口可以由圖形、文本、圖標(biāo)、視頻和其任意組合來(lái)構(gòu)成。顯示單元506可包括顯示面板,可選的,可以采用液晶顯示器(LCD,LiquidCrystalDisplay)、有機(jī)發(fā)光二極管(OLED,OrganicLight-EmittingDiode)等形式來(lái)配置顯示面板。進(jìn)一步的,觸敏表面可覆蓋顯示面板,當(dāng)觸敏表面檢測(cè)到在其上或附近的觸摸操作后,傳送給處理器501以確定觸摸事件的類(lèi)型,隨后處理器501根據(jù)觸摸事件的類(lèi)型在顯示面板上提供相應(yīng)的視覺(jué)輸出。雖然在圖5中,觸敏表面與顯示面板是作為兩個(gè)獨(dú)立的部件來(lái)實(shí)現(xiàn)輸入和輸入功能,但是在某些實(shí)施例中,可以將觸敏表面與顯示面板集成而實(shí)現(xiàn)輸入和輸出功能。盡管未示出,服務(wù)器還可以包括攝像頭、藍(lán)牙模塊等,在此不再贅述。具體在本實(shí)施例中,服務(wù)器中的處理器501會(huì)按照如下的指令,將一個(gè)或一個(gè)以上的應(yīng)用程序的進(jìn)程對(duì)應(yīng)的可執(zhí)行文件加載到存儲(chǔ)器502中,并由處理器501來(lái)運(yùn)行存儲(chǔ)在存儲(chǔ)器502中的應(yīng)用程序,從而實(shí)現(xiàn)各種功能,如下:對(duì)邏輯單元(set)內(nèi)各個(gè)節(jié)點(diǎn)進(jìn)行監(jiān)控,當(dāng)監(jiān)控到該主節(jié)點(diǎn)發(fā)生異常時(shí),分別獲取該多個(gè)備用節(jié)點(diǎn)的日志信息,該備用節(jié)點(diǎn)的日志信息包括備用節(jié)點(diǎn)與主節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步的時(shí)間點(diǎn),選擇該時(shí)間點(diǎn)最接近當(dāng)前時(shí)間的備用節(jié)點(diǎn)作為目標(biāo)節(jié)點(diǎn),將主節(jié)點(diǎn)更新為該目標(biāo)節(jié)點(diǎn)。其中,該邏輯單元可以是預(yù)設(shè)的,也可以由系統(tǒng)根據(jù)具體的服務(wù)請(qǐng)求進(jìn)行建立,即處理器501還可以實(shí)現(xiàn)如下功能:獲取接入網(wǎng)關(guān)發(fā)送的服務(wù)請(qǐng)求,根據(jù)該服務(wù)請(qǐng)求選擇多個(gè)節(jié)點(diǎn),根據(jù)選擇的節(jié)點(diǎn)創(chuàng)建邏輯單元,并確定邏輯單元中各個(gè)節(jié)點(diǎn)的主備關(guān)系,使得該邏輯單元包括主節(jié)點(diǎn)和多個(gè)備用節(jié)點(diǎn)??蛇x的,為了提高數(shù)據(jù)的安全性,在將主節(jié)點(diǎn)中的數(shù)據(jù)同步到各個(gè)備用節(jié)點(diǎn)的同時(shí),還可以將數(shù)據(jù)備份到其他的存儲(chǔ)設(shè)備,比如分布式文件系統(tǒng)中,這樣,當(dāng)該邏輯單元中的節(jié)點(diǎn)發(fā)生故障時(shí),便可以基于當(dāng)天的鏡像文件以及指定時(shí)間點(diǎn)的日志信息,將該邏輯單元節(jié)點(diǎn)中的數(shù)據(jù)快速恢復(fù)到指定時(shí)間點(diǎn)。即,處理器501還可以實(shí)現(xiàn)如下功能:按照預(yù)設(shè)策略從備用節(jié)點(diǎn)中選擇相應(yīng)的節(jié)點(diǎn),作為冷備節(jié)點(diǎn),通過(guò)該冷備節(jié)點(diǎn)以管道流的方式將數(shù)據(jù)備份至分布式文件系統(tǒng)??蛇x的,為了提高數(shù)據(jù)的安全性,還可以對(duì)該邏輯單元中的數(shù)據(jù)進(jìn)行異地備份,從而使得源邏輯單元發(fā)生異常時(shí),可以將源邏輯單元的業(yè)務(wù)切換至備用邏輯單元;即處理器501還可以實(shí)現(xiàn)如下功能:對(duì)該邏輯單元進(jìn)行異地備份,得到備用邏輯單元,在該邏輯單元發(fā)生故障時(shí),將該邏輯單元的業(yè)務(wù)切換至該備用邏輯單元中。此外,還可以利用備用邏輯單元對(duì)A地的邏輯單元進(jìn)行數(shù)據(jù)重建,即處理器501還可以實(shí)現(xiàn)如下功能:將該備用邏輯單元中各個(gè)節(jié)點(diǎn)的數(shù)據(jù)同步至該邏輯單元相應(yīng)節(jié)點(diǎn)中,確定該邏輯單元和備用邏輯單元中各個(gè)節(jié)點(diǎn)的數(shù)據(jù)延遲小于預(yù)設(shè)值時(shí),將該備用邏輯單元設(shè)置為只讀,在確定該延遲等于0時(shí),將該業(yè)務(wù)切換回該邏輯單元中。其中,該預(yù)設(shè)值可以根據(jù)實(shí)際應(yīng)用的需求進(jìn)行設(shè)置,在此不再贅述。由上可知,本實(shí)施例的服務(wù)器可以對(duì)邏輯單元內(nèi)各個(gè)節(jié)點(diǎn)進(jìn)行監(jiān)控,當(dāng)監(jiān)控到主節(jié)點(diǎn)發(fā)生異常時(shí),分別獲取多個(gè)備用節(jié)點(diǎn)的日志信息,其中,備用節(jié)點(diǎn)的日志信息包括備用節(jié)點(diǎn)與主節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步的時(shí)間點(diǎn),然后,選擇時(shí)間點(diǎn)最接近當(dāng)前時(shí)間的備用節(jié)點(diǎn)作為目標(biāo)節(jié)點(diǎn),并將主節(jié)點(diǎn)更新為該目標(biāo)節(jié)點(diǎn),從而實(shí)現(xiàn)主備之間的切換;由于該方案的邏輯單元可以包括多個(gè)備用節(jié)點(diǎn),然后,在主節(jié)點(diǎn)發(fā)生異常時(shí),從中選擇出具有最新數(shù)據(jù)的備用節(jié)點(diǎn)作為新的主節(jié)點(diǎn),因此,可以保證切換前后,原主節(jié)點(diǎn)與新的主節(jié)點(diǎn)之間數(shù)據(jù)的一致性;而且,由于該邏輯單元只有一個(gè)主節(jié)點(diǎn),因此,不會(huì)出現(xiàn)如現(xiàn)有技術(shù)中所面臨的大規(guī)模主鍵沖突問(wèn)題,可以不在業(yè)務(wù)層對(duì)各個(gè)設(shè)備進(jìn)行區(qū)分,實(shí)現(xiàn)更為簡(jiǎn)單,可以大大提高系統(tǒng)的可用性。本領(lǐng)域普通技術(shù)人員可以理解上述實(shí)施例的各種方法中的全部或部分步驟是可以通過(guò)程序來(lái)指令相關(guān)的硬件來(lái)完成,該程序可以存儲(chǔ)于一計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,存儲(chǔ)介質(zhì)可以包括:只讀存儲(chǔ)器(ROM,ReadOnlyMemory)、隨機(jī)存取記憶體(RAM,RandomAccessMemory)、磁盤(pán)或光盤(pán)等。以上對(duì)本發(fā)明實(shí)施例所提供的一種數(shù)據(jù)容災(zāi)方法、裝置和系統(tǒng)進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō)明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說(shuō)明書(shū)內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。當(dāng)前第1頁(yè)1 2 3 當(dāng)前第1頁(yè)1 2 3