一種數(shù)據(jù)庫的遠程數(shù)據(jù)服務(wù)系統(tǒng)及任務(wù)調(diào)度方法
【專利摘要】本申請?zhí)峁┝艘环N數(shù)據(jù)庫的遠程數(shù)據(jù)服務(wù)系統(tǒng),一種遠程數(shù)據(jù)服務(wù)系統(tǒng)中的任務(wù)調(diào)度方法。所述的系統(tǒng)包括任務(wù)調(diào)度模塊、高可用控制模塊、備份模塊和在線遷移模塊。對用戶而言,使用本申請無需自建服務(wù)器和數(shù)據(jù)庫,節(jié)省了時間提高了效率,同時若用戶業(yè)務(wù)量增大,只需要增加存儲節(jié)點即可,數(shù)據(jù)遷移等問題都可以由系統(tǒng)完成,用戶使用非常方便,效率較高。
【專利說明】一種數(shù)據(jù)庫的遠程數(shù)據(jù)服務(wù)系統(tǒng)及任務(wù)調(diào)度方法
【技術(shù)領(lǐng)域】
[0001]本申請涉及數(shù)據(jù)技術(shù),特別是涉及一種數(shù)據(jù)庫的遠程數(shù)據(jù)服務(wù)系統(tǒng),一種遠程數(shù)據(jù)服務(wù)系統(tǒng)中的任務(wù)調(diào)度方法。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)的發(fā)展,互聯(lián)網(wǎng)打破了地域的分割,形成了一個統(tǒng)一的大市場?,F(xiàn)有技術(shù)中企業(yè)發(fā)展互聯(lián)網(wǎng)業(yè)務(wù)需要有自己的服務(wù)器和數(shù)據(jù)庫,但不是所有的企業(yè)都能夠?qū)崿F(xiàn),并且服務(wù)器和數(shù)據(jù)庫的維護成本比較高。
[0003]若用戶自建數(shù)據(jù)庫,特別是對那些非計算機技術(shù)相關(guān)的企業(yè)而言,需要聘請專業(yè)人員,了解企業(yè)需求的數(shù)據(jù)庫的性能和壓力狀況,然后購買并搭建硬件系統(tǒng),并且需要自己編寫在該硬件中運行的數(shù)據(jù)庫腳本等,用戶自行建立服務(wù)器和數(shù)據(jù)庫的周期是非常長的,期間可能面臨各種技術(shù)問題要解決,建立的方法非常繁瑣,并且效率也較低。
[0004]同時,自建的服務(wù)器和數(shù)據(jù)庫還需要面臨后期的維護問題,特別是當(dāng)企業(yè)的業(yè)務(wù)量逐漸加大后,數(shù)據(jù)庫的壓力會隨之增加。數(shù)據(jù)庫達到飽和狀態(tài),即數(shù)據(jù)庫已優(yōu)化到極點,無法支持龐大的業(yè)務(wù)量時,需要升級硬件來解決這個問題。而硬件升級中采購周期,再加上數(shù)據(jù)遷移的周期通常要耗費時間比較長,這段時間無法確保數(shù)據(jù)庫是否能夠支撐業(yè)務(wù)的執(zhí)行。并且,升級中要保證業(yè)務(wù)的執(zhí)行和數(shù)據(jù)遷移的穩(wěn)定等各種技術(shù)問題,也是非常繁瑣的,同時需要浪費比較多的時間。
[0005]因此本領(lǐng)域技術(shù)人員迫切解決的一個技術(shù)問題是,提出一種數(shù)據(jù)庫的遠程數(shù)據(jù)服務(wù)系統(tǒng)及任務(wù)調(diào)度方法,使得用戶可以使用遠程數(shù)據(jù)庫,而避免自建數(shù)據(jù)庫造成時間的浪費,且數(shù)據(jù)穩(wěn)定性得不到保證的問題。
【發(fā)明內(nèi)容】
[0006]本領(lǐng)域技術(shù)人員迫切解決的一個技術(shù)問題是,提出一種數(shù)據(jù)庫的遠程數(shù)據(jù)服務(wù)系統(tǒng)及任務(wù)調(diào)度方法,使得用戶可以使用遠程數(shù)據(jù)庫,而避免自建數(shù)據(jù)庫造成時間的浪費,且數(shù)據(jù)穩(wěn)定性得不到保證的問題。
[0007]為了解決上述問題,本申請公開了一種數(shù)據(jù)庫的遠程數(shù)據(jù)服務(wù)系統(tǒng),包括:任務(wù)調(diào)度模塊、高可用控制模塊、備份模塊和在線遷移模塊,其中,
[0008]所述任務(wù)調(diào)度模塊包括:
[0009]接收子模塊,用于接收用戶通過網(wǎng)絡(luò)或API接口發(fā)送的任務(wù);
[0010]互斥檢查子模塊,用于針對接收的任務(wù),通過檢測所述任務(wù)針對實例所擁有的互斥鎖,確定所述任務(wù)是否與當(dāng)前運行的任務(wù)無沖突;
[0011]調(diào)度子模塊,用于針對與當(dāng)前運行的任務(wù)無沖突的任務(wù),調(diào)度所述任務(wù)到相應(yīng)的模塊進行處理;
[0012]所述高可用控制模塊包括:
[0013]切換子模塊,用于接收到任務(wù)調(diào)度模塊調(diào)度的執(zhí)行切換的任務(wù)后,發(fā)送將IP端口在主存儲節(jié)點和備存儲節(jié)點之間進行切換的命令;
[0014]所述備份模塊包括:
[0015]存儲子模塊,用于接收到任務(wù)調(diào)度模塊調(diào)度的執(zhí)行備份的任務(wù)后,根據(jù)配置將對應(yīng)的實例數(shù)據(jù)分片存儲到至少一個存儲節(jié)點上;
[0016]所述在線遷移模塊包括:
[0017]獲取子模塊,用于接收到任務(wù)調(diào)度模塊調(diào)度的執(zhí)行遷移的任務(wù)后,從備份模塊中獲取原始存儲節(jié)點的備份實例數(shù)據(jù);
[0018]同步子模塊,用于目標存儲節(jié)點上的備份完成后,將原始存儲節(jié)點和目標存儲節(jié)點的實例數(shù)據(jù)進行同步;
[0019]通知子模塊,用于通知備份模塊在目標存儲節(jié)點上執(zhí)行對應(yīng)的備份操作,并發(fā)出將IP端口從原始存儲節(jié)點切換到目標存儲節(jié)點上的通知。
[0020]優(yōu)選的,所述高可用控制模塊,還包括:
[0021]輪循子模塊,用于間隔一定時間并發(fā)輪循各個存儲節(jié)點上的所有實例;
[0022]故障檢測子模塊,用于輪循中檢測存儲節(jié)點是否存在故障;
[0023]所述切換子模塊,還用于針對故障的存儲節(jié)點,采用無故障的存儲節(jié)點接管故障存儲節(jié)點的任務(wù)。
[0024]優(yōu)選的,所述任務(wù)調(diào)度模塊、高可用控制模塊、備份模塊和線遷移模塊,都是由若干個處理節(jié)點構(gòu)成的集群,所述的每個模塊還包括:
[0025]節(jié)點檢測子模塊,通過處理節(jié)點之間的心跳通信,檢測各個處理節(jié)點是否正常運行;
[0026]節(jié)點切換子模塊,針對非正常運行的處理節(jié)點,切換至正常運行的處理節(jié)點,并接管對應(yīng)所述非正常運行的處理節(jié)點的任務(wù)。
[0027]優(yōu)選的,所述的系統(tǒng)還包括監(jiān)控模塊,其中,所述監(jiān)控模塊包括:
[0028]一致性檢測子模塊,用于在系統(tǒng)運行過程中檢測并清理存儲節(jié)點和對應(yīng)模塊中不一致的數(shù)據(jù);
[0029]狀態(tài)及性能監(jiān)控子模塊,用于收集并監(jiān)控所有存儲節(jié)點和實例的狀態(tài)數(shù)據(jù)和性能數(shù)據(jù);
[0030]空間檢查子模塊,用于當(dāng)檢測到用戶的使用空間超出預(yù)設(shè)范圍后,將用戶權(quán)限修改為只讀;
[0031]流量統(tǒng)計子模塊,用于統(tǒng)計每個存儲節(jié)點上各個實例的網(wǎng)絡(luò)流量數(shù)據(jù);
[0032]故障報警子模塊,用于當(dāng)檢測到異常情況時,執(zhí)行故障報警操作。
[0033]優(yōu)選的,所述的系統(tǒng)還包括:數(shù)據(jù)鏈路模塊,用于在用戶訪問實例時處理數(shù)據(jù)鏈路的問題,包括:
[0034]域名系統(tǒng)子模塊,用于將網(wǎng)絡(luò)中所有主機的域名轉(zhuǎn)換為對應(yīng)IP地址并保存;
[0035]虛擬服務(wù)器子模塊,用于構(gòu)建并存儲公網(wǎng)IP端口和真實IP端口之間的映射關(guān)系,實現(xiàn)各個存儲節(jié)點的負載均衡,防止DDOS分布式拒絕服務(wù)攻擊,并進行流量控制。
[0036]優(yōu)選的,所述任務(wù)調(diào)度模塊還包括:
[0037]狀態(tài)返回子模塊,用于任務(wù)執(zhí)行完畢后,接收并記錄返回的任務(wù)狀態(tài)數(shù)據(jù),所述任務(wù)狀態(tài)數(shù)據(jù)包括執(zhí)行成功和執(zhí)行失敗。[0038]優(yōu)選的,所述備份模塊還包括:
[0039]刪除子模塊,用于根據(jù)用戶設(shè)定的備份保留策略,自動刪除過期的備份數(shù)據(jù);
[0040]相應(yīng)的,本申請還公開了一種遠程數(shù)據(jù)服務(wù)系統(tǒng)中的任務(wù)調(diào)度方法,包括:
[0041]任務(wù)調(diào)度模塊接收用戶通過網(wǎng)絡(luò)或API接口發(fā)送的任務(wù);
[0042]通過檢測所述任務(wù)針對實例所擁有的互斥鎖,確定所述任務(wù)是否與當(dāng)前運行的任務(wù)無沖突;
[0043]若所述任務(wù)與當(dāng)前運行的任務(wù)無沖突,則調(diào)度所述任務(wù)到相應(yīng)的模塊進行處理;
[0044]若所述任務(wù)與當(dāng)前運行的任務(wù)有沖突,則等待當(dāng)前運行的任務(wù)運行完畢后,調(diào)度所述任務(wù)到相應(yīng)的模塊進行處理;
[0045]其中,
[0046]若所述任務(wù)為執(zhí)行切換的任務(wù),則調(diào)度所述任務(wù)到高可用控制模塊;
[0047]若所述任務(wù)為執(zhí)行備份的任務(wù),則調(diào)度所述任務(wù)到備份模塊;
[0048]若所述任務(wù)為執(zhí)行遷移的任務(wù),則調(diào)度所述任務(wù)到在線遷移模塊。
[0049]優(yōu)選的,通過檢測所述任務(wù)針對實例所擁有的互斥鎖,確定所述任務(wù)是否與當(dāng)前運行的任務(wù)無沖突,包括:
[0050]檢測所述任務(wù)針對實例所擁有的互斥鎖,其中所述互斥鎖包括獨占鎖和共享鎖;
[0051]若所述任務(wù)針對實例擁有獨占鎖,并且當(dāng)前運行的任務(wù)沒有占用所述實例,則所述任務(wù)與當(dāng)前運行的任務(wù)無沖突;
[0052]若所述任務(wù)針對實例擁有獨占鎖,但當(dāng)前運行的任務(wù)占用了所述實例,則所述任務(wù)與當(dāng)前運行的任務(wù)有沖突;
[0053]若檢測所述任務(wù)對應(yīng)的實例擁有共享鎖,則所述任務(wù)與當(dāng)前運行的任務(wù)無沖突。
[0054]優(yōu)選的,調(diào)度所述任務(wù)到相應(yīng)的模塊進行處理之后,還包括:
[0055]接收并記錄返回的任務(wù)狀態(tài)數(shù)據(jù),所述任務(wù)狀態(tài)數(shù)據(jù)包括執(zhí)行成功和執(zhí)行失敗。
[0056]優(yōu)選的,調(diào)度所述任務(wù)到高可用控制模塊之后,還包括:
[0057]通知虛擬服務(wù)器子模塊將IP端口在主存儲節(jié)點和備存儲節(jié)點之間進行切換。
[0058]優(yōu)選的,調(diào)度所述任務(wù)到備份模塊之后,還包括:
[0059]備份模塊根據(jù)配置將對應(yīng)的實例數(shù)據(jù)分片存儲到至少一個存儲節(jié)點上。
[0060]優(yōu)選的,調(diào)度所述任務(wù)到在線遷移模塊之后,還包括:
[0061]獲取備份模塊中原始存儲節(jié)點的備份實例數(shù)據(jù);
[0062]通知備份模塊在目標存儲節(jié)點上執(zhí)行對應(yīng)的備份操作;
[0063]目標存儲節(jié)點上的備份完成后,將原始存儲節(jié)點和目標存儲節(jié)點的實例數(shù)據(jù)進行同步;
[0064]通知虛擬服務(wù)器子模塊將IP端口從原始存儲節(jié)點切換到目標存儲節(jié)點。
[0065]優(yōu)選的,所述高可用控制模塊的處理方法還包括:
[0066]高可用控制模塊間隔一定時間并發(fā)輪循各個存儲節(jié)點上的所有實例;
[0067]輪循中檢測存儲節(jié)點是否存在故障;
[0068]若存儲節(jié)點存在故障,則采用采用無故障的存儲節(jié)點接管故障存儲節(jié)點的任務(wù);
[0069]其中,所述檢測存儲節(jié)點是否存在故障方法包括:
[0070]檢測各個存儲節(jié)點上的實例是否存在,或,檢測各個存儲節(jié)點上的實例端口是否存在響應(yīng),或,模擬應(yīng)用執(zhí)行更新操作。
[0071]優(yōu)選的,所述的方法還包括:
[0072]監(jiān)控模塊檢測整個系統(tǒng)內(nèi)事務(wù)正常運轉(zhuǎn),并收集實例相關(guān)狀態(tài)數(shù)據(jù)和性能數(shù)據(jù);
[0073]數(shù)據(jù)鏈路模塊在用戶訪問實例時處理數(shù)據(jù)鏈路的問題。
[0074]與現(xiàn)有技術(shù)相比,本申請包括以下優(yōu)點:
[0075]首先,由于用戶服務(wù)器和數(shù)據(jù)庫的周期是非常長的,建立的方法非常繁瑣,并且效率也較低。并且,后期維護中無法確保硬件升級時,數(shù)據(jù)庫是否能夠支撐業(yè)務(wù)的執(zhí)行,數(shù)據(jù)遷移的穩(wěn)定性也得不到保證。因此,本申請?zhí)岢鲆环N數(shù)據(jù)庫的遠程數(shù)據(jù)服務(wù)系統(tǒng),包括:任務(wù)調(diào)度模塊、高可用控制模塊、備份模塊和在線遷移模塊。通過任務(wù)調(diào)度模塊可以調(diào)度任務(wù)在各模塊中穩(wěn)定、有序的執(zhí)行。同使用該系統(tǒng)還可以實現(xiàn)數(shù)據(jù)的備份和遷移,以及各存儲節(jié)點的快速切換。對用戶而言,使用本申請無需自建服務(wù)器和數(shù)據(jù)庫,節(jié)省了時間提高了效率,同時若用戶業(yè)務(wù)量增大,只需要增加存儲節(jié)點即可,數(shù)據(jù)遷移等問題都可以由系統(tǒng)完成,用戶使用非常方便,效率較高。
[0076]其次,現(xiàn)有技術(shù)中存在虛擬平臺的RDS服務(wù),是將實例建立在虛擬機上,但是虛擬機中的資源不能滿足于高壓力的需求,并且當(dāng)某些用戶需要去維護數(shù)據(jù)庫時,但他們使用的虛擬機由于IO能力不夠,不能承受起其業(yè)務(wù)帶來的壓力。本申請將實例建立在物理機上,所能提供的IO能力遠超虛擬機至少10倍以上,能夠更高的承受起其業(yè)務(wù)帶來的壓力。
[0077]再次,虛擬平臺本身不提供數(shù)據(jù)庫備份,用戶需要自己去制定備份計劃,并把備份數(shù)據(jù)放到其他位置存儲。而本申請自帶了備份模塊,用戶可以自由配置備份保留策略以備份時間,不需考慮備份、異機存儲等問題。
[0078]再次,用戶使用虛擬平臺時,通常只會申請一個虛擬機來承擔(dān)前端業(yè)務(wù)和數(shù)據(jù)庫服務(wù)。其中,若前端業(yè)務(wù)丟了,因為都是一些配置性的文件,不會造成重大的影響。而數(shù)據(jù)庫則是真正的價值所在,若虛擬機數(shù)據(jù)丟失,就會產(chǎn)生重大的影響。而本申請除了在每天晚上提供異機備份外,還提供雙節(jié)點間的實時備份,全面保護用戶數(shù)據(jù)安全,并采用自主研發(fā)的高可用控制模塊,檢測節(jié)點運行是否健康,并保證兩個節(jié)點間的秒級切換。
【專利附圖】
【附圖說明】
[0079]圖1是本申請實施例所述一種數(shù)據(jù)庫的遠程數(shù)據(jù)服務(wù)系統(tǒng)結(jié)構(gòu)圖;
[0080]圖2是本申請實施例所述任務(wù)調(diào)度模塊中互斥檢查示意圖;
[0081]圖3是本申請實施例所述高可用控制模塊中故障節(jié)點檢測示意圖;
[0082]圖4是本申請實施例所述備份模塊執(zhí)行備份示意圖;
[0083]圖5是本申請實施例所述在線遷移模塊數(shù)據(jù)遷移示意圖;
[0084]圖6是本申請實施例所述域名系統(tǒng)子模塊工作示意圖;
[0085]圖7是本申請實施例所述虛擬服務(wù)器子模塊中IP端口映射示意圖;
[0086]圖8是本申請優(yōu)選實施例所述一種數(shù)據(jù)庫的遠程數(shù)據(jù)服務(wù)系統(tǒng)示意圖;
[0087]圖9是本申請實施例一種遠程數(shù)據(jù)服務(wù)系統(tǒng)中的任務(wù)調(diào)度方法流程圖。
【具體實施方式】
[0088]為使本申請的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附圖和【具體實施方式】對本申請作進一步詳細的說明。
[0089]參照圖1,給出了本申請實施例所述一種數(shù)據(jù)庫的遠程數(shù)據(jù)服務(wù)系統(tǒng)結(jié)構(gòu)圖。
[0090]本申請?zhí)峁┝艘环N數(shù)據(jù)庫的遠程數(shù)據(jù)服務(wù)系統(tǒng),包括:任務(wù)調(diào)度模塊11、高可用控制模塊12、備份模塊13和在線遷移模塊14,其中,
[0091 ] 所述任務(wù)調(diào)度模塊11包括:
[0092]接收子模塊111,用于接收用戶通過網(wǎng)絡(luò)或API接口發(fā)送的任務(wù);
[0093]所述任務(wù)可以為執(zhí)行切換的任務(wù),調(diào)度給高可用控制模塊12執(zhí)行;可以為執(zhí)行備份的任務(wù),調(diào)度給備份模塊13執(zhí)行;也可以為執(zhí)行遷移的任務(wù),調(diào)度給在線遷移模塊14執(zhí)行。當(dāng)然在具體實施中。任務(wù)調(diào)度模塊11還可以調(diào)度其他的任務(wù),本申請對此不做限定。
[0094]API 的英文全拼為 Application Programming Interface,即應(yīng)用程序編程接口。
[0095]互斥檢查子模塊112,用于針對接收的任務(wù),通過檢測所述任務(wù)針對實例所擁有的互斥鎖,確定所述任務(wù)是否與當(dāng)前運行的任務(wù)無沖突;
[0096]首先任務(wù)調(diào)度模塊11從任務(wù)隊列中獲取需要處理的任務(wù),由于任務(wù)是并發(fā)處理的,在處理每一個任務(wù)前,任務(wù)調(diào)度模塊11需要判斷這個任務(wù)是否與當(dāng)前在運行的任務(wù)有沖突,這個判斷也叫互斥檢查,可以由互斥檢查子模塊112實現(xiàn)。所述互斥檢查是通過任務(wù)的互斥鎖來解決的。
[0097]任務(wù)的互斥鎖分為兩種:獨占鎖和共享鎖。鎖是針對對象而設(shè)立的,在本申請中對象一般指“MYSQL實例”。本申請所述的實例也可以稱為MYSQL實例。
[0098]當(dāng)某個任務(wù)對這個對象擁有獨占鎖的時候,其他任務(wù)就不能再擁有該對象的獨占鎖和共享鎖。比如,針對MYSQL實例,某些操作對其需要擁有獨占鎖的,如創(chuàng)建,刪除,即創(chuàng)建和刪除都需要獨占鎖。所以當(dāng)系統(tǒng)同時接受到對某個實例創(chuàng)建和刪除兩個任務(wù)時,兩個任務(wù)是沖突的,不能并發(fā)地進行,即當(dāng)一個創(chuàng)建任務(wù)拿到獨占鎖后,刪除任務(wù)就會等待,直到創(chuàng)建任務(wù)釋放了獨占鎖。
[0099]當(dāng)某個任務(wù)對這個對象擁有共享鎖的時候,那么其他任務(wù)則還可以對這個對象擁有共享鎖,但不能再擁有獨占鎖,比如,針對MYSQL實例,某些操作對其擁有共享鎖,如任務(wù)a:實例增加DB(data base,數(shù)據(jù)庫),任務(wù)b:實例備份。當(dāng)同時收到兩個任務(wù)時,兩個任務(wù)不會沖突,可以同時執(zhí)行。
[0100]但若針對上述兩個擁有共享鎖的情況下,又有一個新的任務(wù),所述任務(wù)c為刪除MYSQL實例,則任務(wù)c會請求獨占鎖,而當(dāng)前擁有的共享鎖沒有釋放,那么獨占鎖是不會成功被獲取,只有等待以上兩個任務(wù)全部完成。
[0101]其中,可以將一個主機看作一個存儲節(jié)點,一個存儲節(jié)點上可以運行多個實例(或稱主機實例,或MYSQL實例),所述實例可以是主機中的獨立進程。
[0102]參照圖2,給出了本申請實施例所述任務(wù)調(diào)度模塊中互斥檢查示意圖。
[0103]其中,任務(wù)2、任務(wù)3、任務(wù)4和任務(wù)5正在處理,Lock-S代表任務(wù)對實例擁有獨占鎖,Lock-X代表任務(wù)對實例擁有共享鎖。則任務(wù)2對實例擁有獨占鎖,任務(wù)3、任務(wù)4和任務(wù)5對實例擁有共享鎖。此時有一個任務(wù)I對實例擁有獨占鎖,但任務(wù)I與任務(wù)4沖突,需要等待任務(wù)4執(zhí)行完畢后才能執(zhí)行。
[0104]其中,互斥鎖的數(shù)據(jù)存放在數(shù)據(jù)庫中,以便讓多個處理節(jié)點可以同時獲取該數(shù)據(jù)并保持數(shù)據(jù)的一致性。[0105]調(diào)度子模塊113,用于針對與當(dāng)前運行的任務(wù)無沖突的任務(wù),調(diào)度所述任務(wù)到相應(yīng)的模塊進行處理;
[0106]在獲取任務(wù)所需要的互斥鎖以后,說明所述任務(wù)與當(dāng)前運行的任務(wù)無沖突,此時任務(wù)可以下達到各個實例并執(zhí)行。
[0107]狀態(tài)返回子模塊114,用于任務(wù)執(zhí)行完畢后,接收并記錄返回的任務(wù)狀態(tài)數(shù)據(jù),所述任務(wù)狀態(tài)數(shù)據(jù)包括執(zhí)行成功和執(zhí)行失敗。
[0108]在執(zhí)行完成后,任務(wù)調(diào)度模塊11會根據(jù)反饋的數(shù)據(jù),將任務(wù)狀態(tài)置成“執(zhí)行成功”或“執(zhí)行失敗”,以便管理員作查詢和處理。
[0109]所述高可用控制模塊12包括:
[0110]切換子模塊121,用于接收到任務(wù)調(diào)度模塊調(diào)度的執(zhí)行切換的任務(wù)后,發(fā)送將IP端口在主存儲節(jié)點和備存儲節(jié)點之間進行切換的命令;
[0111]其中,IP的英文全拼為Internet Protocol,即網(wǎng)絡(luò)互聯(lián)協(xié)議。
[0112]本申請所述的系統(tǒng)中,通常會設(shè)置一個主存儲節(jié)點和一個備存儲節(jié)點,主存儲節(jié)點和備存儲節(jié)點接隔一段時間進行通信,以保證數(shù)據(jù)的一致性。當(dāng)主存儲節(jié)點需要維護或出現(xiàn)故障等問題而無法工作時,備存儲節(jié)點可以代替主存儲節(jié)點進行工作。
[0113]例如,主存儲節(jié)點需要維護,此時存儲節(jié)點不能停止工作,因此可以發(fā)送執(zhí)行切換的任務(wù),將IP端口切換至備存儲節(jié)點上。高可用控制模塊12接收到任務(wù)調(diào)度模塊調(diào)度的執(zhí)行切換的任務(wù)后,發(fā)送對應(yīng)的命令給數(shù)據(jù)鏈路模塊16的虛擬服務(wù)器子模塊161,通知所述虛擬服務(wù)器子模塊161將IP端口由主存儲節(jié)點切換至備存儲節(jié)點。主存儲節(jié)點維護完成后,還可以通知所述虛擬服務(wù)器子模塊161將IP端口由備存儲節(jié)點切換回主存儲節(jié)點。
[0114]輪循子模塊122,用于間隔一定時間并發(fā)輪循各個存儲節(jié)點上的所有實例;
[0115]本申請所述的系統(tǒng)中存在許多存儲節(jié)點,每個存儲節(jié)點上存在許多實例,因此需要足夠快地輪循集群的所有實例,例如設(shè)置為每3秒輪循一次,因此當(dāng)發(fā)現(xiàn)有存儲節(jié)點出現(xiàn)故障時,可以實現(xiàn)秒級切換以保證系統(tǒng)的正常工作。由于系統(tǒng)中的實例過多,因此本申請采用并發(fā)輪循,以保證能夠快速的執(zhí)行輪循。
[0116]故障檢測子模塊123,用于輪循中檢測存儲節(jié)點是否存在故障;
[0117]所述切換子模塊124,還用于針對故障的存儲節(jié)點,采用無故障的存儲節(jié)點接管故障存儲節(jié)點的任務(wù)。
[0118]現(xiàn)有技術(shù)的高可用控制軟件,是裝載在兩個存儲節(jié)點之上的,此種方法面臨的一個問題就是腦裂,一旦出現(xiàn)這種現(xiàn)象,兩個存儲相同實例的主、備存儲節(jié)點都會被激活,此時就有可能導(dǎo)致主、備實例之間數(shù)據(jù)沖突或不一致的情況。
[0119]本申請所述的系統(tǒng)是以第三方身份去判斷存儲節(jié)點是否在正常運行,因此可以避免出現(xiàn)腦裂現(xiàn)象。當(dāng)發(fā)現(xiàn)存在故障的存儲節(jié)點時可以采用無故障的存儲節(jié)點接管故障存儲節(jié)點的任務(wù)。
[0120]參照圖3,給出了本申請實施例所述高可用控制模塊中故障節(jié)點檢測示意圖。
[0121]虛擬服務(wù)器子模塊162中最初將IP端口映射到備存儲節(jié)點上,高可用控制模塊12對存儲節(jié)點進行輪循時檢測到備存儲節(jié)點A'存在故障。因此會通知虛擬服務(wù)器子模塊162將IP端口由備存儲節(jié)點A ’切換到主存儲節(jié)點A上,此時對應(yīng)的IP端口會映射到主存儲節(jié)點A上。[0122]另外本申請中判斷存儲節(jié)點是否出現(xiàn)故障的方法有多種,例如,檢測各個存儲節(jié)點上的實例是否存在,或檢測各個存儲節(jié)點上的實例端口是否存在響應(yīng),或?qū)嶋H的去模擬應(yīng)用執(zhí)行更新,通過上述的方法可以更加準確的測檢測故障的存儲節(jié)點。
[0123]所述備份模塊13包括:
[0124]存儲子模塊131,用于接收到任務(wù)調(diào)度模塊調(diào)度的執(zhí)行備份的任務(wù)后,根據(jù)配置將對應(yīng)的實例數(shù)據(jù)分片存儲到至少一個存儲節(jié)點上;
[0125]刪除子模塊132,用于根據(jù)用戶設(shè)定的備份保留策略,自動刪除過期的備份數(shù)據(jù)。
[0126]參照圖4,給出了本申請實施例所述備份模塊執(zhí)行備份示意圖。
[0127]備份模塊13在執(zhí)行備份的任務(wù)時,會向相應(yīng)的存儲節(jié)點發(fā)送備份任務(wù),然后接收備份數(shù)據(jù)并執(zhí)行對應(yīng)的備份操作。
[0128]遠程數(shù)據(jù)服務(wù)系統(tǒng)要處理的MYSQL實例非常多,甚至上千上萬個,都需要在一定的時間范圍內(nèi)完成。在收集備份時若沒有并發(fā)控制,整個網(wǎng)絡(luò)帶寬將被耗盡,因此備份模塊13可以控制多個執(zhí)行備份的任務(wù)并發(fā)執(zhí)行,以控制不讓執(zhí)行備份的任務(wù)耗盡資源,避免影響正常的業(yè)務(wù)。
[0129]在本申請中,各個存儲節(jié)點上的數(shù)據(jù)可以分片存儲,具體執(zhí)行中??梢詫⒁粋€存儲節(jié)點的數(shù)據(jù)分散到多個不同的備份存儲節(jié)點上,以讓備份集存儲足夠分散。這種方法一方面提高了備份的效率,另一方面讓備份集更安全。通常可以存儲數(shù)據(jù)的設(shè)備看作存儲節(jié)點,例如,將一個存儲數(shù)據(jù)的計算機看作一個存儲節(jié)點。
[0130]處于容災(zāi)的考慮,通常各個存儲節(jié)點可以分布在不同的機房中。本申請支持跨機房異地備份,本申請所述的系統(tǒng)可以讓備份模塊內(nèi)的多個備份控制節(jié)點(MASTER)分散在不同的機房內(nèi)。例如,根據(jù)預(yù)置的規(guī)則,智能地根據(jù)備份策略進行異地備份。
[0131]下面論述在線遷移模塊14,首先,觸發(fā)執(zhí)行遷移的任務(wù)產(chǎn)生的情況包括:
[0132]I)存儲節(jié)點壓力過大,有時候在一個存儲節(jié)點上面可能會啟動多個實例,但隨著業(yè)務(wù)壓力增加,主機已經(jīng)不能承受如此多實例,因此需要將某些實例給遷移到其他的存儲節(jié)點上;
[0133]2)用戶需要更多的資源,用戶在最初時申請了資源比較小的實例,后來隨著業(yè)務(wù)的增多,導(dǎo)致需要更多的資源,此時不能停止用戶的業(yè)務(wù),因此只能把存儲業(yè)務(wù)數(shù)據(jù)的實例遷移到另外的存儲節(jié)點上;
[0134]3)用于實例恢復(fù),用戶有時想把數(shù)據(jù)還原到歷史的某個時間點上,此時不能直接在用戶當(dāng)前的實例中恢復(fù),因此會把用戶的數(shù)據(jù)恢復(fù)到另外的存儲節(jié)點上面,然后再作切換。
[0135]所述在線遷移模塊14包括:
[0136]獲取子模塊141,用于接收到任務(wù)調(diào)度模塊調(diào)度的執(zhí)行遷移的任務(wù)后,從備份模塊中獲取原始存儲節(jié)點的備份實例數(shù)據(jù);
[0137]執(zhí)行遷移的任務(wù)可以將實例數(shù)據(jù)從第一個存儲節(jié)點遷移到第二個存儲節(jié)點上,則第一個存儲節(jié)點為原始存儲節(jié)點,第二個存儲節(jié)點為目標存儲某節(jié)點。
[0138]接收到任務(wù)調(diào)度模塊調(diào)度的執(zhí)行遷移的任務(wù)后,在線遷移模塊14會根據(jù)任務(wù)從備份模塊中獲取原始存儲節(jié)點在某個時間點的備份實例數(shù)據(jù)。例如,獲取最近一次的備份實例數(shù)據(jù),或者獲取2012年I月10日15點的備份實例數(shù)據(jù)。[0139]同步子模塊142,用于目標存儲節(jié)點上的備份完成后,將原始存儲節(jié)點和目標存儲節(jié)點的實例數(shù)據(jù)進行同步;
[0140]通知子模塊143,用于通知備份模塊在目標存儲節(jié)點上執(zhí)行對應(yīng)的備份操作,并發(fā)出將IP端口從原始存儲節(jié)點切換到目標存儲節(jié)點上的通知。
[0141]上述原始存儲節(jié)點的備份實例數(shù)據(jù)后,通知子模塊143會通知備份模塊13在目標存儲節(jié)點上執(zhí)行對應(yīng)的備份操作。
[0142]在執(zhí)行備份的這段時間里,原始存儲節(jié)點上有可能更改了存儲的實例數(shù)據(jù),因此目標存儲節(jié)點上的備份完成后,可以將原始存儲節(jié)點和目標存儲節(jié)點的實例數(shù)據(jù)進行同步,使原始存儲節(jié)點和目標存儲節(jié)點中的實例數(shù)據(jù)完全一致。
[0143]數(shù)據(jù)同步結(jié)束后,通知子模塊143會發(fā)送命令給數(shù)據(jù)鏈路模塊16的虛擬服務(wù)器子模塊161,通知所述虛擬服務(wù)器子模塊161將IP端口由原始存儲節(jié)點切換至目標存儲節(jié)點。
[0144]其中,數(shù)據(jù)同步的操作是非必要的,有些觸發(fā)執(zhí)行遷移的任務(wù)產(chǎn)生的情況可能不執(zhí)行數(shù)據(jù)同步,例如,若由于用戶是為了數(shù)據(jù)還原到歷史的某個時間點上,而觸發(fā)執(zhí)行遷移的任務(wù),則此時不需要后進行數(shù)據(jù)同步。
[0145]參照圖5,給出了本申請實施例所述在線遷移模塊數(shù)據(jù)遷移示意圖。
[0146]在線遷移模塊接收到執(zhí)行遷移的任務(wù)后,1.向備份模塊13獲取備份;2.備份模塊13傳送備份到對應(yīng)的目標存儲節(jié)點;3.在所述目標存儲節(jié)點上進行實例的數(shù)據(jù)恢復(fù);4.原始存儲節(jié)點和目標存儲節(jié)點的數(shù)據(jù)進行同步;5.在線遷移模塊通知虛擬服務(wù)器子模塊162將IP端口由原始存儲節(jié)點切換到目標存儲節(jié)點上;6.銷毀所述實例對應(yīng)的IP端口與原始存儲節(jié)點的映射關(guān)系。
[0147]其中,在線遷移模塊14依賴于備份模塊13,在進行遷移操作時,首先要獲得對應(yīng)實例的一個備份數(shù)據(jù),不然遷移無從說起。所述備份數(shù)據(jù)需要向備份模塊13去獲取,備份模塊13會通知在線遷移模塊14是否存在備份,并確定是否需要立即執(zhí)行備份操作,如果確實需要,則備份模塊13就會下發(fā)備份指令,即時產(chǎn)生一個備份數(shù)據(jù)。
[0148]本申請所述的執(zhí)行遷移的任務(wù)具有可持續(xù)操作性。首先可以將執(zhí)行遷移的任務(wù)分成若干個小原子操作,所述原子操作是不可分割的,即整個執(zhí)行遷移的任務(wù)是由在線遷移模塊來主導(dǎo)的。執(zhí)行中,在線遷移模塊可以接收到每一步完成的狀態(tài)并記錄下來,若在某一步操作中出現(xiàn)異常,經(jīng)過修復(fù)后,在線遷移模塊可以由異常處繼續(xù)執(zhí)行后面的任務(wù)。
[0149]優(yōu)選的,所述任務(wù)調(diào)度模塊11、高可用控制模塊12、備份模塊13和線遷移模塊14,都是由若干個處理節(jié)點構(gòu)成的集群,所述的每個模塊還包括:
[0150]節(jié)點檢測子模塊,通過處理節(jié)點之間的心跳通信,檢測各個處理節(jié)點是否正常運行;
[0151]節(jié)點切換子模塊,針對非正常運行的處理節(jié)點,切換至正常運行的處理節(jié)點,并接管對應(yīng)所述非正常運行的處理節(jié)點的任務(wù)。
[0152]本申請中任務(wù)調(diào)度模塊11、高可用控制模塊12、備份模塊13和線遷移模塊14不是單一的處理節(jié)點,而是有多個處理節(jié)點構(gòu)成的集群。由于他們都是整個系統(tǒng)中非常重要的一部分,自身的高可用性的維護也是非常重要的,因此都具有自身的高可用保護功能,可以由節(jié)點檢測子模塊和節(jié)點切換子模塊完成。
[0153]其中,高可用性(High Availability)通常來描述一個系統(tǒng)經(jīng)過專門的設(shè)計,從而減少停工時間,而保持其服務(wù)的高度可用性。
[0154]上述的任務(wù)調(diào)度模塊11、高可用控制模塊12、備份模塊13和線遷移模塊14,除了執(zhí)行上述各自的功能以外,還會檢測自身的各個處理節(jié)點之間的心跳通信進行,以查看各個處理節(jié)點是否正常。針對非正常運行的處理節(jié)點,切換至正常運行的處理節(jié)點,并接管對應(yīng)所述非正常運行的處理節(jié)點的任務(wù),以保證各個任務(wù)的正常執(zhí)行。
[0155]則對應(yīng)任務(wù)調(diào)度模塊11包括節(jié)點檢測子模塊115和節(jié)點切換子模塊116,高可用控制模塊12包括節(jié)點檢測子模塊125和節(jié)點切換子模塊126,備份模塊13包括節(jié)點檢測子模塊133和節(jié)點切換子模塊134,線遷移模塊14包括節(jié)點檢測子模塊144和節(jié)點切換子模塊 145。
[0156]所述的系統(tǒng)還包括監(jiān)控模塊15,可以使用PYTHON語言自組開發(fā),主要負責(zé)整個系統(tǒng)內(nèi)事務(wù)正常運轉(zhuǎn)的檢查,以及實例相關(guān)狀態(tài)數(shù)據(jù)和性能數(shù)據(jù)的收集。
[0157]其中,所述監(jiān)控模塊15包括:
[0158]一致性檢測子模塊151,用于在系統(tǒng)運行過程中檢測并清理存儲節(jié)點和對應(yīng)模塊中不一致的數(shù)據(jù);
[0159]所述系統(tǒng)的一致性檢查,即在系統(tǒng)運行過程中,可能會出現(xiàn)存儲節(jié)點與系統(tǒng)對應(yīng)各個模塊中的數(shù)據(jù)不一致的情況,這有可能是任務(wù)在執(zhí)行過程中遺留下來的問題,因此需要清理這些不一致數(shù)據(jù),以防止系統(tǒng)內(nèi)資源混亂。
[0160]狀態(tài)及性能監(jiān)控子模塊152,用于收集并監(jiān)控所有存儲節(jié)點和實例的狀態(tài)數(shù)據(jù)和性能數(shù)據(jù);
[0161]監(jiān)控模塊可以收集所有存儲節(jié)點和實例狀態(tài)數(shù)據(jù),例如實例是否可用,復(fù)制進程是否正常,存儲節(jié)點是否可用等。
[0162]監(jiān)控模塊還可以收集存儲節(jié)點和實例的性能數(shù)據(jù),例如存儲節(jié)點的CPU (CentralProcessing Unit)負載,IO (Input/Output)使用率,存儲節(jié)點的MEM (memory,主物理內(nèi)存)使用占比,實例內(nèi)存使用率,實例CPU使用率,實例所占IO資源等。
[0163]空間檢查子模塊153,用于當(dāng)檢測到用戶的使用空間超出預(yù)設(shè)范圍后,將用戶權(quán)限修改為只讀;
[0164]若檢測到用戶所使用空間超出預(yù)設(shè)范圍,根據(jù)具體的情況和設(shè)置,可以將用戶的權(quán)限更改成只讀。
[0165]流量統(tǒng)計子模塊154,用于統(tǒng)計每個存儲節(jié)點上各個實例的網(wǎng)絡(luò)流量數(shù)據(jù);
[0166]監(jiān)控模塊還可以收集匯總網(wǎng)絡(luò)流量信息。系統(tǒng)在實際執(zhí)行中需要對每個實例所使用的網(wǎng)絡(luò)流量進行統(tǒng)計,以作分析匯總。可以在每個存儲節(jié)點上執(zhí)行收集,并把所有數(shù)據(jù)集中到監(jiān)控模塊的服務(wù)端進行匯總;
[0167]故障報警子模塊155,用于當(dāng)檢測到異常情況時,執(zhí)行故障報警操作。
[0168]監(jiān)控模塊具有異常報警功能,當(dāng)檢測到異常情況時,監(jiān)控模塊可以執(zhí)行故障報警操作,及時地通知維護人員處理。比如有存儲節(jié)點的物理硬件有故障,有可能還會導(dǎo)致宕機,或者系統(tǒng)在運行過程中某個任務(wù)失敗等。
[0169]所述的系統(tǒng)還包括:數(shù)據(jù)鏈路模塊16,用于在用戶訪問實例時處理數(shù)據(jù)鏈路的問題。
[0170]用戶在成功申請一個實例后,可以得到對應(yīng)的信息,例如:[0171]主機:abed,mysql.rds.com ;端口:3306 ;用戶:userl ;密碼:passwdl。
[0172]域名系統(tǒng)子模塊161,用于將網(wǎng)絡(luò)中所有主機的域名轉(zhuǎn)換為對應(yīng)IP地址并保存;
[0173]為了用戶能夠通過INTERNET (國際互聯(lián)絡(luò))訪問對應(yīng)的實例,本申請所述的系統(tǒng)需要把用戶指定的域名廣播到廣域網(wǎng)上,這正是域名系統(tǒng)子模塊161(Domain Name Service,DNS)的作用。當(dāng)系統(tǒng)成功建立一個域名后,域名系統(tǒng)子模塊161將網(wǎng)絡(luò)中所有主機的域名轉(zhuǎn)換為對應(yīng)IP地址并保存,還負責(zé)把其廣播出去,當(dāng)然域名信息被改后或刪除,域名系統(tǒng)子模塊161同樣會把變更信息廣播出去,以便讓每個用戶都知道。
[0174]參照圖6,給出了本申請實施例所述域名系統(tǒng)子模塊工作示意圖。
[0175]由分布在3個不同機房的服務(wù)器構(gòu)成所述域名系統(tǒng)子模塊161,可以通過API端口對IP端口執(zhí)行創(chuàng)建、刪除、修改和查詢等操作,然后將操作完成后的IP端口廣播到網(wǎng)絡(luò)中,用戶登錄域名時可以轉(zhuǎn)換為對應(yīng)IP地址。
[0176]所述DNS集群可以由多臺高性能服務(wù)器(PC SERVER)組成,例如由3臺高性能服務(wù)器構(gòu)成,并分布在不同的機房中,因此只有當(dāng)三個機房的三臺服務(wù)器同時停止服務(wù),整個DNS服務(wù)才會發(fā)生故障,這樣的可能性只有99.9999%,因此系統(tǒng)運行非常的安全和穩(wěn)定。
[0177]虛擬服務(wù)器子模塊162,用于構(gòu)建并存儲公網(wǎng)IP端口和真實IP端口之間的映射關(guān)系,實現(xiàn)各個存儲節(jié)點的負載均衡,防止DDOS分布式拒絕服務(wù)攻擊,并進行流量控制。
[0178]用戶通過域名系統(tǒng)子模塊161解析到所要訪問的公網(wǎng)IP后,就需要虛擬服務(wù)器子模塊162 了。
[0179]首先簡單介紹一下虛擬服務(wù)器子模塊162,虛擬服務(wù)器是Linux Virtual Server,英文縮寫為LVS,即Linux虛擬服務(wù)器,是一個虛擬的服務(wù)器集群。
[0180]目前Linux虛擬服務(wù)器有三種IP負載均衡技術(shù),分別為VS/NAT(Virtual Servervia Network Address Translation,網(wǎng)絡(luò)地址轉(zhuǎn)換實現(xiàn)虛擬服務(wù)器);VS/TUN (VirtualServer via IP TunnelingIP,隧道實現(xiàn)虛擬服務(wù)器);VS/DR (Virtual Server via DirectRouting,直接路由實現(xiàn)虛擬服務(wù)器)。
[0181]本申請中可以使用了其中的VS/DR技術(shù),作為前端訪問的第一層,其承載著IP映射,端口轉(zhuǎn)發(fā),防火墻,流量控制等功能。
[0182]本申請中用戶看到的端口是公網(wǎng)IP的服務(wù)端口,這是因為本申請采用了多實例技術(shù)及端口映射技術(shù),因此實例真正的服務(wù)端口可能并不會與公網(wǎng)IP的服務(wù)端口一樣。這樣做的有點包括:
[0183]I)出于安全考慮,本申請并不會把運行實例的私網(wǎng)物理主機直接暴露給用戶和網(wǎng)絡(luò),因此需要實現(xiàn)IP映射;
[0184]2)可能在一臺主機即一個存儲節(jié)點上,可能啟動了幾十個甚至上百個實例,因此所以并不能保證公網(wǎng)IP端口與實際運行的存儲節(jié)點的IP端口是保持一致的;
[0185]2)用戶可以根據(jù)自己的需要設(shè)置對應(yīng)的IP端口,這可能出于方便或安全因素,總之本申請可以向用戶提供了用戶想要的各種環(huán)境。
[0186]參照圖7,給出了本申請實施例所述虛擬服務(wù)器子模塊中IP端口映射示意圖。
[0187]用戶登錄公網(wǎng)的IP端口:110.18.11.12:3306,通過虛擬服務(wù)器子模塊162可以映射到對應(yīng)真實的IP端口 192.18.0.45。其中,在虛擬服務(wù)器子模塊162中存儲有公網(wǎng)的IP端口和真實的IP端口的映射關(guān)系,例如圖7中通過公網(wǎng)的IP端口后面的3306,即可映射到對應(yīng)真實的IP端口上。
[0188]當(dāng)然端口映射只是虛擬服務(wù)器子模塊162對應(yīng)功能的一部分而已,其還具有負載均衡,防DDOS攻擊,流量控制等功能。
[0189]例如,某個用戶的實例,由于遭到了黑客的攻擊,黑客會不斷地大量向該服務(wù)端口發(fā)送請求,而真正用戶的請求就會被中斷或響應(yīng)緩慢。此時通過虛擬服務(wù)器子模塊162的流量探測功能可以發(fā)現(xiàn)這種行為,并把目標IP置于黑名單中。
[0190]另外,有些用戶的流量確實非常的大,需要進行控制以免影響其他用戶的使用,此時需要用到虛擬服務(wù)器子模塊162的流量控制功能。
[0191]參照圖8,給出了本申請優(yōu)選實施例所述一種數(shù)據(jù)庫的遠程數(shù)據(jù)服務(wù)系統(tǒng)示意圖。
[0192]本申請包括兩種操作方法,一是用戶數(shù)據(jù)操作體系,二是實例管理操作體系。
[0193]用戶操作數(shù)據(jù)體系:用戶可以通過Mysql-client或第三方數(shù)據(jù)庫管理工具通過虛擬服務(wù)器子模塊162連接到對應(yīng)的用戶實例進行數(shù)據(jù)操作??梢詫δ硞€存儲節(jié)點進行增加表,刪除表,增加數(shù)據(jù),刪除數(shù)據(jù),更改數(shù)據(jù)等操作。如為方便管理我們給用戶提供域名+PORT的連接串,用戶只要能夠連接網(wǎng)絡(luò),就可以連接到對應(yīng)的存儲節(jié)點(數(shù)據(jù)庫)。即圖8中用戶通過虛擬服務(wù)器子模塊162對存儲節(jié)點執(zhí)行操作的數(shù)據(jù)通路,由直線..一”構(gòu)成數(shù)據(jù)通路。操作證行結(jié)束后數(shù)據(jù)和反饋信息會直接由存儲節(jié)點返回給用戶。
[0194]其中,所述用戶實例是在平臺上存在的虛擬概念,一個用戶實例對應(yīng)兩個實例。
[0195]實例管理操作體系:用戶可以通過WEB/ΑΡΙ對自己的實例進行操作;比如增加實例,刪除實例,備份,查看性能數(shù)據(jù)等。即圖8中用戶通過WEB/ΑΡΙ連接到任務(wù)調(diào)度模塊11進行任務(wù)調(diào)度的數(shù)據(jù)通路,由直線“一一”構(gòu)成數(shù)據(jù)通路。
[0196]其中,還包括任務(wù)調(diào)度模塊調(diào)度各個模塊執(zhí)行對應(yīng)的任務(wù)的數(shù)據(jù)通路,由直線 構(gòu)成數(shù)據(jù)通路。
[0197]其中,API的英文全拼為Application Programming Interface,即應(yīng)用程序編程接口。WEB指的是網(wǎng)絡(luò)。
[0198]現(xiàn)有技術(shù)采用虛擬機的RDS服務(wù)中,實例進程建立在獨立的虛擬機上,數(shù)據(jù)庫存儲使用EBS (Elastic Block Store,彈性塊存儲技術(shù))共享存儲。由于每個虛擬機都要運行操作系統(tǒng)(Operating System, OS),開銷很大,因此其單主機的利用率比較低。
[0199]本申請采用多實例技術(shù),在單主機的資源利用率來看比虛擬機技術(shù)高20以上,另外針對單主機可分割性而言,本申請由于不需要為每個實例分配OS所需要CPU,內(nèi)存,磁盤資源,所以對相同配置下,本申請可以在能在單主機上運行更多的“數(shù)據(jù)庫實例”。
[0200]虛擬機的RDS服務(wù)的存儲使用掛載EBS的模式,其最大的問題是性能會受約束(如,網(wǎng)絡(luò)延時、EBS本身內(nèi)部同步等)。而本申請采用的是本地高性能磁盤陣列,在響應(yīng)時間和性能上占絕對優(yōu)勢。
[0201]基于云技術(shù)的概念,可以建立本申請所述的數(shù)據(jù)庫遠程數(shù)據(jù)服務(wù)系統(tǒng)。首先介紹
云計算。
[0202]所述云計算(cloud computing)是基于互聯(lián)網(wǎng)的服務(wù)的增加、使用和交付模式,通常涉及通過互聯(lián)網(wǎng)來提供動態(tài)易擴展且經(jīng)常是虛擬化的資源。云計算提供商往往提供通用的網(wǎng)絡(luò)業(yè)務(wù)應(yīng)用,可以通過瀏覽器等軟件或者其他Web服務(wù)來訪問,而軟件和數(shù)據(jù)都存儲在服務(wù)器上。通過使計算分布在大量的分布式計算機上,而非本地計算機或遠程服務(wù)器中,使得企業(yè)數(shù)據(jù)中心的運行將與互聯(lián)網(wǎng)更相似。這使得企業(yè)能夠?qū)①Y源切換到需要的應(yīng)用上,根據(jù)需求訪問計算機和存儲系統(tǒng)。
[0203]隨著云計算的推廣,基于云計算的戰(zhàn)略部署和應(yīng)用中,本申請可以運用云數(shù)據(jù)庫為用戶提供數(shù)據(jù)庫的遠程服務(wù)。
[0204]綜上所述,由于用戶服務(wù)器和數(shù)據(jù)庫的周期是非常長的,建立的方法非常繁瑣,并且效率也較低。并且,后期維護中無法確保硬件升級時,數(shù)據(jù)庫是否能夠支撐業(yè)務(wù)的執(zhí)行,數(shù)據(jù)遷移的穩(wěn)定性也得不到保證。因此,本申請?zhí)岢鲆环N數(shù)據(jù)庫的遠程數(shù)據(jù)服務(wù)系統(tǒng),包括:任務(wù)調(diào)度模塊、高可用控制模塊、備份模塊和在線遷移模塊。通過任務(wù)調(diào)度模塊可以調(diào)度任務(wù)在各模塊中穩(wěn)定、有序的執(zhí)行。同使用該系統(tǒng)還可以實現(xiàn)數(shù)據(jù)的備份和遷移,以及各存儲節(jié)點的快速切換。對用戶而言,使用本申請無需自建服務(wù)器和數(shù)據(jù)庫,節(jié)省了時間提高了效率,同時若用戶業(yè)務(wù)量增大,只需要增加存儲節(jié)點即可,數(shù)據(jù)遷移等問題都可以由系統(tǒng)完成,用戶使用非常方便,效率較高。
[0205]其次,現(xiàn)有技術(shù)中存在虛擬平臺的RDS服務(wù),是將實例建立在虛擬機上,但是虛擬機中的資源不能滿足于高壓力的需求,并且當(dāng)某些用戶需要去維護數(shù)據(jù)庫時,但他們使用的虛擬機由于IO能力不夠,不能承受起其業(yè)務(wù)帶來的壓力。本申請將實例建立在物理機上,所能提供的IO能力遠超虛擬機至少10倍以上,能夠更高的承受起其業(yè)務(wù)帶來的壓力。
[0206]再次,虛擬平臺本身不提供數(shù)據(jù)庫備份,用戶需要自己去制定備份計劃,并把備份數(shù)據(jù)放到其他位置存儲。而本申請自帶了備份模塊,用戶可以自由配置備份保留策略以備份時間,不需考慮備份、異機存儲等問題。
[0207]再次,用戶使用虛擬平臺時,通常只會申請一個虛擬機來承擔(dān)前端業(yè)務(wù)和數(shù)據(jù)庫服務(wù)。其中,若前端業(yè)務(wù)丟了,因為都是一些配置性的文件,不會造成重大的影響。而數(shù)據(jù)庫則是真正的價值所在,若虛擬機數(shù)據(jù)丟失,就會產(chǎn)生重大的影響。而本申請除了在每天晚上提供異機備份外,還提供雙節(jié)點間的實時備份,全面保護用戶數(shù)據(jù)安全,并采用自主研發(fā)的高可用控制模塊,檢測節(jié)點運行是否健康,并保證兩個節(jié)點間的秒級切換。
[0208]參照圖9,給出了本申請實施例一種遠程數(shù)據(jù)服務(wù)系統(tǒng)中的任務(wù)調(diào)度方法流程圖。
[0209]相應(yīng)的,本申請還提供了一種遠程數(shù)據(jù)服務(wù)系統(tǒng)中的任務(wù)調(diào)度方法,包括:
[0210]步驟101,任務(wù)調(diào)度模塊接收用戶通過網(wǎng)絡(luò)或API接口發(fā)送的任務(wù);
[0211]步驟102,通過檢測所述任務(wù)針對實例所擁有的互斥鎖,確定所述任務(wù)是否與當(dāng)前運行的任務(wù)無沖突;
[0212]其中,檢測所述任務(wù)針對實例所擁有的互斥鎖,其中所述互斥鎖包括獨占鎖和共孚鎖;
[0213]若所述任務(wù)針對實例擁有獨占鎖,并且當(dāng)前運行的任務(wù)沒有占用所述實例,則所述任務(wù)與當(dāng)前運行的任務(wù)無沖突;
[0214]若所述任務(wù)針對實例擁有獨占鎖,但當(dāng)前運行的任務(wù)占用了所述實例,則所述任務(wù)與當(dāng)前運行的任務(wù)有沖突;
[0215]若檢測所述任務(wù)對應(yīng)的實例擁有共享鎖,則所述任務(wù)與當(dāng)前運行的任務(wù)無沖突。
[0216]若所述任務(wù)與當(dāng)前運行的任務(wù)無沖突,則執(zhí)行步驟104 ;若所述任務(wù)與當(dāng)前運行的任務(wù)有沖突,則執(zhí)行步驟103。
[0217]步驟103,等待當(dāng)前運行的任務(wù)運行完畢;[0218]步驟104,調(diào)度所述任務(wù)到相應(yīng)的模塊進行處理。
[0219]其中,
[0220]若所述任務(wù)為執(zhí)行切換的任務(wù),則調(diào)度所述任務(wù)到高可用控制模塊,執(zhí)行步驟105 ;
[0221]若所述任務(wù)為執(zhí)行備份的任務(wù),則調(diào)度所述任務(wù)到備份模塊,執(zhí)行步驟106 ;
[0222]若所述任務(wù)為執(zhí)行遷移的任務(wù),則調(diào)度所述任務(wù)到在線遷移模塊,執(zhí)行步驟107。
[0223]步驟105,通知虛擬服務(wù)器子模塊將IP端口在主存儲節(jié)點和備存儲節(jié)點之間進行切換。
[0224]步驟106,備份模塊根據(jù)配置將對應(yīng)的實例數(shù)據(jù)分片存儲到至少一個存儲節(jié)點上。
[0225]步驟107,獲取備份模塊中原始存儲節(jié)點的備份實例數(shù)據(jù);
[0226]步驟108,通知備份模塊在目標存儲節(jié)點上執(zhí)行對應(yīng)的備份操作;
[0227]步驟109,目標存儲節(jié)點上的備份完成后,將原始存儲節(jié)點和目標存儲節(jié)點的實例數(shù)據(jù)進行同步;
[0228]步驟110,通知虛擬服務(wù)器子模塊將IP端口從原始存儲節(jié)點切換到目標存儲節(jié)點上。
[0229]步驟111,接收并記錄返回的任務(wù)狀態(tài)數(shù)據(jù),所述任務(wù)狀態(tài)數(shù)據(jù)包括執(zhí)行成功和執(zhí)行失敗。
[0230]優(yōu)選的,所述高可用控制模塊的處理方法還包括:
[0231]步驟201,高可用控制模塊間隔一定時間并發(fā)輪循各個存儲節(jié)點上的所有實例;
[0232]步驟202,輪循中檢測存儲節(jié)點是否存在故障;
[0233]步驟203,若存儲節(jié)點存在故障,則采用采用無故障的存儲節(jié)點接管故障存儲節(jié)點的任務(wù);
[0234]其中,所述檢測存儲節(jié)點是否存在故障方法包括:
[0235]檢測各個存儲節(jié)點上的實例是否存在,或,檢測各個存儲節(jié)點上的實例端口是否存在響應(yīng),或,模擬應(yīng)用執(zhí)行更新操作。
[0236]所選的所述的方法還包括:
[0237]監(jiān)控模塊檢測整個系統(tǒng)內(nèi)事務(wù)正常運轉(zhuǎn),并收集實例相關(guān)狀態(tài)數(shù)據(jù)和性能數(shù)據(jù)。
[0238]監(jiān)控模塊檢測對系統(tǒng)進行一致性檢測,狀態(tài)及性能監(jiān)控,空間檢查,流量統(tǒng)計和故
障報警等
[0239]數(shù)據(jù)鏈路模塊在用戶訪問實例時處理數(shù)據(jù)鏈路的問題。
[0240]包括:將網(wǎng)絡(luò)中所有主機的域名轉(zhuǎn)換為對應(yīng)IP地址并保存,構(gòu)建并存儲公網(wǎng)IP端口和真實IP端口之間的映射關(guān)系,實現(xiàn)各個存儲節(jié)點的負載均衡,防止DDOS分布式拒絕服務(wù)攻擊,并進行流量控制等。
[0241]對于方法實施例而言,由于其與系統(tǒng)實施例基本相似,所以描述的比較簡單,相關(guān)之處參見系統(tǒng)實施例的部分說明即可。
[0242]本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。
[0243]本申請可以在由計算機執(zhí)行的計算機可執(zhí)行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計算環(huán)境中實踐本申請,在這些分布式計算環(huán)境中,由通過通信網(wǎng)絡(luò)而被連接的遠程處理設(shè)備來執(zhí)行任務(wù)。在分布式計算環(huán)境中,程序模塊可以位于包括存儲設(shè)備在內(nèi)的本地和遠程計算機存儲介質(zhì)中。[0244]最后,還需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、商品或者設(shè)備中還存在另外的相同要素。
[0245]以上對本申請所提供的一種數(shù)據(jù)庫的遠程數(shù)據(jù)服務(wù)系統(tǒng),以及一種遠程數(shù)據(jù)服務(wù)系統(tǒng)中的任務(wù)調(diào)度方法,進行了詳細介紹,本文中應(yīng)用了具體個例對本申請的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本申請的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請的思想,在【具體實施方式】及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本申請的限制。
【權(quán)利要求】
1.一種數(shù)據(jù)庫的遠程數(shù)據(jù)服務(wù)系統(tǒng),其特征在于,包括:任務(wù)調(diào)度模塊、高可用控制模塊、備份模塊和在線遷移模塊,其中, 所述任務(wù)調(diào)度模塊包括: 接收子模塊,用于接收用戶通過網(wǎng)絡(luò)或API接口發(fā)送的任務(wù); 互斥檢查子模塊,用于針對接收的任務(wù),通過檢測所述任務(wù)針對實例所擁有的互斥鎖,確定所述任務(wù)是否與當(dāng)前運行的任務(wù)無沖突; 調(diào)度子模塊,用于針對與當(dāng)前運行的任務(wù)無沖突的任務(wù),調(diào)度所述任務(wù)到相應(yīng)的模塊進行處理; 所述高可用控制模塊包括: 切換子模塊,用于接收到任務(wù)調(diào)度模塊調(diào)度的執(zhí)行切換的任務(wù)后,發(fā)送將IP端口在主存儲節(jié)點和備存儲節(jié)點之間進行切換的命令; 所述備份模塊包括: 存儲子模塊,用于接收到任務(wù)調(diào)度模塊調(diào)度的執(zhí)行備份的任務(wù)后,根據(jù)配置將對應(yīng)的實例數(shù)據(jù)分片存儲到至少一個存儲節(jié)點上; 所述在線遷移模塊包括: 獲取子模塊,用于接收到任務(wù)調(diào)度模塊調(diào)度的執(zhí)行遷移的任務(wù)后,從備份模塊中獲取原始存儲節(jié)點的備份實例數(shù)據(jù); 同步子模塊,用于目標存`儲節(jié)點上的備份完成后,將原始存儲節(jié)點和目標存儲節(jié)點的實例數(shù)據(jù)進行同步; 通知子模塊,用于通知備份模塊在目標存儲節(jié)點上執(zhí)行對應(yīng)的備份操作,并發(fā)出將IP端口從原始存儲節(jié)點切換到目標存儲節(jié)點上的通知。
2.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述高可用控制模塊,還包括: 輪循子模塊,用于間隔一定時間并發(fā)輪循各個存儲節(jié)點上的所有實例; 故障檢測子模塊,用于輪循中檢測存儲節(jié)點是否存在故障; 所述切換子模塊,還用于針對故障的存儲節(jié)點,采用無故障的存儲節(jié)點接管故障存儲節(jié)點的任務(wù)。
3.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述任務(wù)調(diào)度模塊、高可用控制模塊、備份模塊和線遷移模塊,都是由若干個處理節(jié)點構(gòu)成的集群,所述的每個模塊還包括: 節(jié)點檢測子模塊,通過處理節(jié)點之間的心跳通信,檢測各個處理節(jié)點是否正常運行; 節(jié)點切換子模塊,針對非正常運行的處理節(jié)點,切換至正常運行的處理節(jié)點,并接管對應(yīng)所述非正常運行的處理節(jié)點的任務(wù)。
4.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述的系統(tǒng)還包括監(jiān)控模塊,其中,所述監(jiān)控模塊包括: 一致性檢測子模塊,用于在系統(tǒng)運行過程中檢測并清理存儲節(jié)點和對應(yīng)模塊中不一致的數(shù)據(jù); 狀態(tài)及性能監(jiān)控子模塊,用于收集并監(jiān)控所有存儲節(jié)點和實例的狀態(tài)數(shù)據(jù)和性能數(shù)據(jù); 空間檢查子模塊,用于當(dāng)檢測到用戶的使用空間超出預(yù)設(shè)范圍后,將用戶權(quán)限修改為只讀;流量統(tǒng)計子模塊,用于統(tǒng)計每個存儲節(jié)點上各個實例的網(wǎng)絡(luò)流量數(shù)據(jù); 故障報警子模塊,用于當(dāng)檢測到異常情況時,執(zhí)行故障報警操作。
5.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述的系統(tǒng)還包括:數(shù)據(jù)鏈路模塊,用于在用戶訪問實例時處理數(shù)據(jù)鏈路的問題,包括: 域名系統(tǒng)子模塊,用于將網(wǎng)絡(luò)中所有主機的域名轉(zhuǎn)換為對應(yīng)IP地址并保存; 虛擬服務(wù)器子模塊,用于構(gòu)建并存儲公網(wǎng)IP端口和真實IP端口之間的映射關(guān)系,實現(xiàn)各個存儲節(jié)點的負載均衡,防止DDOS分布式拒絕服務(wù)攻擊,并進行流量控制。
6.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述任務(wù)調(diào)度模塊還包括: 狀態(tài)返回子模塊,用于任務(wù)執(zhí)行完畢后,接收并記錄返回的任務(wù)狀態(tài)數(shù)據(jù),所述任務(wù)狀態(tài)數(shù)據(jù)包括執(zhí)行成功和執(zhí)行失敗。
7.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述備份模塊還包括: 刪除子模塊,用于根據(jù)用戶設(shè)定的備份保留策略,自動刪除過期的備份數(shù)據(jù);
8.—種遠程數(shù)據(jù)服務(wù)系統(tǒng)中的任務(wù)調(diào)度方法,其特征在于,包括權(quán)利要求1至7任一所述的系統(tǒng),所述的方法包括: 任務(wù)調(diào)度模塊接收用戶通過網(wǎng)絡(luò)或API接口發(fā)送的任務(wù); 通過檢測所述任務(wù)針對實例所擁有的互斥鎖,確定所述任務(wù)是否與當(dāng)前運行的任務(wù)無沖關(guān); 若所述任務(wù)與當(dāng)前運行的任務(wù)無沖突,則調(diào)度所述任務(wù)到相應(yīng)的模塊進行處理;` 若所述任務(wù)與當(dāng)前運行的任務(wù)有沖突,則等待當(dāng)前運行的任務(wù)運行完畢后,調(diào)度所述任務(wù)到相應(yīng)的模塊進行處理; 其中, 若所述任務(wù)為執(zhí)行切換的任務(wù),則調(diào)度所述任務(wù)到高可用控制模塊; 若所述任務(wù)為執(zhí)行備份的任務(wù),則調(diào)度所述任務(wù)到備份模塊; 若所述任務(wù)為執(zhí)行遷移的任務(wù),則調(diào)度所述任務(wù)到在線遷移模塊。
9.根據(jù)權(quán)利要求8所述的方法,其特征在于,通過檢測所述任務(wù)針對實例所擁有的互斥鎖,確定所述任務(wù)是否與當(dāng)前運行的任務(wù)無沖突,包括: 檢測所述任務(wù)針對實例所擁有的互斥鎖,其中所述互斥鎖包括獨占鎖和共享鎖; 若所述任務(wù)針對實例擁有獨占鎖,并且當(dāng)前運行的任務(wù)沒有占用所述實例,則所述任務(wù)與當(dāng)前運行的任務(wù)無沖突; 若所述任務(wù)針對實例擁有獨占鎖,但當(dāng)前運行的任務(wù)占用了所述實例,則所述任務(wù)與當(dāng)前運行的任務(wù)有沖突; 若檢測所述任務(wù)對應(yīng)的實例擁有共享鎖,則所述任務(wù)與當(dāng)前運行的任務(wù)無沖突。
10.根據(jù)權(quán)利要求8或9任一所述的方法,其特征在于,調(diào)度所述任務(wù)到相應(yīng)的模塊進行處理之后,還包括: 接收并記錄返回的任務(wù)狀態(tài)數(shù)據(jù),所述任務(wù)狀態(tài)數(shù)據(jù)包括執(zhí)行成功和執(zhí)行失敗。
11.根據(jù)權(quán)利要求8所述的方法,其特征在于,調(diào)度所述任務(wù)到高可用控制模塊之后,還包括: 通知虛擬服務(wù)器子模塊將IP端口在主存儲節(jié)點和備存儲節(jié)點之間進行切換。
12.根據(jù)權(quán)利要求8所述的方法,其特征在于,調(diào)度所述任務(wù)到備份模塊之后,還包括:備份模塊根據(jù)配置將對應(yīng)的實例數(shù)據(jù)分片存儲到至少一個存儲節(jié)點上。
13.根據(jù)權(quán)利要求8所述的方法,其特征在于,調(diào)度所述任務(wù)到在線遷移模塊之后,還包括: 獲取備份模塊中原始存儲節(jié)點的備份實例數(shù)據(jù); 通知備份模塊在目標存儲節(jié)點上執(zhí)行對應(yīng)的備份操作; 目標存儲節(jié)點上的備份完成后,將原始存儲節(jié)點和目標存儲節(jié)點的實例數(shù)據(jù)進行同步。 通知虛擬服務(wù)器子模塊將IP端口從原始存儲節(jié)點切換到目標存儲節(jié)點。
14.根據(jù)權(quán)利要求8所述的方法,其特征在于,所述高可用控制模塊的處理方法還包括: 高可用控制模塊間隔一定時間并發(fā)輪循各個存儲節(jié)點上的所有實例; 輪循中檢測存儲節(jié)點是否存在故障; 若存儲節(jié)點存在故障,則采用采用無故障的存儲節(jié)點接管故障存儲節(jié)點的任務(wù); 其中,所述檢測存儲節(jié)點是否存在故障方法包括: 檢測各個存儲節(jié)點上的實例是否存在,或,檢測各個存儲節(jié)點上的實例端口是否存在響應(yīng),或,模擬應(yīng)用執(zhí)行更新操作。
15.根據(jù)權(quán)利要求8所述的方法,其特征在于,還包括: 監(jiān)控模塊檢測整個系統(tǒng)內(nèi)事務(wù)正常運轉(zhuǎn),并收集實例相關(guān)狀態(tài)數(shù)據(jù)和性能數(shù)據(jù); 數(shù)據(jù)鏈路模塊在用戶訪問實例時處理數(shù)據(jù)鏈路的問題。
【文檔編號】G06F17/30GK103677967SQ201210322629
【公開日】2014年3月26日 申請日期:2012年9月3日 優(yōu)先權(quán)日:2012年9月3日
【發(fā)明者】何云飛, 阮若夷, 鐘云, 胡旭亮, 周光輝 申請人:阿里巴巴集團控股有限公司