本發(fā)明涉及互聯(lián)網(wǎng)后端分布式數(shù)據(jù)庫的故障切換領(lǐng)域,具體涉及一種用于分布式數(shù)據(jù)庫集群的故障數(shù)據(jù)庫切換方法及系統(tǒng)。
背景技術(shù):
隨著互聯(lián)網(wǎng)業(yè)務(wù)規(guī)模的擴(kuò)展,使用互聯(lián)網(wǎng)業(yè)務(wù)的用戶大量增長,進(jìn)而使得互聯(lián)網(wǎng)的網(wǎng)絡(luò)數(shù)據(jù)急劇增大。在此基礎(chǔ)上,傳統(tǒng)的依靠單臺服務(wù)器搭載數(shù)據(jù)庫的架構(gòu)已經(jīng)無法大量網(wǎng)絡(luò)數(shù)據(jù)業(yè)務(wù)提供完整的服務(wù),為了保證大量網(wǎng)絡(luò)數(shù)據(jù)業(yè)務(wù)的服務(wù)質(zhì)量,必須對數(shù)據(jù)庫進(jìn)行擴(kuò)展。
目前在互聯(lián)網(wǎng)領(lǐng)域中常見的對數(shù)據(jù)庫進(jìn)行擴(kuò)展的方式為:對數(shù)據(jù)進(jìn)行水平拆分,進(jìn)而使得依賴于分片路由的MySQL(關(guān)系型數(shù)據(jù)庫)集群方式日益被越來越多的互聯(lián)網(wǎng)公司所使用。
但是,使用MySQL集群方式會存在以下缺陷:若單臺MySQL在使用的過程出現(xiàn)故障,則會對整個集群產(chǎn)生非常大的不良影響,此時若進(jìn)行數(shù)據(jù)庫切換,則會造成部分?jǐn)?shù)據(jù)丟失。
技術(shù)實現(xiàn)要素:
針對現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明解決的技術(shù)問題為:當(dāng)分布式數(shù)據(jù)庫集群中的數(shù)據(jù)庫發(fā)生故障時,快速進(jìn)行故障數(shù)據(jù)庫的切換、同時最大化保證數(shù)據(jù)不丟失。本發(fā)明排查故障數(shù)據(jù)庫的精準(zhǔn)度較高,工作時負(fù)載較小。
為了達(dá)到以上目的,本發(fā)明提供的用于分布式數(shù)據(jù)庫集群的故障數(shù)據(jù)庫切換方法,包括以下步驟:
S1:對數(shù)據(jù)庫集群中所有的主數(shù)據(jù)庫進(jìn)行監(jiān)控,當(dāng)監(jiān)控到發(fā)生偽故障的主數(shù)據(jù)庫時,轉(zhuǎn)到S2;
S2:判斷當(dāng)前主數(shù)據(jù)庫的數(shù)據(jù)庫實例端口是否工作正常,若是,重新執(zhí)行S1,否則將當(dāng)前主數(shù)據(jù)庫確定為故障數(shù)據(jù)庫,轉(zhuǎn)到S3;
S3:定義故障數(shù)據(jù)庫的服務(wù)器為故障服務(wù)器,故障數(shù)據(jù)庫的數(shù)據(jù)庫實例為故障數(shù)據(jù)庫實例:若故障服務(wù)器未發(fā)生宕機(jī)、且故障數(shù)據(jù)庫實例發(fā)生宕機(jī),轉(zhuǎn)到S4;若故障服務(wù)器發(fā)生宕機(jī),轉(zhuǎn)到S5;
S4:將故障數(shù)據(jù)庫的日志信息,覆蓋至故障數(shù)據(jù)庫對應(yīng)的從數(shù)據(jù)庫,轉(zhuǎn)到S5;
S5:將故障數(shù)據(jù)庫對應(yīng)的從數(shù)據(jù)庫更新為主數(shù)據(jù)庫,結(jié)束。
本發(fā)明提供的實現(xiàn)上述方法的用于分布式數(shù)據(jù)庫集群的故障數(shù)據(jù)庫切換系統(tǒng),該系統(tǒng)包括監(jiān)控節(jié)點模塊和管理節(jié)點模塊,管理節(jié)點模塊包括數(shù)據(jù)庫實例判斷子模塊、宕機(jī)狀態(tài)確定子模塊、日志信息覆蓋子模塊和數(shù)據(jù)庫更新子模塊;
監(jiān)控節(jié)點模塊用于:對數(shù)據(jù)庫集群中所有的主數(shù)據(jù)庫進(jìn)行監(jiān)控,當(dāng)監(jiān)控到發(fā)生偽故障的主數(shù)據(jù)庫時,將發(fā)生偽故障的主數(shù)據(jù)庫的節(jié)點信息發(fā)送至數(shù)據(jù)庫實例判斷子模塊;
數(shù)據(jù)庫實例判斷子模塊用于:收到發(fā)生偽故障的主數(shù)據(jù)庫的節(jié)點信息后,判斷當(dāng)前主數(shù)據(jù)庫的數(shù)據(jù)庫實例端口是否工作正常,若是,通知監(jiān)控節(jié)點模塊繼續(xù)監(jiān)控數(shù)據(jù)庫集群中所有的主數(shù)據(jù);否則將當(dāng)前主數(shù)據(jù)庫確定為故障數(shù)據(jù)庫,向宕機(jī)狀態(tài)確定子模塊發(fā)送宕機(jī)狀態(tài)確定信號;
宕機(jī)狀態(tài)確定子模塊用于:收到宕機(jī)狀態(tài)確定信號后,確定故障服務(wù)器和故障數(shù)據(jù)庫實例的宕機(jī)狀態(tài):若故障服務(wù)器未發(fā)生宕機(jī)、且故障數(shù)據(jù)庫實例發(fā)生宕機(jī),向日志信息覆蓋子模塊發(fā)送日志信息覆蓋信號;若故障服務(wù)器發(fā)生宕機(jī),向數(shù)據(jù)庫更新子模塊發(fā)送數(shù)據(jù)庫更新信號;
日志信息覆蓋子模塊用于:收到日志信息覆蓋信號后,將故障數(shù)據(jù)庫的日志信息,覆蓋至故障數(shù)據(jù)庫對應(yīng)的從數(shù)據(jù)庫,向數(shù)據(jù)庫更新子模塊發(fā)送數(shù)據(jù)庫更新信號;
數(shù)據(jù)庫更新子模塊用于:收到數(shù)據(jù)庫更新信號后,將故障數(shù)據(jù)庫對應(yīng)的從數(shù)據(jù)庫更新為主數(shù)據(jù)庫。
與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點在于:
本發(fā)明當(dāng)主數(shù)據(jù)庫出現(xiàn)故障時,能夠快速定位故障數(shù)據(jù)庫;與現(xiàn)有技術(shù)中造成部分?jǐn)?shù)據(jù)丟失的數(shù)據(jù)庫切換方式相比,本發(fā)明在切換故障數(shù)據(jù)庫之前,會確定故障數(shù)據(jù)庫中的數(shù)據(jù)是否能夠進(jìn)行數(shù)據(jù)備份(將數(shù)據(jù)覆蓋至從數(shù)據(jù)庫),進(jìn)而在快速切換故障數(shù)據(jù)庫的同時,最大化保證數(shù)據(jù)不會丟失。
與此同時,本發(fā)明當(dāng)監(jiān)測到數(shù)據(jù)庫出現(xiàn)故障時,將當(dāng)前主數(shù)據(jù)庫初步定義為“偽故障”數(shù)據(jù)庫,待確定“偽故障”數(shù)據(jù)庫的數(shù)據(jù)庫實例端口工作異常時,才將“偽故障”數(shù)據(jù)庫最終確定為故障數(shù)據(jù)庫。因此,本發(fā)明能夠排除因為網(wǎng)絡(luò)異常等其他原因而被監(jiān)控到發(fā)生故障,實際上工作正常的主數(shù)據(jù)庫,進(jìn)而提高故障數(shù)據(jù)庫排查的精準(zhǔn)度。
(2)本發(fā)明的系統(tǒng)工作時,監(jiān)控節(jié)點模塊提供監(jiān)控功能(監(jiān)控是否出現(xiàn)“偽故障”數(shù)據(jù)庫),管理節(jié)點模塊提供管理功能(對“偽故障”數(shù)據(jù)庫進(jìn)行二次檢測、以及對檢測出的故障數(shù)據(jù)庫進(jìn)行切換)。因此,本發(fā)明將監(jiān)控功能與管理功能隔離,進(jìn)而能夠降低單個監(jiān)控節(jié)點模塊和管理節(jié)點模塊的負(fù)載,保證監(jiān)控節(jié)點模塊和管理節(jié)點模塊的正常工作。
附圖說明
圖1為本發(fā)明實施例中用于分布式數(shù)據(jù)庫集群的故障數(shù)據(jù)庫切換系統(tǒng)的結(jié)構(gòu)框圖;
圖2為本發(fā)明實施例中用于分布式數(shù)據(jù)庫集群的故障數(shù)據(jù)庫切換方法的流程圖。
具體實施方式
以下結(jié)合附圖及實施例對本發(fā)明作進(jìn)一步詳細(xì)說明。
參見圖1所示,本發(fā)明實施例中的分布式數(shù)據(jù)庫集群包括至少1臺承載有主數(shù)據(jù)庫(實際應(yīng)用中主數(shù)據(jù)庫的數(shù)量根據(jù)數(shù)據(jù)業(yè)務(wù)量而增加)的服務(wù)器,每個主數(shù)據(jù)庫分別對應(yīng)1條分片路由;每臺承載有主數(shù)據(jù)庫的服務(wù)器對應(yīng)一臺承載有從數(shù)據(jù)庫(從數(shù)據(jù)庫用于備份主數(shù)據(jù)庫的日志信息)的服務(wù)器。每臺服務(wù)器均設(shè)置有物理IP,承載有主數(shù)據(jù)庫的服務(wù)器的物理IP與分片路由的虛擬IP關(guān)聯(lián)。
在此基礎(chǔ)上,參見圖2所示,本發(fā)明實施例中的用于分布式數(shù)據(jù)庫集群的故障數(shù)據(jù)庫切換方法,包括以下步驟:
S1:定時對數(shù)據(jù)庫集群中所有的主數(shù)據(jù)庫進(jìn)行監(jiān)控,當(dāng)監(jiān)控到發(fā)生偽故障的主數(shù)據(jù)庫時,轉(zhuǎn)到S2。
S1中發(fā)生偽故障的主數(shù)據(jù)庫的監(jiān)控流程為:當(dāng)監(jiān)控的主數(shù)據(jù)庫的心跳檢測和滲透測試發(fā)生異常時,確定當(dāng)前主數(shù)據(jù)庫發(fā)生偽故障。
S2:判斷當(dāng)前主數(shù)據(jù)庫的數(shù)據(jù)庫實例端口是否工作正常,若是,重新執(zhí)行S1,否則證明當(dāng)前主數(shù)據(jù)庫確實發(fā)生故障,將當(dāng)前主數(shù)據(jù)庫確定為故障數(shù)據(jù)庫,轉(zhuǎn)到S3。
S2的目的在于:確認(rèn)真正發(fā)生故障的主數(shù)據(jù)庫,排除因為網(wǎng)絡(luò)異常等其他原因而被監(jiān)控到發(fā)生故障,實際上工作正常的主數(shù)據(jù)庫(即未發(fā)生故障的主數(shù)據(jù)庫),提高故障數(shù)據(jù)庫確認(rèn)的精準(zhǔn)度。
S3:定義故障數(shù)據(jù)庫的服務(wù)器為故障服務(wù)器,故障數(shù)據(jù)庫的數(shù)據(jù)庫實例為故障數(shù)據(jù)庫實例,確定故障服務(wù)器和故障數(shù)據(jù)庫實例是否宕機(jī)(故障數(shù)據(jù)庫實例的宕機(jī)狀態(tài)根據(jù)故障數(shù)據(jù)庫的狀態(tài)信息確定):
若故障服務(wù)器和故障數(shù)據(jù)庫實例均未發(fā)生宕機(jī),則證明故障服務(wù)器和故障數(shù)據(jù)庫均可用,重新執(zhí)行S1;
若故障服務(wù)器未發(fā)生宕機(jī)、且故障數(shù)據(jù)庫實例發(fā)生宕機(jī),則證明故障數(shù)據(jù)庫不可用、但數(shù)據(jù)能夠備份,轉(zhuǎn)到S4;
若故障服務(wù)器發(fā)生宕機(jī),則證明故障服務(wù)器不可用,此時無論故障數(shù)據(jù)庫實例是否發(fā)生宕機(jī),均無法備份數(shù)據(jù),轉(zhuǎn)到S5。
S4:將故障數(shù)據(jù)庫的日志信息,覆蓋至故障數(shù)據(jù)庫對應(yīng)的從數(shù)據(jù)庫,轉(zhuǎn)到S5。
S5:將故障數(shù)據(jù)庫對應(yīng)的從數(shù)據(jù)庫更新為主數(shù)據(jù)庫,數(shù)據(jù)庫接收訪問,完成故障切換,結(jié)束。
S5的具體流程為:將故障數(shù)據(jù)庫對應(yīng)的從數(shù)據(jù)庫的權(quán)限表,與故障數(shù)據(jù)庫的權(quán)限表同步,以保證應(yīng)用用戶擁有足夠的連接權(quán)限;將故障數(shù)據(jù)庫對應(yīng)的從數(shù)據(jù)庫的物理IP;與分片路由的虛擬IP關(guān)聯(lián),以實現(xiàn)后端數(shù)據(jù)庫的入口切換。
在執(zhí)行S4和S5的過程中,若發(fā)現(xiàn)與故障數(shù)據(jù)庫對應(yīng)的從數(shù)據(jù)庫的數(shù)據(jù)庫實例、或者承載從數(shù)據(jù)庫的服務(wù)器發(fā)生宕機(jī)(從數(shù)據(jù)庫實例的宕機(jī)狀態(tài)根據(jù)從數(shù)據(jù)庫的狀態(tài)信息確定),則證明無法完成故障數(shù)據(jù)庫的切換,此時直接結(jié)束。
S5之后還可以包括以下步驟:為更新的主數(shù)據(jù)庫配置新的從數(shù)據(jù)庫和對應(yīng)的服務(wù)器,以便更新的主數(shù)據(jù)庫發(fā)生故障時,可以繼續(xù)進(jìn)行故障數(shù)據(jù)庫切換。
參見圖1所示,本發(fā)明實施中的實現(xiàn)上方法的用于分布式數(shù)據(jù)庫集群的故障數(shù)據(jù)庫切換系統(tǒng),包括監(jiān)控節(jié)點模塊和管理節(jié)點模塊,管理節(jié)點模塊包括數(shù)據(jù)庫實例判斷子模塊、宕機(jī)狀態(tài)確定子模塊、日志信息覆蓋子模塊和數(shù)據(jù)庫更新子模塊。
監(jiān)控節(jié)點模塊用于:對數(shù)據(jù)庫集群中所有的主數(shù)據(jù)庫進(jìn)行監(jiān)控,當(dāng)監(jiān)控到發(fā)生偽故障的主數(shù)據(jù)庫時,將發(fā)生偽故障的主數(shù)據(jù)庫的節(jié)點信息發(fā)送至數(shù)據(jù)庫實例判斷子模塊。
數(shù)據(jù)庫實例判斷子模塊用于:收到發(fā)生偽故障的主數(shù)據(jù)庫的節(jié)點信息后,判斷當(dāng)前主數(shù)據(jù)庫的數(shù)據(jù)庫實例端口是否工作正常,若是,通知監(jiān)控節(jié)點模塊繼續(xù)監(jiān)控數(shù)據(jù)庫集群中所有的主數(shù)據(jù);否則將當(dāng)前主數(shù)據(jù)庫確定為故障數(shù)據(jù)庫,向宕機(jī)狀態(tài)確定子模塊發(fā)送宕機(jī)狀態(tài)確定信號。
宕機(jī)狀態(tài)確定子模塊用于:收到宕機(jī)狀態(tài)確定信號后,確定故障服務(wù)器和故障數(shù)據(jù)庫實例的宕機(jī)狀態(tài):
若故障服務(wù)器未發(fā)生宕機(jī)、且故障數(shù)據(jù)庫實例發(fā)生宕機(jī),向日志信息覆蓋子模塊發(fā)送日志信息覆蓋信號;
若故障服務(wù)器發(fā)生宕機(jī),向數(shù)據(jù)庫更新子模塊發(fā)送數(shù)據(jù)庫更新信號;
若故障服務(wù)器和故障數(shù)據(jù)庫實例均未發(fā)生宕機(jī),通知監(jiān)控節(jié)點模塊繼續(xù)監(jiān)控數(shù)據(jù)庫集群中所有的主數(shù)據(jù)。
日志信息覆蓋子模塊用于:收到日志信息覆蓋信號后,將故障數(shù)據(jù)庫的日志信息,覆蓋至故障數(shù)據(jù)庫對應(yīng)的從數(shù)據(jù)庫,向數(shù)據(jù)庫更新子模塊發(fā)送數(shù)據(jù)庫更新信號。
日志信息覆蓋子模塊和數(shù)據(jù)庫更新子模塊在工作時,若發(fā)現(xiàn)與故障數(shù)據(jù)庫對應(yīng)的從數(shù)據(jù)庫的數(shù)據(jù)庫實例、或者承載從數(shù)據(jù)庫的服務(wù)器發(fā)生宕機(jī),則直接終止工作。
數(shù)據(jù)庫更新子模塊用于:收到數(shù)據(jù)庫更新信號后,將故障數(shù)據(jù)庫對應(yīng)的從數(shù)據(jù)庫更新為主數(shù)據(jù)庫;為更新的主數(shù)據(jù)庫配置新的從數(shù)據(jù)庫和對應(yīng)的服務(wù)器。
本發(fā)明不局限于上述實施方式,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也視為本發(fā)明的保護(hù)范圍之內(nèi)。本說明書中未作詳細(xì)描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員公知的現(xiàn)有技術(shù)。