本發(fā)明涉及數據庫領域,尤其涉及一種實現數據庫高可用的方法、裝置和系統(tǒng)。
背景技術:
目前,數據庫市場主要分為三大陣營,包括傳統(tǒng)關系數據庫(OldSQL)、新型數據庫(NewSQL)和非關系型數據庫(NoSQL)。從技術角度看,OldSQL的典型特征是行存儲和關系型。目前,NewSQL和NoSQL獲得了極大的發(fā)展,但主要應用在互聯(lián)網領域,在傳統(tǒng)領域的核心系統(tǒng)中,仍以傳統(tǒng)關系數據庫為主。為了實現數據庫核心系統(tǒng)的高性能、高可靠和多數據類型的處理要求,需要實現數據庫的高可用性。
目前實現數據庫高可用的方案主要有以下兩種,第一種是主從方式,第二種是分布式集群方式。
主從方式是最常用的提高數據庫讀取性能的方式,特別是讀訪問請求遠遠大于寫訪問請求的應用環(huán)境中,因此提高讀的可用性是首當其中的;對于主從方式,主機只有一個,而從機的個數大于等于1;所有的寫操作都通過同一臺主機實現,然后該主機會把該寫操作復制到其他從機上,讀操作可以通過訪問任意一個從機實現;在主機出現故障之后,從機自動提升為主機,并繼續(xù)提供服務。
圖1為現有技術中利用主從方式實現數據庫高可用的架構示意圖,如圖1所示,該架構包括一個主機和三個從機,該主機記為主機A,這三個從機分別記為從機A、從機B和從機C;示例性地,當從機C出現故障時,數據庫的讀寫操作都不會中斷,在從機C恢復正常后,從主機A自動同步丟失的數據,進 而可以重新工作;當主機A出現故障時,自動將一個從機提升為主機,之后繼續(xù)提供服務。
利用主從方式實現數據庫高可用的方案中存在以下缺點:在寫操作請求比較頻繁時,主機接收寫操作請求的性能容易出現瓶頸。
在分布式集群方式實現數據庫高可用的方案中,多個主機協(xié)同工作,每個主機運行一個或幾個服務,各個主機運行的服務互不相同,每個主機為運行的每個服務定義一個或多個備用主機,當每個主機出現故障時,運行在其上的服務就可以被對應的備用主機接管。
圖2為現有技術中利用分布式集群方式實現數據庫高可用的架構示意圖,如圖2所示,該架構包括三個主機,這三個主機分別記為主機a、主機b和主機c,每個主機各自運行一個服務,主機a是主機b的備用主機,主機b是主機c的備用主機,主機c是主機a的備用主機;當主機a、主機b或主機c出現故障時,可以在相應的備用主機上運行服務,當出現故障的主機恢復運行時,可以從備用主機反向同步相應數據。
利用分布式集群方式實現數據庫高可用的方案中存在以下缺點:在接收到寫訪問請求時,最多只能在兩個主機上實現相應的寫操作,如此,降低了寫操作的可用性。
技術實現要素:
為解決上述技術問題,本發(fā)明實施例期望提供一種實現數據庫高可用的方法、裝置和系統(tǒng),采用多份數據冗余來提高數據存儲的安全性;同時還都能夠對外提供讀寫服務。
本發(fā)明的技術方案是這樣實現的:
本發(fā)明實施例提供了一種實現數據庫高可用的方法,數據庫用于使用至少兩個主機來存儲數據,所述數據庫的數據變更請求用于被發(fā)送至一個處于空閑狀態(tài)的主機;所述方法包括:
每個主機在接收到數據變更請求時,基于所述數據變更請求,對自身存儲 的數據進行變更;將自身的數據變更信息發(fā)送至其余各個主機;
每個主機在接收到其他主機的數據變更信息時,基于所接收到的數據變更信息,對自身存儲的數據進行變更。
上述方案中,所述將自身的數據變更信息發(fā)送至其余各個主機包括:將自身的數據變更信息通過廣播發(fā)送至其余各個主機。
上述方案中,每個主機與一個對應的分布式緩存節(jié)點形成通信連接;
所述將自身的數據變更信息發(fā)送至其余各個主機包括:將自身的數據變更信息上傳至與自身形成通信連接的分布式緩存節(jié)點中,將分布式緩存節(jié)點中存儲的數據變更信息通過廣播發(fā)送至與其余各個主機形成通信連接的分布式緩存節(jié)點;與其余每個主機形成通信連接的分布式緩存節(jié)點將接收到的數據變更信息發(fā)送至對應的主機。
上述方案中,所述將分布式緩存節(jié)點中存儲的數據變更信息通過廣播發(fā)送至與其余各個主機形成通信連接的分布式緩存節(jié)點,包括:利用消息中間件將分布式緩存節(jié)點中存儲的數據變更信息通過廣播發(fā)送至與其余各個主機形成通信連接的分布式緩存節(jié)點。
上述方案中,每個主機與一個對應的分布式緩存節(jié)點形成通信連接;
在與上傳自身的數據變更信息的主機對應的分布式緩存節(jié)點接收數據變更信息之后,所述方法還包括:將對應的主機標記為已同步主機,將其余每個主機標記為未同步主機;
在每個主機基于所接收到的數據變更信息,對自身存儲的數據進行變更后,所述方法還包括:每個主機向對應的分布式緩存節(jié)點發(fā)送主機標記通知;每個分布式緩存節(jié)點在收到主機標記通知后,將對應的主機標記為已同步主機;
所述方法還包括:每個已同步主機在接收到數據訪問請求時,按照所述數據訪問請求執(zhí)行對自身存儲的數據的相應訪問操作;每個未同步主機在接收到數據訪問請求時,先基于從其他主機接收的數據變更信息,對自身存儲的數據進行變更,之后,按照所述數據訪問請求執(zhí)行對自身存儲的數據的相應訪問操作。
上述方案中,在未同步主機按照所述數據訪問請求執(zhí)行對自身存儲的數據的相應訪問操作之后,所述方法還包括:將對應的未同步主機標記為已同步主機。
本發(fā)明實施例還提供了另一種實現數據庫高可用的方法,數據庫用于使用至少兩個主機來存儲數據,數據庫的數據變更請求用于被發(fā)送至一個處于空閑狀態(tài)的主機;所述方法包括:
設置集群組件,所述集群組件分別連接數據庫使用的各個主機;
集群組件在接收到數據變更請求后,將所述數據變更請求發(fā)送至一個處于空閑狀態(tài)的主機;
接收到數據變更請求的主機基于所述數據變更請求,對自身存儲的數據進行變更;將自身的數據變更信息發(fā)送至其余各個主機;
每個主機在接收到其他主機的數據變更信息時,基于所接收到的數據變更信息,對自身存儲的數據進行變更。
上述方案中,所述將自身的數據變更信息發(fā)送至其余各個主機包括:將自身的數據變更信息通過廣播發(fā)送至其余各個主機。
上述方案中,所述集群組件中設置有N個分布式緩存節(jié)點,N為數據庫使用的主機個數,每個主機與一個對應的分布式緩存節(jié)點形成通信連接;
所述將自身的數據變更信息發(fā)送至其余各個主機包括:將自身的數據變更信息上傳至與自身形成通信連接的分布式緩存節(jié)點中,將分布式緩存節(jié)點中存儲的數據變更信息通過廣播發(fā)送至與其余各個主機形成通信連接的分布式緩存節(jié)點;與其余每個主機形成通信連接的分布式緩存節(jié)點將接收到的數據變更信息發(fā)送至對應的主機。
上述方案中,所述集群組件中設置有消息中間件;
所述將分布式緩存節(jié)點中存儲的數據變更信息通過廣播發(fā)送至與其余各個主機形成通信連接的分布式緩存節(jié)點,包括:利用消息中間件將分布式緩存節(jié)點中存儲的數據變更信息通過廣播發(fā)送至與其余各個主機形成通信連接的分布式緩存節(jié)點。
上述方案中,所述集群組件中設置有N個分布式緩存節(jié)點,N為數據庫使用的主機個數,每個主機與一個對應的分布式緩存節(jié)點形成通信連接;
在與上傳自身的數據變更信息的主機對應的分布式緩存節(jié)點接收數據變更信息之后,所述方法還包括:將對應的主機標記為已同步主機,將其余每個主機標記為未同步主機;
在每個主機基于所接收到的數據變更信息,對自身存儲的數據進行變更后,所述方法還包括:每個主機向對應的分布式緩存節(jié)點發(fā)送主機標記通知;每個分布式緩存節(jié)點在收到主機標記通知后,將對應的主機標記為已同步主機;
所述方法還包括:集群組件在接收到數據訪問請求后,選取一個處于空閑狀態(tài)的主機,通過同步狀態(tài)字典表確定所選取的主機是已同步主機還是未同步主機;在所選取的主機是未同步主機時,集群組件生成同步指示信息,將數據訪問請求和同步指示信息發(fā)送至所選取的主機,所選取的主機基于接收的同步指示信息,先基于從其他主機接收的數據變更信息,對自身存儲的數據進行變更,之后,按照所述數據訪問請求執(zhí)行對自身存儲的數據的相應訪問操作。
上述方案中,所述方法還包括:未同步主機在按照所述數據訪問請求執(zhí)行對自身存儲的數據的相應訪問操作之后,向對應的分布式緩存節(jié)點發(fā)送主機標記通知,將對應的未同步主機標記為已同步主機。
上述方案中,所述集群組件中設置有N個分布式緩存節(jié)點,N為數據庫使用的主機個數,每個主機與一個對應的分布式緩存節(jié)點形成通信連接;
所述方法還包括:所述集群組件在確定數據庫使用的任意一個主機正常運行時,將對應主機標記為正常主機;集群組件在確定數據庫使用的任意一個主機出現故障時,將對應主機標記為不可用主機;
所述不可用主機對應的分布式緩存節(jié)點在不可用主機出現故障的時間段,存儲其他主機的數據變更信息;
集群組件確定所述不可用主機恢復正常運行時,通知所述不可用主機對應的分布式緩存節(jié)點將存儲的數據變更信息發(fā)送至對應的主機,對應的主機基于接收到的數據變更信息進行數據變更。
上述方案中,所述集群組件確定所述不可用主機恢復正常運行時,所述方法還包括:所述集群組件將對應的恢復正常運行的主機標記為正常主機。
本發(fā)明實施例還提供了一種實現數據庫高可用的裝置,數據庫用于使用至少兩個主機來存儲數據,所述數據庫的數據變更請求用于被發(fā)送至一個處于空閑狀態(tài)的主機;所述裝置設置于每個主機中,所述裝置包括第一變更模塊和第二變更模塊;其中,
第一變更模塊,用于在接收到數據變更請求時,基于所述數據變更請求,對自身所處在的主機存儲的數據進行變更;將自身所處在的主機的數據變更信息發(fā)送至其余各個主機的第二變更模塊;
第二變更模塊,用于在接收到其他主機的數據變更信息時,基于所接收到的數據變更信息,對自身所處在的主機存儲的數據進行變更。
上述方案中,所述第一變更模塊,具體用于將自身所處在的主機的數據變更信息通過廣播發(fā)送至其余各個主機。
上述方案中,數據庫用于使用至少兩個主機來存儲數據,數據庫的數據變更請求用于被發(fā)送至一個處于空閑狀態(tài)的主機;
所述系統(tǒng)包括數據庫使用的各個主機、以及分別連接數據庫使用的各個主機的集群組件;其中,
所述集群組件,用于在接收到數據變更請求后,將所述數據變更請求發(fā)送至一個處于空閑狀態(tài)的主機;
所述每個主機,用于在接收到數據變更請求后,基于所述數據變更請求,對自身存儲的數據進行變更;將自身的數據變更信息發(fā)送至其余各個主機;在接收到其他主機的數據變更信息時,基于所接收到的數據變更信息,對自身存儲的數據進行變更。
上述方案中,所述集群組件中設置有N個分布式緩存節(jié)點,N為數據庫使用的主機個數,每個主機與一個對應的分布式緩存節(jié)點形成通信連接;
所述集群組件,還用于在確定數據庫使用的任意一個主機正常運行時,將對應主機標記為正常主機;在確定數據庫使用的任意一個主機出現故障時,將 對應主機標記為不可用主機;
所述不可用主機對應的分布式緩存節(jié)點,用于在不可用主機出現故障的時間段,存儲其他主機的數據變更信息;
所述集群組件,還用于在確定所述不可用主機恢復正常運行時,通知所述不可用主機對應的分布式緩存節(jié)點將存儲的數據變更信息發(fā)送至對應的主機;
所述對應的主機,用于基于接收到的數據變更信息進行數據變更。
本發(fā)明實施例提供的一種實現數據庫高可用的方法、裝置和系統(tǒng)中,數據庫用于使用至少兩個主機來存儲數據,所述數據庫的數據變更請求用于被發(fā)送至一個處于空閑狀態(tài)的主機;每個主機在接收到數據變更請求時,基于所述數據變更請求,對自身存儲的數據進行變更;將自身的數據變更信息發(fā)送至其余各個主機;每個主機在接收到其他主機的數據變更信息時,基于所接收到的數據變更信息,對自身存儲的數據進行變更;如此,數據庫使用的各個主機具有同等地位,沒有主從之分,并且對于每一個數據變更請求,采用多份數據冗余來提高數據存儲的安全性;同時還都能夠對外提供讀寫服務;只要有至少一個主機正常運行,就不會影響數據庫的使用。
附圖說明
圖1為現有技術中利用主從方式實現數據庫高可用的架構示意圖;
圖2為現有技術中利用分布式集群方式實現數據庫高可用的架構示意圖;
圖3為本發(fā)明實現數據庫高可用的方法的第一實施例的流程圖;
圖4為本發(fā)明實現數據庫高可用的方法的第二實施例的流程圖;
圖5為本發(fā)明實施例實現數據庫高可用的裝置的組成結構示意圖;
圖6為本發(fā)明實施例實現數據庫高可用的系統(tǒng)的組成結構示意圖。
具體實施方式
下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述。
第一實施例
本發(fā)明第一實施例提供了一種實現數據庫高可用的方法,這里,數據庫用于使用至少兩個主機來存儲數據,所述數據庫的數據變更請求用于被發(fā)送至一個處于空閑狀態(tài)的主機。
圖3為本發(fā)明實現數據庫高可用的方法的第一實施例的流程圖,如圖3所示,該流程包括:
步驟300:每個主機在接收到數據變更請求時,基于所述數據變更請求,對自身存儲的數據進行變更;將自身的數據變更信息發(fā)送至其余各個主機。
示例性地,每個主機的狀態(tài)可以分為空閑狀態(tài)和忙碌狀態(tài),當主機處于忙碌狀態(tài)時,不能接收數據變更請求。
這里,數據變更請求為對數據庫中的數據進行變更的請求,示例性地,數據變更請求包括但不限于插入請求、更新請求、刪除請求等等。
可以理解的是,數據變更請求通常是基于用戶需求而生成的,在生成數據變更請求后,首先通過查詢獲取各個主機的狀態(tài),然后將該請求被發(fā)送至一個處于空閑狀態(tài)的主機,一個數據變更請求只能被發(fā)送至一個主機。
對于數據變更請求被發(fā)送至一個處于空閑狀態(tài)的主機的實現方式,具體地說,預先為各個主機配置相同的地址信息,設置集群組件,該集群組件一方面用于接收數據變更請求,另一方面用于將數據變更請求發(fā)送至主機;客戶端生成并發(fā)送數據變更請求,集群組件接收到數據變更請求后,查詢各個主機的狀態(tài),之后,通過浮動IP將數據變更請求發(fā)送至一個處于空閑狀態(tài)的主機,此時,集群組件與對應的處于空閑狀態(tài)的主機建立通信連接。
本步驟中,主機在對自身存儲的數據進行變更,生成自身的數據變更信息,數據變更信息為主機存儲數據的變更信息,數據變更信息的形式可以是日志形式;示例性地,主機基于數據插入請求生成的數據變更信息可以包括:數據寫入的開始地址,數據寫入的結束地址、數據寫入內容等,主機基于數據更新請求生成的數據變更信息可以包括:待更新的數據在主機中的地址、數據寫入的開始地址,數據寫入的結束地址、待寫入的數據內容等,主機基于數據刪除請 求生成的數據變更信息可以包括:待刪除的數據在主機中的地址。
本步驟中,所述將自身的數據變更信息發(fā)送至其余各個主機包括:將自身的數據變更信息通過廣播發(fā)送至其余各個主機。
這里,可以預先在集群組件中為每個主機設置一個對應的分布式緩存節(jié)點,主機與分布式緩存節(jié)點形成一一對應關系,每個主機與一個對應的分布式緩存節(jié)點形成通信連接。
所述將自身的數據變更信息發(fā)送至其余各個主機包括:將自身的數據變更信息上傳至與自身形成通信連接的分布式緩存節(jié)點中,將分布式緩存節(jié)點中存儲的數據變更信息通過廣播發(fā)送至與其余各個主機形成通信連接的分布式緩存節(jié)點;與其余每個主機形成通信連接的分布式緩存節(jié)點將接收到的數據變更信息發(fā)送至對應的主機;如此,各個主機都可以接收到相同的數據變更信息,都可以基于該數據變更信息,進行相同的數據變更操作。
這里,可以利用消息中間件將分布式緩存節(jié)點中存儲的數據變更信息廣播至與其余各個主機形成通信連接的分布式緩存節(jié)點。
在現有的利用分布式集群方式實現數據庫高可用的方案中,數據庫主機之間的數據通信的方式為網狀互同步方式,通信開銷較大,尤其是在數據庫主機較多的情況下,主機之間的通信量太大;而本發(fā)明第一實施例提供的實現數據庫高可用的方法中,可以將自身的數據變更信息通過廣播發(fā)送至其余各個主機,如此,可以降低數據庫的通信開銷。
進一步地,在分布式緩存節(jié)點接收數據變更信息之后,將對應的主機標記為已同步主機,將其余每個主機標記為未同步主機。
示例性地,可以在集群組件中預先配置同步狀態(tài)字典表;分布式緩存節(jié)點在接收數據變更信息之后,在所述同步狀態(tài)字典表中將對應的主機標記為已同步主機,將其余每個主機標記為未同步主機。
步驟301:每個主機在接收到其他主機的數據變更信息時,基于所接收到的數據變更信息,對自身存儲的數據進行變更。
可以理解的是,由于每個主機對自身存儲的數據進行變更的依據為:所接 收到的數據變更信息,因此,在每個主機根據接收到的數據變更信息對自身存儲的數據進行變更后,數據庫使用的各個主機存儲的數據將保持一致;示例性地,數據庫共使用四個主機來存儲數據,這四個主機分別為主機1至主機4,當處于空閑狀態(tài)的主機2接收到數據變更請求后,根據步驟300將主機2存儲的數據進行變更,將主機2的數據變更信息分別發(fā)送至主機1、主機3和主機4;主機1、主機3和主機4在接收到主機2的數據變更信息之后,均以主機2的數據變更信息作為依據,對自身存儲的數據進行變更,使這四個主機存儲的數據保持一致。
進一步地,每個主機在基于所接收到的數據變更信息,對自身存儲的數據進行變更之后,向對應的分布式緩存節(jié)點重新發(fā)送主機標記通知;每個分布式緩存節(jié)點在收到主機標記通知后,將對應的主機標記為已同步主機;此時,各個主機均為已同步主機,表明各個主機存儲的數據保持一致。
示例性地,可以在集群組件中預先配置同步狀態(tài)字典表;分布式緩存節(jié)點在收到主機標記通知后,在所述同步狀態(tài)字典表中將對應的主機標記為已同步主機。
可以看出,本發(fā)明第一實施例提供的實現數據庫高可用的方法,不改變底層數據庫的部署方式,數據庫使用的各個主機具有同等地位,沒有主從之分,并且對于每一個數據變更請求,采用多份數據冗余來提高數據存儲的安全性;同時還都能夠對外提供讀寫服務;只要有至少一個主機正常運行,就不會影響數據庫的使用;并且數據變更過程無需人工干預,對客戶端使用的應用程序完全透明,理論上數據庫的高可用率最多能夠提升N倍,N表示數據庫使用的主機數;總之,本發(fā)明第一實施例提供的實現數據庫高可用的方法,提高了數據庫的高可用性,并提升了數據庫讀寫性能。
進一步地,本發(fā)明第一實施例提供的實現數據庫高可用的方法還包括:每個已同步主機在處于空閑狀態(tài)并接收到數據訪問請求時,按照所述數據訪問請求執(zhí)行對自身存儲的數據的相應訪問操作;每個未同步主機在處于空閑狀態(tài)并接收到數據訪問請求時,說明該未同步主機沒有接收到其他主機的數據變更信 息時,或沒有基于所接收到的數據變更信息對自身存儲的數據進行變更;這時,不能立即按照所述數據訪問請求執(zhí)行對自身存儲的數據的相應訪問操作,而應該在接收到其他主機的數據變更信息時,基于所接收到的數據變更信息,對自身存儲的數據進行變更;之后,再按照所述數據訪問請求執(zhí)行對自身存儲的數據的相應訪問操作。
進一步地,在未同步主機按照所述數據訪問請求執(zhí)行對自身存儲的數據的相應訪問操作之后,將對應的未同步主機標記為已同步主機。
這里,所述數據訪問請求包括但不限于:數據變更請求、數據讀取請求等,示例性地,每個已同步主機在接收到數據讀取請求時,按照所述數據讀取請求讀取自身存儲的數據;每個未同步主機在接收的數據讀取請求時,首先按照步驟301對自身存儲的數據進行變更,然后,按照所述數據讀取請求讀取自身存儲的數據。
具體地,數據訪問請求通常是基于用戶需求而生成的,生成的數據訪問請求被發(fā)送至集群組件中,集群組件選取一個處于空閑狀態(tài)的主機,通過同步狀態(tài)字典表確定所選取的主機是已同步主機還是未同步主機;如果所選取的主機是已同步主機,則集群組件可以只將數據訪問請求發(fā)送至所選取的主機,所選取的主機按照所述數據讀取請求讀取自身存儲的數據;如果所選取的主機是未同步主機,則集群組件生成同步指示信息,將數據訪問請求和同步指示信息發(fā)送至所選取的主機,所選取的主機基于接收的同步指示信息按照步驟301對自身存儲的數據進行變更,之后,按照所述數據讀取請求讀取自身存儲的數據。
在現有的利用分布式集群方式實現數據庫高可用的方案中,數據庫使用的主機很容易出現數據讀寫不一致的情況;例如,在主機A完成數據寫入操作,主機A將寫入操作的數據發(fā)送至主機B,以實現主機A和主機B數據的同步;如果在主機A將寫入操作的數據發(fā)送至主機B的同時,讀取主機B的數據,就可能出現讀取錯誤的情況;而在本發(fā)明第一實施例提供的實現數據庫高可用的方法中,如果未同步主機接收到數據訪問請求,需要在接收到其他主機的數據變更信息時,基于所接收到的數據變更信息,對自身存儲的數據進行變更;之 后,再按照所述數據訪問請求執(zhí)行對自身存儲的數據的相應訪問操作;如此,可以避免出現現有技術中的讀寫不一致的情況。
第二實施例
為了能夠更加體現本發(fā)明的目的,在本發(fā)明第一實施例的基礎上,進行進一步的舉例說明。
本發(fā)明第二實施例提供了一種實現數據庫高可用的方法,這里,數據庫用于使用至少兩個主機來存儲數據,所述數據庫的數據變更請求用于被發(fā)送至一個處于空閑狀態(tài)的主機。
圖4為本發(fā)明實現數據庫高可用的方法的第二實施例的流程圖,如圖4所示,該流程包括:
步驟400:設置集群組件,所述集群組件分別連接數據庫使用的各個主機。
這里,集群組件可以用于接收數據訪問請求,所述數據訪問請求包括但不限于:數據變更請求、數據讀取請求等,示例性地,數據變更請求包括但不限于插入請求、更新請求、刪除請求等等。
數據訪問請求通常是基于用戶需求而生成的,例如,數據訪問請求的生成過程包括:用戶在客戶端上生成數據訪問請求。
本步驟還包括:集群組件預先為各個主機配置相同的地址信息。
步驟401:集群組件在接收到數據變更請求后,將所述數據變更請求發(fā)送至一個處于空閑狀態(tài)的主機。
本步驟的具體實現方式已經在步驟300作出說明,這里不再贅述。
步驟402:接收到數據變更請求的主機基于所述數據變更請求,對自身存儲的數據進行變更;將自身的數據變更信息發(fā)送至其余各個主機。
這里,所述將自身的數據變更信息發(fā)送至其余各個主機包括:將自身的數據變更信息通過廣播發(fā)送至其余各個主機。
具體地說,所述集群組件中設置有N個分布式緩存節(jié)點,N為數據庫使用的主機個數,每個主機與一個對應的分布式緩存節(jié)點形成通信連接。
所述將自身的數據變更信息發(fā)送至其余各個主機包括:將自身的數據變更 信息上傳至與自身形成通信連接的分布式緩存節(jié)點中,將分布式緩存節(jié)點中存儲的數據變更信息通過廣播發(fā)送至與其余各個主機形成通信連接的分布式緩存節(jié)點;與其余每個主機形成通信連接的分布式緩存節(jié)點將接收到的數據變更信息發(fā)送至對應的主機。
這里,可以利用消息中間件將分布式緩存節(jié)點中存儲的數據變更信息通過廣播發(fā)送至與其余各個主機形成通信連接的分布式緩存節(jié)點;該消息中間件設置于集群組件中。
本步驟中,在與上傳自身的數據變更信息的主機對應的分布式緩存節(jié)點接收數據變更信息之后,將對應的主機標記為已同步主機,將其余每個主機標記為未同步主機。
步驟403:每個主機在接收到其他主機的數據變更信息時,基于所接收到的數據變更信息,對自身存儲的數據進行變更。
進一步地,在每個主機基于所接收到的數據變更信息,對自身存儲的數據進行變更后,向對應的分布式緩存節(jié)點發(fā)送主機標記通知;分布式緩存節(jié)點在收到主機標記通知后,將對應的主機標記為已同步主機。
進一步地,本發(fā)明第二實施例的實現數據庫高可用的方法還包括:集群組件在接收到數據訪問請求后,選取一個處于空閑狀態(tài)的主機,通過同步狀態(tài)字典表確定所選取的主機是已同步主機還是未同步主機;在所選取的主機是未同步主機時,集群組件生成同步指示信息,將數據訪問請求和同步指示信息發(fā)送至所選取的主機,所選取的主機基于接收的同步指示信息,先基于從其他主機接收的數據變更信息,對自身存儲的數據進行變更,之后,按照所述數據訪問請求執(zhí)行對自身存儲的數據的相應訪問操作。
這里,未同步主機在按照所述數據訪問請求執(zhí)行對自身存儲的數據的相應訪問操作之后,向對應的分布式緩存節(jié)點發(fā)送主機標記通知,將對應的未同步主機標記為已同步主機。
進一步地,本發(fā)明第二實施例的實現數據庫高可用的方法還包括:所述集群組件在確定數據庫使用的任意一個主機正常運行時,將對應主機標記為正常 主機;集群組件在確定數據庫使用的任意一個主機出現故障時,將對應主機標記為不可用主機。
所述不可用主機對應的分布式緩存節(jié)點在不可用主機出現故障的時間段,存儲其他主機的數據變更信息。
集群組件確定所述不可用主機恢復正常運行時,通知所述不可用主機對應的分布式緩存節(jié)點將存儲的數據變更信息發(fā)送至對應的主機,對應的主機基于接收到的數據變更信息進行數據變更,如此,可以使各個主機存儲的數據保持一致。
這里,所述集群組件確定所述不可用主機恢復正常運行時,將對應的恢復正常運行的主機標記為正常主機。
可以理解的是,確定每個主機是否正常運行具有多種現有的實現方式,這里不再贅述。
具體地說,所述不可用主機對應的分布式緩存節(jié)點在不可用主機出現故障的時間段,還可以存儲其他主機的數據變更信息的先后接收順序;分布式緩存節(jié)點將存儲的數據變更信息發(fā)送至對應的主機時,還可以將對應的數據變更信息的先后接收順序發(fā)送至對應的主機;如此,對應的主機可以基于接收到的數據變更信息,并按照對應的數據變更信息的先后接收順序,進行數據變更。
在現有的利用主從方式實現數據庫高可用的方案中,當主機出現故障后,在備機提升為主機的過程中,無法對外提供服務,會出現服務的短暫的服務暫停;在現有的利用分布式集群方式實現數據庫高可用的方案中,當一個主機出現故障時,數據庫依然可以對外提供服務,但是,當其中有至少兩個主機出現故障時,數據庫就無法對外繼續(xù)提供服務。而本發(fā)明實現數據庫高可用的方法的第二實施例中,只要有一個主機正常運行,數據庫就可以對外提供服務,在出現故障的主機恢復正常運行后,還可以自動使各個主機的數據保持一致。
本發(fā)明實現數據庫高可用的方法的第二實施例,通過部署了分布式緩存節(jié)點和消息中間件的集群組件,將各主機進行并行關聯(lián)組成一個大的集群系統(tǒng)。這里,分布式緩存節(jié)點的分布式功能,可以將主機的數據變更信息保存,其他 主機可以共享該機的數據變更信息;分布式消息中間件的消息調度機制可以將有方案中各個主機單獨的同步調度機制合并,進行統(tǒng)一調度處理,
第三實施例
針對本發(fā)明第一實施例的實現數據庫高可用的方法,本發(fā)明第三實施例提供了一種實現數據庫高可用的裝置。
本發(fā)明第三實施例的實現數據庫高可用的裝置中,數據庫用于使用至少兩個主機來存儲數據,所述數據庫的數據變更請求用于被發(fā)送至一個處于空閑狀態(tài)的主機。
圖5為本發(fā)明實施例實現數據庫高可用的裝置的組成結構示意圖,如圖5所示,該裝置包括:第一變更模塊500和第二變更模塊501;其中,
第一變更模塊500,用于在接收到數據變更請求時,基于所述數據變更請求,對自身所處在的主機存儲的數據進行變更;將自身所處在的主機的數據變更信息發(fā)送至其余各個主機的第二變更模塊。
第二變更模塊501,用于在接收到其他主機的數據變更信息時,基于所接收到的數據變更信息,對自身所處在的主機存儲的數據進行變更。
具體地,所述第一變更模塊500,具體用于將自身所處在的主機的數據變更信息通過廣播發(fā)送至其余各個主機。
在實際應用中,所述第一變更模塊500和第二變更模塊501均可由位于主機中的中央處理器(Central Processing Unit,CPU)、微處理器(Micro Processor Unit,MPU)、數字信號處理器(Digital Signal Processor,DSP)、或現場可編程門陣列(Field Programmable Gate Array,FPGA)等實現。
第四實施例
針對本發(fā)明第二實施例的實現數據庫高可用的方法,本發(fā)明第四實施例提供了一種實現數據庫高可用的系統(tǒng)。
本發(fā)明第四實施例的實現數據庫高可用的系統(tǒng)中,數據庫用于使用至少兩個主機來存儲數據,數據庫的數據變更請求用于被發(fā)送至一個處于空閑狀態(tài)的主機。
圖6為本發(fā)明實施例實現數據庫高可用的系統(tǒng)的組成結構示意圖,如圖6所示,該系統(tǒng)包括集群組件600、數據庫使用的第1主機T1至第N主機TN,N表示數據庫使用的主機個數。
所述集群組件600,用于在接收到數據變更請求后,將所述數據變更請求發(fā)送至一個處于空閑狀態(tài)的主機。
所述第i主機Ti,用于在接收到數據變更請求后,基于所述數據變更請求,對自身存儲的數據進行變更;將自身的數據變更信息發(fā)送至其余各個主機;在接收到其他主機的數據變更信息時,基于所接收到的數據變更信息,對自身存儲的數據進行變更;這里,i取1至N。
具體地,所述集群組件600中設置有N個分布式緩存節(jié)點,N為數據庫使用的主機個數,每個主機與一個對應的分布式緩存節(jié)點形成通信連接。
所述集群組件600,還用于在確定數據庫使用的任意一個主機正常運行時,將對應主機標記為正常主機;在確定數據庫使用的任意一個主機出現故障時,將對應主機標記為不可用主機;所述不可用主機對應的分布式緩存節(jié)點,用于在不可用主機出現故障的時間段,存儲其他主機的數據變更信息。
所述集群組件600,還用于在確定所述不可用主機恢復正常運行時,通知所述不可用主機對應的分布式緩存節(jié)點將存儲的數據變更信息發(fā)送至對應的主機。
所述對應的主機600,用于基于接收到的數據變更信息進行數據變更。
本領域內的技術人員應明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機程序產品。因此,本發(fā)明可采用硬件實施例、軟件實施例、或結合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限于磁盤存儲器和光學存儲器等)上實施的計算機程序產品的形式。
本發(fā)明是參照根據本發(fā)明實施例的方法、設備(系統(tǒng))、和計算機程序產品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結 合。可提供這些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數據處理設備的處理器以產生一個機器,使得通過計算機或其他可編程數據處理設備的處理器執(zhí)行的指令產生用于實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導計算機或其他可編程數據處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產生包括指令裝置的制造品,該指令裝置實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數據處理設備上,使得在計算機或其他可編程設備上執(zhí)行一系列操作步驟以產生計算機實現的處理,從而在計算機或其他可編程設備上執(zhí)行的指令提供用于實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
以上所述,僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。