国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種數(shù)據(jù)的遷移方法和系統(tǒng)與流程

      文檔序號:12465874閱讀:240來源:國知局
      一種數(shù)據(jù)的遷移方法和系統(tǒng)與流程

      本發(fā)明涉及計算機技術領域,尤其涉及一種數(shù)據(jù)的遷移方法和系統(tǒng)。



      背景技術:

      隨著互聯(lián)網(wǎng)網(wǎng)站的興起,傳統(tǒng)的關系數(shù)據(jù)庫在應付超大規(guī)模和高并發(fā)的社會性網(wǎng)絡服務(Social Networking Serivces,SNS)類型的web2.0純動態(tài)網(wǎng)站存在很多難以克服的問題,而非關系型的數(shù)據(jù)庫則由于其本身的特點得到了非常迅速的發(fā)展,NoSQL數(shù)據(jù)庫可以解決大規(guī)模數(shù)據(jù)集合帶來的挑戰(zhàn),尤其是大數(shù)據(jù)應用難題。

      MongoDB是一種分布式的NoSQL數(shù)據(jù)庫,旨在為網(wǎng)絡應用提供可擴展的高性能數(shù)據(jù)存儲解決方案。MongoDB介于關系數(shù)據(jù)庫和非關系數(shù)據(jù)庫之間,MongoDB支持的查詢語言非常強大,幾乎可以實現(xiàn)類似關系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對數(shù)據(jù)建立索引。

      MongoDB有三個組件:Mongos,ConfigSvr,Mongod,Mongos根據(jù)管理員設置的片鍵將數(shù)據(jù)分攤到自己管理的Mongod集群,ConfigSvr保存配置信息。MongoDB在邏輯上將一張數(shù)據(jù)庫表拆分成8192個數(shù)據(jù)塊(chunk),在MongoDB原生的遷移方案中,每個Mongos上設置一個平衡(balancer)模塊,chunk遷移由balancer模塊執(zhí)行,balancer模塊并不是一個獨立的服務,而是Mongos的一個線程模塊,Mongos在ConfigServer中通過注冊分布式鎖來保證同一時間只有一個balancer模塊在執(zhí)行。Balancer模塊對于每一個數(shù)據(jù)庫表的chunk分布,計算出這個數(shù)據(jù)庫表需要進行遷移的chunk,以及每個chunk需要遷移到哪個數(shù)據(jù)庫表上。計算的過程在BalancerPolicy類中實現(xiàn)。對于每一個數(shù)據(jù)庫表,嘗試獲得該數(shù)據(jù)庫表的分布式鎖。MongoDB的數(shù)據(jù)遷移過程中,所有的數(shù)據(jù)庫表共享同一個分布式鎖,如果獲得分布式鎖成功,則向源數(shù)據(jù)分片發(fā)起數(shù)據(jù)塊遷移命令,如果獲得分布式鎖失敗,表明該數(shù)據(jù)庫表已有正在執(zhí)行遷移任務,因此對于同一張數(shù)據(jù)庫表在同一時刻只能有一個遷移任務,即使這張數(shù)據(jù)庫表分布在不同的數(shù)據(jù)分片上,由于所有的數(shù)據(jù)庫表共享同一個分布式鎖,也只能等待前一個數(shù)據(jù)庫表使用完分布式鎖后再進行分布式鎖的分配。

      通過前述對原生MongoDB的遷移方案可知,現(xiàn)有技術至少存在如下技術缺陷:1)、現(xiàn)有的原生MongoDB遷移方案采用在線實時數(shù)據(jù)進行遷移,這就需要讀取源數(shù)據(jù)分片上的數(shù)據(jù)塊,讀取這部分數(shù)據(jù)塊時會影響用戶對Mongod的正常讀寫,導致用戶讀寫數(shù)據(jù)塊失敗。2)、原生MongoDB遷移方案中,數(shù)據(jù)的遷移受到分布式鎖的限制是一個單線程的過程,數(shù)據(jù)遷移的效率很低。



      技術實現(xiàn)要素:

      本發(fā)明實施例提供了一種數(shù)據(jù)的遷移方法和系統(tǒng),用于在不影響用戶正常讀寫數(shù)據(jù)塊的情況下完成數(shù)據(jù)塊的遷移,并且具有很高的數(shù)據(jù)遷移效率。

      為解決上述技術問題,本發(fā)明實施例提供以下技術方案:

      第一方面,本發(fā)明實施例提供一種數(shù)據(jù)的遷移方法,所述數(shù)據(jù)的遷移方法應用于數(shù)據(jù)的遷移系統(tǒng),所述數(shù)據(jù)的遷移系統(tǒng)包括:中控節(jié)點、第一分片存儲單元、第二分片存儲單元、數(shù)據(jù)備份子系統(tǒng),其中,

      所述第一分片存儲單元上配置有第一代理節(jié)點,所述第二分片存儲單元上配置有第二代理節(jié)點,所述第一代理節(jié)點分別和所述中控節(jié)點、所述數(shù)據(jù)備份子系統(tǒng)建立有通信連接,所述第二代理節(jié)點分別和所述中控節(jié)點、所述數(shù)據(jù)備份子系統(tǒng)建立有通信連接,所述第一分片存儲單元上存儲的數(shù)據(jù)塊通過所述第一代理節(jié)點備份到所述數(shù)據(jù)備份子系統(tǒng)中,所述第二分片存儲單元上存儲的數(shù)據(jù)塊通過所述第二代理節(jié)點備份到所述數(shù)據(jù)備份子系統(tǒng)中;

      所述數(shù)據(jù)的遷移方法,包括:

      所述中控節(jié)點向所述第一代理節(jié)點發(fā)送數(shù)據(jù)遷移命令,所述第一代理節(jié)點為數(shù)據(jù)遷移的源節(jié)點;

      所述第一代理節(jié)點接收到所述中控節(jié)點發(fā)送的數(shù)據(jù)遷移命令之后,所述第一代理節(jié)點通過所述數(shù)據(jù)備份子系統(tǒng)獲取到需要遷移的第一數(shù)據(jù)塊;

      所述第一代理節(jié)點將所述需要遷移的第一數(shù)據(jù)塊發(fā)送給所述第二代理節(jié)點,所述第二代理節(jié)點為數(shù)據(jù)遷移的目的節(jié)點;

      所述第二代理節(jié)點將所述需要遷移的第一數(shù)據(jù)塊導入到所述第二分片存儲單元中。

      第二方面,本發(fā)明實施例還提供一種數(shù)據(jù)的遷移系統(tǒng),包括:

      所述數(shù)據(jù)的遷移系統(tǒng)包括:中控節(jié)點、第一分片存儲單元、第二分片存儲單元、數(shù)據(jù)備份子系統(tǒng),其中,

      所述第一分片存儲單元上配置有第一代理節(jié)點,所述第二分片存儲單元上配置有第二代理節(jié)點,所述第一代理節(jié)點分別和所述中控節(jié)點、所述數(shù)據(jù)備份子系統(tǒng)建立有通信連接,所述第二代理節(jié)點分別和所述中控節(jié)點、所述數(shù)據(jù)備份子系統(tǒng)建立有通信連接,所述第一分片存儲單元上存儲的數(shù)據(jù)塊通過所述第一代理節(jié)點備份到所述數(shù)據(jù)備份子系統(tǒng)中,所述第二分片存儲單元上存儲的數(shù)據(jù)塊通過所述第二代理節(jié)點備份到所述數(shù)據(jù)備份子系統(tǒng)中;

      所述中控節(jié)點,用于向所述第一代理節(jié)點發(fā)送數(shù)據(jù)遷移命令,所述第一代理節(jié)點為數(shù)據(jù)遷移的源節(jié)點;

      所述第一代理節(jié)點,用于接收到所述中控節(jié)點發(fā)送的數(shù)據(jù)遷移命令之后,所述第一代理節(jié)點通過所述數(shù)據(jù)備份子系統(tǒng)獲取到需要遷移的第一數(shù)據(jù)塊;

      所述第一代理節(jié)點,還用于將所述需要遷移的第一數(shù)據(jù)塊發(fā)送給所述第二代理節(jié)點,所述第二代理節(jié)點為數(shù)據(jù)遷移的目的節(jié)點;

      所述第二代理節(jié)點,用于將所述需要遷移的第一數(shù)據(jù)塊導入到所述第二分片存儲單元中。

      從以上技術方案可以看出,本發(fā)明實施例具有以下優(yōu)點:

      在本發(fā)明實施例中,數(shù)據(jù)的遷移系統(tǒng)中包括:中控節(jié)點、第一分片存儲單元、第二分片存儲單元、數(shù)據(jù)備份子系統(tǒng),該數(shù)據(jù)備份子系統(tǒng)內(nèi)存儲有第一分片存儲單元的數(shù)據(jù)塊和第二分片存儲單元的數(shù)據(jù)塊。中控節(jié)點向第一代理節(jié)點發(fā)送數(shù)據(jù)遷移命令,第一代理節(jié)點為數(shù)據(jù)遷移的源節(jié)點;第一代理節(jié)點接收到中控節(jié)點發(fā)送的數(shù)據(jù)遷移命令之后,第一代理節(jié)點通過數(shù)據(jù)備份子系統(tǒng)獲取到需要遷移的第一數(shù)據(jù)塊;第一代理節(jié)點將需要遷移的第一數(shù)據(jù)塊發(fā)送給第二代理節(jié)點,第二代理節(jié)點為數(shù)據(jù)遷移的目的節(jié)點;第二代理節(jié)點將需要遷移的第一數(shù)據(jù)塊導入到第二分片存儲單元中。由于數(shù)據(jù)的遷移系統(tǒng)中獨立于所有的分片存儲單元設置有中控節(jié)點,第一數(shù)據(jù)塊的遷移由中控節(jié)點來控制,不需要再受到分布式鎖的限制,因此當?shù)谝粩?shù)據(jù)塊有多個時每個第一數(shù)據(jù)塊都可以獨立完成遷移,因此數(shù)據(jù)遷移的效率很高,另外本發(fā)明實施例中第一代理節(jié)點在遷移第一數(shù)據(jù)塊時并不從第一分片存儲單元讀取,而是從數(shù)據(jù)備份子系統(tǒng)中讀取提前備份的第一數(shù)據(jù)塊,用戶仍可以正常從第一分片存儲單元完成讀寫操作。

      附圖說明

      為了更清楚地說明本發(fā)明實施例中的技術方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域的技術人員來講,還可以根據(jù)這些附圖獲得其他的附圖。

      圖1為本發(fā)明實施例提供的一種數(shù)據(jù)的遷移系統(tǒng)的組成示意圖;

      圖2為本發(fā)明實施例提供的一種數(shù)據(jù)的遷移方法的流程方框示意圖;

      圖3-a為本發(fā)明實施例中基于MongoD實現(xiàn)的數(shù)據(jù)的遷移系統(tǒng)的系統(tǒng)架構(gòu)示意圖;

      圖3-b為本發(fā)明實施例提供的數(shù)據(jù)增量備份的示意圖;

      圖4為本發(fā)明實施例提供的基于MongoD實現(xiàn)的路由廣播流程示意圖;

      圖5為本發(fā)明實施例提供的基于MongoD實現(xiàn)的數(shù)據(jù)快照恢復流程示意圖;

      圖6為本發(fā)明實施例提供的數(shù)據(jù)快照使用多線程的示意圖;

      圖7為本發(fā)明實施例提供的基于MongoD實現(xiàn)的增量備份日志恢復流程示意圖;

      圖8為本發(fā)明實施例提供的多個增量備份日志使用多個發(fā)送線程的示意圖;

      圖9為本發(fā)明實施例提供的基于MongoD實現(xiàn)的路由切換流程示意圖;

      圖10-a為本發(fā)明實施例提供的另一種數(shù)據(jù)的遷移系統(tǒng)的組成示意圖;

      圖10-b為本發(fā)明實施例提供的另一種數(shù)據(jù)的遷移系統(tǒng)的組成示意圖;

      圖11為本發(fā)明實施例提供的分片存儲單元應用于服務器的組成結(jié)構(gòu)示意圖。

      具體實施方式

      本發(fā)明實施例提供了一種數(shù)據(jù)的遷移方法和系統(tǒng),用于在不影響用戶正常讀寫數(shù)據(jù)塊的情況下完成數(shù)據(jù)塊的遷移,并且具有很高的數(shù)據(jù)遷移效率。

      為使得本發(fā)明的發(fā)明目的、特征、優(yōu)點能夠更加的明顯和易懂,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,下面所描述的實施例僅僅是本發(fā)明一部分實施例,而非全部實施例?;诒景l(fā)明中的實施例,本領域的技術人員所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。

      本發(fā)明的說明書和權(quán)利要求書及上述附圖中的術語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,以便包含一系列單元的過程、方法、系統(tǒng)、產(chǎn)品或設備不必限于那些單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過程、方法、產(chǎn)品或設備固有的其它單元。

      本發(fā)明實施例提供的數(shù)據(jù)的遷移方法具體可以應用于數(shù)據(jù)塊在分片存儲單元之間的遷移場景,用于解決現(xiàn)有技術中數(shù)據(jù)塊遷移的低效率以及影響用戶正常讀寫操作的問題。在本發(fā)明實施例提供的數(shù)據(jù)的遷移方法中,涉及到中控節(jié)點、多個分片存儲單元、數(shù)據(jù)備份子系統(tǒng)等系統(tǒng)網(wǎng)元。本發(fā)明實施例中在數(shù)據(jù)的遷移系統(tǒng)中設置一中控節(jié)點,該中控節(jié)點是調(diào)度數(shù)據(jù)塊遷移的管理設備,各個分片存儲單元之間的數(shù)據(jù)塊遷移都在中控節(jié)點的管理下完成。分片存儲單元是存儲數(shù)據(jù)分配的存儲設備,例如分片存儲單元可以是Mongod集群,也可以是其它的分布式存儲集群,例如實現(xiàn)Web服務的共享存儲集群等,在每個分片存儲單元上設置有一個代理節(jié)點(Agent),該代理節(jié)點和中控節(jié)點進行通信,用戶通過代理節(jié)點做數(shù)據(jù)監(jiān)控與模塊部署,代理節(jié)點可以完成任務分發(fā)。本發(fā)明實施例中除了使用分片存儲單元來存儲數(shù)據(jù)塊,在數(shù)據(jù)的遷移系統(tǒng)中還設置有數(shù)據(jù)備份子系統(tǒng),每個分片存儲單元中存儲的數(shù)據(jù)塊都在數(shù)據(jù)備份子系統(tǒng)中有備份,并且代理節(jié)點可以和數(shù)據(jù)備份子系統(tǒng)進行交互,完成數(shù)據(jù)塊的讀寫操作請求。例如,該數(shù)據(jù)備份子系統(tǒng)可以是分布于存儲系統(tǒng),例如分布式文件系統(tǒng)(Hadoop Distributed File System,HDFS)。

      在本發(fā)明實施例提供的數(shù)據(jù)的遷移系統(tǒng)中,請參閱圖1所示,數(shù)據(jù)的遷移方法應用于數(shù)據(jù)的遷移系統(tǒng)100,數(shù)據(jù)的遷移系統(tǒng)100包括:中控節(jié)點101、第一分片存儲單元102、第二分片存儲單元103、數(shù)據(jù)備份子系統(tǒng)104,其中,

      第一分片存儲單元102上配置有第一代理節(jié)點1021,第二分片存儲單元103上配置有第二代理節(jié)點1031,第一代理節(jié)點1021分別和中控節(jié)點101、數(shù)據(jù)備份子系統(tǒng)104建立有通信連接,第二代理節(jié)點1031分別和中控節(jié)點101、數(shù)據(jù)備份子系統(tǒng)104建立有通信連接,第一分片存儲單元102上存儲的數(shù)據(jù)塊通過第一代理節(jié)點1021備份到數(shù)據(jù)備份子系統(tǒng)104中,第二分片存儲單元103上存儲的數(shù)據(jù)塊通過第二代理節(jié)點1031備份到數(shù)據(jù)備份子系統(tǒng)104中。

      請參閱圖2所示,本發(fā)明實施例提供的數(shù)據(jù)的遷移方法,可以包括如下步驟:

      201、中控節(jié)點向第一代理節(jié)點發(fā)送數(shù)據(jù)遷移命令,第一代理節(jié)點為數(shù)據(jù)遷移的源節(jié)點。

      在本發(fā)明實施例中,中控節(jié)點是調(diào)度數(shù)據(jù)塊遷移的管理設備,各個分片存儲單元之間的數(shù)據(jù)塊遷移都在中控節(jié)點的管理下完成。當?shù)谝环制鎯卧枰w移數(shù)據(jù)時,第一分片存儲單元中配置的第一代理節(jié)點為數(shù)據(jù)遷移的源節(jié)點,中控節(jié)點向第一代理節(jié)點發(fā)送數(shù)據(jù)遷移命令。該數(shù)據(jù)遷移命令中可以攜帶需要遷移的數(shù)據(jù)塊標識。舉例說明如下,分布式存儲集群中包括有多個分片存儲單元,當分布式存儲集群需要擴容時,新上架一個分片存儲單元,此時就需要將已有的分片存儲單元上保存的部分數(shù)據(jù)塊搬遷到新的分片存儲單元上,從而實現(xiàn)數(shù)據(jù)均衡。又如某個分片存儲單元的負載過低,為了節(jié)約成本,分布式存儲集群進行縮容,將需要下架的分片存儲單元上的數(shù)據(jù)塊均衡的搬遷到其他分片存儲單元上。

      在本發(fā)明實施例中,中控節(jié)點可以作為數(shù)據(jù)塊遷移的控制端,各個代理節(jié)點和中控節(jié)點建立有通信連接,各個代理節(jié)點在中控節(jié)點的控制下完成數(shù)據(jù)塊遷移,數(shù)據(jù)塊遷移由中控節(jié)點來控制,不需要再受到分布式鎖的限制,有數(shù)據(jù)塊需要遷移時每個數(shù)據(jù)塊都可以獨立完成遷移,因此數(shù)據(jù)遷移的效率很高。舉例說明如下,在數(shù)據(jù)遷移的系統(tǒng)中有兩個分片存儲單元都需要數(shù)據(jù)塊遷移,則中控節(jié)點可以按照步驟201的方式向兩個分片存儲單元上的代理節(jié)點分別發(fā)送數(shù)據(jù)遷移命令。

      202、第一代理節(jié)點接收到中控節(jié)點發(fā)送的數(shù)據(jù)遷移命令之后,第一代理節(jié)點通過數(shù)據(jù)備份子系統(tǒng)獲取到需要遷移的第一數(shù)據(jù)塊。

      在本發(fā)明實施例中,第一代理節(jié)點分別和中控節(jié)點、數(shù)據(jù)備份子系統(tǒng)建立有通信連接,若該第一代理節(jié)點接收到中控節(jié)點的數(shù)據(jù)遷移命令,由于數(shù)據(jù)備份子系統(tǒng)內(nèi)存儲有第一分片存儲單元的數(shù)據(jù)塊,則第一代理節(jié)點可以通過數(shù)據(jù)備份子系統(tǒng)獲取到在數(shù)據(jù)備份子系統(tǒng)備份存儲的第一數(shù)據(jù)塊,此時第一分片存儲單元中雖然正在執(zhí)行對第一數(shù)據(jù)塊的遷移指令,但是第一代理節(jié)點并不影響第一分片存儲單元對用戶正常操作的響應。

      203、第一代理節(jié)點將需要遷移的第一數(shù)據(jù)塊發(fā)送給第二代理節(jié)點,第二代理節(jié)點為數(shù)據(jù)遷移的目的節(jié)點。

      在本發(fā)明實施例中,第一代理節(jié)點確定需要遷移的第一數(shù)據(jù)塊之后,若該第一數(shù)據(jù)塊需要遷移到第二分片存儲單元,第二分片存儲單元上配置有第二代理節(jié)點,該第二代理節(jié)點為數(shù)據(jù)遷移的目的節(jié)點。第一代理節(jié)點可以將需要遷移的第一數(shù)據(jù)塊發(fā)送給第二代理節(jié)點。例如第一代理節(jié)點在中控節(jié)點的調(diào)度下完成第一代理節(jié)點和第二代理節(jié)點的通信。又如,第一代理節(jié)點和第二代理節(jié)點通過內(nèi)部通信協(xié)議完成第一數(shù)據(jù)塊的通信。

      204、第二代理節(jié)點將需要遷移的第一數(shù)據(jù)塊導入到第二分片存儲單元中。

      在本發(fā)明實施例中,第二代理節(jié)點從第一代理節(jié)點接收到需要遷移的第一數(shù)據(jù)塊,然后第二代理節(jié)點再將需要遷移的第一數(shù)據(jù)塊導入到第二分片存儲單元中,從而完成第一數(shù)據(jù)塊的遷移過程。

      需要說明的是,本發(fā)明實施例中,步驟201至步驟204描述了對需要遷移的第一數(shù)據(jù)塊的遷移過程,可以理解的是,在數(shù)據(jù)的遷移系統(tǒng),若還有其它的數(shù)據(jù)塊,例如第二數(shù)據(jù)塊和第三數(shù)據(jù)塊需要遷移,則都可以按照步驟2011至步驟204對第一數(shù)據(jù)塊的遷移過程來實現(xiàn)第二數(shù)據(jù)塊以及第三數(shù)據(jù)塊的遷移,從而本發(fā)明實施例中可以實現(xiàn)多個數(shù)據(jù)塊的并發(fā)遷移。

      在本發(fā)明的一些實施例中,除了執(zhí)行前述步驟之外,本發(fā)明實施例提供的數(shù)據(jù)的遷移方法中,還包括如下步驟:

      A1、中控節(jié)點將數(shù)據(jù)庫表中的所有數(shù)據(jù)拆分為多個數(shù)據(jù)塊;

      A2、中控節(jié)點將多個數(shù)據(jù)塊中的一些數(shù)據(jù)塊發(fā)送給第一代理節(jié)點,并將多個數(shù)據(jù)塊中的其余數(shù)據(jù)塊發(fā)送給第二代理節(jié)點;

      A3、第一代理節(jié)點將接收到的一些數(shù)據(jù)塊導入到第一分片存儲單元中;

      A4、第二代理節(jié)點將接收到的另一些數(shù)據(jù)塊導入到第二分片存儲單元中。

      在本發(fā)明的前述實施例中,對于每張數(shù)據(jù)庫表的所有數(shù)據(jù),中控節(jié)點在邏輯上將所有數(shù)據(jù)拆分成多個數(shù)據(jù)塊,具體拆分的塊數(shù)與數(shù)據(jù)庫表的大小以及拆分方式有關,例如可以將一張數(shù)據(jù)表拆分為8192個數(shù)據(jù)塊(chunk)。在數(shù)據(jù)的遷移系統(tǒng)中包括:第一分片存儲單元和第二分片存儲單元,中控節(jié)點將多個數(shù)據(jù)塊分配到第一分片存儲單元和第二分片存儲單元,若在數(shù)據(jù)的遷移系統(tǒng)中還第三分片存儲單元,則中控節(jié)點也可以向第三分片存儲單元分配數(shù)據(jù)塊,此處不做限定。

      進一步的,在本發(fā)明的一些實施例中,該數(shù)據(jù)的遷移系統(tǒng)還包括:鍵值存儲設備,鍵值存儲設備和中控節(jié)點之間建立有通信連接。步驟A1中控節(jié)點將數(shù)據(jù)庫表中的所有數(shù)據(jù)拆分為多個數(shù)據(jù)塊之后,本發(fā)明實施例提供的數(shù)據(jù)的遷移方法中,還包括如下步驟:

      B1、中控節(jié)點根據(jù)多個數(shù)據(jù)塊創(chuàng)建路由表,路由表包括:多個數(shù)據(jù)塊中每個數(shù)據(jù)塊與對應的分片存儲單元的分片標識、工作狀態(tài)之間的映射關系,每個數(shù)據(jù)塊與對應的分片存儲單元的工作狀態(tài)包括:正常狀態(tài)和禁止寫入狀態(tài);

      B2、中控節(jié)點將路由表存儲到鍵值存儲設備中。

      其中,鍵值存儲設備用于存儲路由表,中控節(jié)點和鍵值存儲設備相連接,該鍵值存儲設備也可以稱為一致性存儲設備,鍵值存儲設備可以使用一致性算法保證數(shù)據(jù)的強一致性,例如鍵值存儲設備可以是Etcd,Etcd是一個高可用的鍵值存儲系統(tǒng),主要用于共享配置和服務發(fā)現(xiàn)。中控節(jié)點創(chuàng)建的路由表保存在鍵值存儲設備中,每個路由表的更改都需要修改鍵值存儲設備。在本發(fā)明實施例中,路由表包括:多個數(shù)據(jù)塊中每個數(shù)據(jù)塊與對應的分片存儲單元的分片標識、工作狀態(tài)之間的映射關系,每個數(shù)據(jù)塊與對應的分片存儲單元的工作狀態(tài)包括:正常狀態(tài)和禁止寫入狀態(tài)。例如在路由表中記錄有chunk_id->(shard_id,state)的映射關系,chunk_id表示數(shù)據(jù)塊的標識,shard_id是分片存儲單元的分片標識,state表示分片存儲單元的工作狀態(tài),每個數(shù)據(jù)塊與對應的分片存儲單元的工作狀態(tài)包括:正常狀態(tài)(NORMAL)和禁止寫入狀態(tài)(FORBID_WRITE),正常狀態(tài)指的是分片存儲單元可以為正常提供數(shù)據(jù)塊的讀寫操作請求,禁止寫入狀態(tài)指的是分片存儲單元被禁用,無法提請讀寫操作請求。

      進一步的,在前述中控節(jié)點在鍵值存儲設備中存儲路由表的場景下,在本發(fā)明的一些實施例中,步驟204第二代理節(jié)點將需要遷移的第一數(shù)據(jù)塊導入到第二分片存儲單元中之后,本發(fā)明實施例提供的數(shù)據(jù)的遷移方法中,還包括如下步驟:

      C1、第二代理節(jié)點向中控節(jié)點上報遷移成功消息;

      C2、中控節(jié)點根據(jù)遷移成功消息將路由表中記錄的第一數(shù)據(jù)塊的映射關系從第一分片存儲單元更改為第二分片存儲單元。

      其中,第一數(shù)據(jù)塊在路由表中記錄的映射關系是第一數(shù)據(jù)塊存儲在第一分片存儲單元,若第一數(shù)據(jù)塊遷移到第二分片存儲單元,則路由表需要更改,中控節(jié)點可以修改鍵值存儲設備。

      進一步的,在前述中控節(jié)點在鍵值存儲設備中存儲路由表的場景下,在本發(fā)明的一些實施例中,數(shù)據(jù)的遷移系統(tǒng)還包括:網(wǎng)關(Proxy)模塊,第一代理節(jié)點和第二代理節(jié)點都通過網(wǎng)關模塊和中控節(jié)點之間建立有通信連接。步驟C1中控節(jié)點根據(jù)遷移成功消息將路由表中記錄的第一數(shù)據(jù)塊的映射關系從第一分片存儲單元更改為第二分片存儲單元之后,本發(fā)明實施例提供的數(shù)據(jù)的遷移方法中,還包括如下步驟:

      D1、中控節(jié)點通過網(wǎng)關模塊向第一代理節(jié)點和第二代理節(jié)點廣播路由表的存儲單元更改消息。

      具體的,在第一代理節(jié)點和中控節(jié)點之間、第二代理節(jié)點和中控節(jié)點之間都部署有網(wǎng)關模塊,則中控節(jié)點與第一代理節(jié)點之間的通信可以通過網(wǎng)關模塊來完成。例如步驟C1中控節(jié)點修改鍵值存儲設備之后,中控節(jié)點向網(wǎng)關模塊發(fā)送路由表的存儲單元更改消息,網(wǎng)關模塊可以向所有的代理節(jié)點廣播路由表的存儲單元更改消息。

      進一步的,在前述中控節(jié)點在鍵值存儲設備中存儲路由表的場景下,步驟202第一代理節(jié)點通過數(shù)據(jù)備份子系統(tǒng)獲取到需要遷移的第一數(shù)據(jù)塊之前,本發(fā)明實施例提供的數(shù)據(jù)的遷移方法中,還包括如下步驟:

      E1、第一代理節(jié)點向中控節(jié)點發(fā)送封禁路由請求;

      E2、中控節(jié)點根據(jù)封禁路由請求將路由表中記錄的第一分片存儲單元的工作狀態(tài)從正常狀態(tài)更改為禁止寫入狀態(tài);

      E3、中控節(jié)點向網(wǎng)關模塊廣播路由表的工作狀態(tài)更改消息;

      E4、網(wǎng)關模塊根據(jù)路由表的工作狀態(tài)更改消息封禁對第一分片存儲單元的操作處理請求。

      其中,在數(shù)據(jù)遷移過程中,用戶在源源不斷的將數(shù)據(jù)寫入到第一分片存儲單元中,在第一分片存儲單元進行數(shù)據(jù)塊遷移之前,中控節(jié)點可以修改第一分片存儲單元的工作狀態(tài),從正常狀態(tài)更改為禁止寫入狀態(tài),網(wǎng)關模塊根據(jù)路由表的工作狀態(tài)更改消息封禁對第一分片存儲單元的操作處理請求,此時用戶無法再對第一分片存儲單元進行操作處理請求,以避免用戶將數(shù)據(jù)寫入到第一分片存儲單元,但是無法遷移到第二分片存儲單元中造成用戶數(shù)據(jù)丟失的問題。

      在本發(fā)明的一些實施例中,除了執(zhí)行前述步驟之外,本發(fā)明實施例提供的數(shù)據(jù)的遷移方法中,還包括如下步驟:

      F1、中控節(jié)點定期的向第一代理節(jié)點和第二代理節(jié)點發(fā)起備份任務;

      F2、第一代理節(jié)點根據(jù)備份任務定期的將第一分片存儲單元上存儲的數(shù)據(jù)塊備份到數(shù)據(jù)備份子系統(tǒng)中;

      F3、第二代理節(jié)點根據(jù)備份任務定期的將第二分片存儲單元上存儲的數(shù)據(jù)塊備份到數(shù)據(jù)備份子系統(tǒng)中。

      其中,數(shù)據(jù)備份子系統(tǒng)作為所有分片存儲單元的數(shù)據(jù)備份實體,中控節(jié)點可以控制各個代理節(jié)點的數(shù)據(jù)備份,例如中控節(jié)點定期的觸發(fā)備份任務,則每個代理節(jié)點都可以定期的將其所在的分片存儲單元上存儲的數(shù)據(jù)塊備份到數(shù)據(jù)備份子系統(tǒng)中,從而數(shù)據(jù)備份子系統(tǒng)可以在數(shù)據(jù)遷移過程中向代理節(jié)點提供數(shù)據(jù)塊備份,因此代理節(jié)點不需要再通過分片存儲單元進行數(shù)據(jù)塊遷移,從而不影響分片存儲單元對用戶正常讀寫操作請求的響應。

      進一步的,在本發(fā)明的一些實施例中,步驟F2第一代理節(jié)點根據(jù)備份任務定期的將第一分片存儲單元上存儲的數(shù)據(jù)塊備份到數(shù)據(jù)備份子系統(tǒng)中,具體包括:

      F21、若第一代理節(jié)點在啟動運行后第一次接收到備份任務,第一代理節(jié)點對第一分片存儲單元上存儲的當前所有數(shù)據(jù)塊進行備份從而生成數(shù)據(jù)快照,將數(shù)據(jù)快照備份到數(shù)據(jù)備份子系統(tǒng)中;

      F22、若第一代理節(jié)點不是第一次接收到備份任務,第一代理節(jié)點從第一分片存儲單元上獲取用于記錄第一分片存儲單元被修改的增量備份日志,將增量備份日志備份到數(shù)據(jù)備份子系統(tǒng)中。

      其中,本發(fā)明實施例中,數(shù)據(jù)的遷移系統(tǒng)中的所有代理節(jié)點都可以使用增量備份的方式,例如步驟F21至F22中對第一代理節(jié)點的增量備份過程進行了說明,則第二代理節(jié)點也可以按照該方式完成增量備份過程。具體的,若第一代理節(jié)點在啟動運行后第一次接收到備份任務,第一代理節(jié)點對第一分片存儲單元上存儲的當前所有數(shù)據(jù)塊進行備份從而生成數(shù)據(jù)快照,將數(shù)據(jù)快照備份到數(shù)據(jù)備份子系統(tǒng)中。若第一代理節(jié)點不是第一次接收到備份任務,第一代理節(jié)點每次從第一分片存儲單元上獲取從上一次備份到本次備份期間產(chǎn)生的增量備份日志,將增量備份日志備份到數(shù)據(jù)備份子系統(tǒng)中。例如分片存儲單元具體為MongoD存儲集群,在第一次備份時需要對MongoD存儲集群中的所有數(shù)據(jù)塊生成數(shù)據(jù)快照Snapshot,之后每次備份只需要做增量備份,第一代理節(jié)點掃描第一分片存儲單元的存儲日志就可以獲取到增量備份日志OplogDump,不需要每次都對第一分片存儲單元進行全局備份,提高數(shù)據(jù)塊的備份效率。

      在現(xiàn)有技術提供的原生MongoDB遷移方案中,一張數(shù)據(jù)庫表在同一時刻只有一個遷移任務,即使該數(shù)據(jù)庫表分在多個不同的數(shù)據(jù)分片上,也無法實現(xiàn)并發(fā)的數(shù)據(jù)塊遷移,并且原生MongoDB遷移方案中,數(shù)據(jù)的遷移受到分布式鎖的限制是一個單線程的過程,因此數(shù)據(jù)遷移的效率很低。進一步的,本發(fā)明實施例中為了解決該問題,還可以同時使用多個線程來并發(fā)的完成數(shù)據(jù)塊的遷移。在前述執(zhí)行步驟F21至步驟F22的實現(xiàn)場景下,具體的,步驟202第一代理節(jié)點通過數(shù)據(jù)備份子系統(tǒng)獲取到需要遷移的第一數(shù)據(jù)塊,包括:

      G1、第一代理節(jié)點從數(shù)據(jù)備份子系統(tǒng)獲取到需要遷移的第一數(shù)據(jù)快照;

      G2、第一代理節(jié)點將第一數(shù)據(jù)快照劃分為多個快照分塊;

      G3、第一代理節(jié)點調(diào)用線程池中的多個線程從多個快照分塊中過濾出需要遷移的快照分塊,需要遷移的快照分塊屬于第一數(shù)據(jù)塊。

      具體的,本發(fā)明實施例中,第一代理節(jié)點確定需要遷移第一數(shù)據(jù)快照時,可以將第一數(shù)據(jù)快照劃分為多個快照分塊,第一代理節(jié)點調(diào)用線程池中的多個線程從多個快照分塊中過濾出需要遷移的快照分塊,需要遷移的快照分塊屬于第一數(shù)據(jù)塊。例如,第一數(shù)據(jù)快照對應的多個快照分塊之間具有無關的特性,可以使用多個分塊過濾器同時對多個快照分塊進行過濾,則可以確定出需要遷移的快照分塊,大幅提高了數(shù)據(jù)塊遷移的效率。

      在前述執(zhí)行步驟G1至步驟G3的實現(xiàn)場景下,具體的,若數(shù)據(jù)備份子系統(tǒng)中還保存有第一分片存儲單元中的增量備份日志,如前述步驟F21至步驟F22所示的應用場景,則步驟202第一代理節(jié)點通過數(shù)據(jù)備份子系統(tǒng)獲取到需要遷移的第一數(shù)據(jù)塊,還包括:

      G4、第一代理節(jié)點調(diào)用線程池中的多個線程從多個快照分塊中過濾出需要遷移的快照分塊之后,第一代理節(jié)點從數(shù)據(jù)備份子系統(tǒng)獲取到需要遷移的第一增量備份日志;

      G5、第一代理節(jié)點將需要遷移的第一增量備份日志按照日志標識進行分組得到不同組的第一增量備份日志,不同組的第一增量備份日志屬于第一數(shù)據(jù)塊。

      其中,第一代理節(jié)點可以根據(jù)數(shù)據(jù)遷移指令從數(shù)據(jù)備份子系統(tǒng)獲取到需要遷移的第一增量備份日志,多個第一增量備份日志分別是對數(shù)據(jù)庫表中單個行的數(shù)據(jù),數(shù)據(jù)庫表內(nèi)行與行之間具有無關的特性,因此可以按照日志標識對需要遷移的第一增量備份日志進行分組,得到不同組的第一增量備份日志,不同組的第一增量備份日志屬于第一數(shù)據(jù)塊。

      在前述執(zhí)行步驟G1至步驟G3、步驟G4和步驟G5的實現(xiàn)場景下,具體的,除了數(shù)據(jù)備份子系統(tǒng)中保存的第一分片存儲單元的數(shù)據(jù)快照和增量備份日志。在數(shù)據(jù)遷移過程中,用戶在源源不斷的將數(shù)據(jù)寫入到第一分片存儲單元中,在第一分片存儲單元進行數(shù)據(jù)塊遷移之前,中控節(jié)點可以修改第一分片存儲單元的工作狀態(tài),從正常狀態(tài)更改為禁止寫入狀態(tài),在第一分片存儲單元狀態(tài)更改為禁止寫入狀態(tài)之前,仍會有數(shù)據(jù)寫入到第一分片存儲單元中,在這種實現(xiàn)場景下,步驟202第一代理節(jié)點通過數(shù)據(jù)備份子系統(tǒng)獲取到需要遷移的第一數(shù)據(jù)塊,還包括:

      G6、第一代理節(jié)點從數(shù)據(jù)備份子系統(tǒng)獲取到需要遷移的第一增量備份日志之后,第一代理節(jié)點根據(jù)第一增量備份日志對應的備份時間戳從第一分片存儲單元上獲取從備份時間戳到當前時間已存儲的殘余增量日志,殘余增量日志屬于第一數(shù)據(jù)塊。

      其中,第一代理節(jié)點從數(shù)據(jù)備份子系統(tǒng)獲取到需要遷移的第一增量備份日志之后,第一代理節(jié)點從數(shù)據(jù)備份子系統(tǒng)獲取到第一增量備份日志對應的備份時間戳,第一代理節(jié)點還需要從第一分片存儲單元上獲取從備份時間戳到當前時間已存儲的殘余增量日志。舉例說明,在導入第一增量備份日志的過程中,用戶還是有數(shù)據(jù)源源不斷的寫入第一分片存儲單元,用戶的寫入會被記錄到第一分片存儲單元的日志數(shù)據(jù)中,這部分用戶的寫入數(shù)據(jù)叫做殘余增量日志。

      在前述執(zhí)行步驟G1至步驟G3、步驟G4和步驟G5、步驟G6的實現(xiàn)場景下,具體的,步驟203第一代理節(jié)點將需要遷移的第一數(shù)據(jù)塊發(fā)送給第二代理節(jié)點,包括:

      H1、第一代理節(jié)點將需要遷移的快照分塊發(fā)送給第二代理節(jié)點;

      H2、第一代理節(jié)點對不同組的第一增量備份日志使用不同的發(fā)送線程同時向第二代理節(jié)點發(fā)送;

      H3、第一代理節(jié)點將殘余增量日志發(fā)送給第二代理節(jié)點。

      其中,由前述的具體應用場景說明可知,

      其中,需要遷移的快照分塊屬于第一數(shù)據(jù)塊,不同組的第一增量備份日志屬于第一數(shù)據(jù)塊,殘余增量日志屬于第一數(shù)據(jù)塊,因此第一代理節(jié)點可以分別向第二代理節(jié)點發(fā)送需要遷移的快照分塊、不同組的第一增量備份日志、殘余增量日志,由于第一代理節(jié)點對不同組的第一增量備份日志使用不同的發(fā)送線程同時向第二代理節(jié)點發(fā)送,因此可以充分利用數(shù)據(jù)庫表中不同行之間的無關特性,通過多個發(fā)送線程的并用可以提高數(shù)據(jù)塊的遷移效率。

      通過以上實施例對本發(fā)明實施例的描述可知,數(shù)據(jù)的遷移系統(tǒng)中包括:中控節(jié)點、第一分片存儲單元、第二分片存儲單元、數(shù)據(jù)備份子系統(tǒng),該數(shù)據(jù)備份子系統(tǒng)內(nèi)存儲有第一分片存儲單元的數(shù)據(jù)塊和第二分片存儲單元的數(shù)據(jù)塊。中控節(jié)點向第一代理節(jié)點發(fā)送數(shù)據(jù)遷移命令,第一代理節(jié)點為數(shù)據(jù)遷移的源節(jié)點;第一代理節(jié)點接收到中控節(jié)點發(fā)送的數(shù)據(jù)遷移命令之后,第一代理節(jié)點通過數(shù)據(jù)備份子系統(tǒng)獲取到需要遷移的第一數(shù)據(jù)塊;第一代理節(jié)點將需要遷移的第一數(shù)據(jù)塊發(fā)送給第二代理節(jié)點,第二代理節(jié)點為數(shù)據(jù)遷移的目的節(jié)點;第二代理節(jié)點將需要遷移的第一數(shù)據(jù)塊導入到第二分片存儲單元中。由于數(shù)據(jù)的遷移系統(tǒng)中獨立于所有的分片存儲單元設置有中控節(jié)點,第一數(shù)據(jù)塊的遷移由中控節(jié)點來控制,不需要再受到分布式鎖的限制,因此當?shù)谝粩?shù)據(jù)塊有多個時每個第一數(shù)據(jù)塊都可以獨立完成遷移,因此數(shù)據(jù)遷移的效率很高,另外本發(fā)明實施例中第一代理節(jié)點在遷移第一數(shù)據(jù)塊時并不從第一分片存儲單元讀取,而是從數(shù)據(jù)備份子系統(tǒng)中讀取提前備份的第一數(shù)據(jù)塊,用戶仍可以正常從第一分片存儲單元完成讀寫操作。

      為便于更好的理解和實施本發(fā)明實施例的上述方案,下面舉例相應的應用場景來進行具體說明。

      接下來以本發(fā)明實施例中分片存儲單元具體為MongoD集群為例,請參閱圖3-a所示,在本發(fā)明實施例基于MongoD實現(xiàn)的數(shù)據(jù)的遷移系統(tǒng)中,該數(shù)據(jù)的遷移系統(tǒng)中對于每張數(shù)據(jù)庫表的數(shù)據(jù),在邏輯上將數(shù)據(jù)拆分成8192個chunk,這些chunk放在一致性存儲設備Etcd中,并且通過中控節(jié)點下發(fā)的方式在適當?shù)臅r間推送給接入層,當一個MongoD上的數(shù)據(jù)即將超過承載時,利用數(shù)據(jù)快照SnapShot和增量備份日志OplogDump文件,從源MongoD中提取出需要遷移到其他MongoD上的chunk并導入。在此過程中源MongoD產(chǎn)生的寫操作被Mongod記錄在增量日志Oplog中,提取出這部分Oplog導入目標MongoD后,封禁源MongoD對應chunk的寫請求,等Oplog完全同步完后,修改Etcd中關于chunk與MongoD的映射關系。

      本發(fā)明實施例提供的基于MongoD實現(xiàn)的數(shù)據(jù)的遷移系統(tǒng),可以應用在CMongo存儲集群中,當集群需要擴容時,新上架一個數(shù)據(jù)分片,并將存量集群上的部分chunk遷移到新集群上,從而實現(xiàn)數(shù)據(jù)均衡。某個CMongo集群負載過低為了節(jié)約成本,集群進行縮容,將需要下架的機器上的chunk均衡的遷移到其他數(shù)據(jù)分片上。

      請參閱圖3-a和圖3-b所示,中控節(jié)點可以定期的將備份任務下發(fā)給每個MongoD分片中的代理節(jié)點Agent,若每個MongoD分片又可以分為主備雙分片,則中控節(jié)點可以將備份任務下發(fā)給備MongoD分片中的Agent。Agent從MongoD中提取Snapshot或者OplogDump并存放到HDFS上。

      例如CMongo的遷移系統(tǒng)依賴于CMongo的增量備份子系統(tǒng)與路由子系統(tǒng)。其中,增量備份子系統(tǒng)包括:中控節(jié)點,每臺MongoD機器上的Agent節(jié)點,以及用于存放備份數(shù)據(jù)的HDFS組成。如圖3-b所示,任務由中控節(jié)點下發(fā)給對應機器的Agent,Agent連接本機的MongoD獲得Snapshot與OplogDump,第一次備份需要獲得Snapshot,之后每次只需要增量備份,增量備份通過掃描Oplog獲得上一次增量備份至今的OplogDump,MongoD中的數(shù)據(jù)庫DB中存儲有數(shù)據(jù)塊1、2、3、4、5、6,則每次備份將數(shù)據(jù)塊1和2、數(shù)據(jù)塊3和4、數(shù)據(jù)塊5和6分別備份到HDFS中,數(shù)據(jù)拷貝相當于數(shù)據(jù)快照+數(shù)據(jù)塊1、2、3、4、5、6。其中,SnapShot是數(shù)據(jù)庫在某個時間點的數(shù)據(jù)快照,冪等性是指如果一個操作作用于數(shù)據(jù)庫表中的一行任意多次,結(jié)果都不發(fā)生改變的特性,Oplog是記錄數(shù)據(jù)庫數(shù)據(jù)修改的具有冪等性的日志(log)記錄,按照操作時間順序插入,用于增量數(shù)據(jù)恢復。OplogDum(t)是對MongoD的Oplog從某個時間戳t時刻開始做的一個拷貝,該拷貝存放于HDFS上。

      請參閱圖4所示,為本發(fā)明實施例提供的基于MongoD實現(xiàn)的路由廣播流程示意圖。在路由子系統(tǒng)中,一張數(shù)據(jù)庫表被分為8192個chunk,路由表為chunk_id->(shard_id,state)的映射關系,其中state分為NORMAL,F(xiàn)ORBID_WRITE兩種狀態(tài),路由表存放在Etcd集群中,路由表的更改由中控節(jié)點統(tǒng)一處理,并廣播給前端的網(wǎng)關(proxy)模塊,路由表只有在執(zhí)行數(shù)據(jù)遷移的最后階段才變?yōu)镕ORBID_WRITE狀態(tài)。

      請參閱圖5所示,為本發(fā)明實施例提供的基于MongoD實現(xiàn)的數(shù)據(jù)快照恢復流程示意圖。接下來對本發(fā)明實施例中的數(shù)據(jù)遷移過程進行說明,每臺MongoD機器的Agent都可以執(zhí)行如下的數(shù)據(jù)遷移過程,Agent接受中控節(jié)點的數(shù)據(jù)遷移任務,通過存儲在HDFS上的備份文件與本機上的源Mongod上的Oplog來遷移數(shù)據(jù),Agent執(zhí)行遷移任務主要包含以下幾個步驟

      Step1:接受中控節(jié)點的命令,從HDFS上拉取相應的Snapshot文件。如圖6所示,為本發(fā)明實施例提供的數(shù)據(jù)快照使用多線程的示意圖,創(chuàng)建線程池,將Snapshot劃分為若干小塊放到線程池(ThreadPool)中,每個線程池過濾需要遷移的chunk并遷移到目標Mongod中。對于一個數(shù)據(jù)遷移任務,會指定需要將某個分片的哪些chunk搬遷到哪個新分片上。搬遷的線程池了解搬遷任務的chunk信息,對于每一條需要過濾的數(shù)據(jù),使用分片過濾器(ChunkFilter)計算出該數(shù)據(jù)是否數(shù)據(jù)需要搬遷的任務,從而得到過濾,過濾后得到快照分塊插入到目標MongoD中。

      Step2:從HDFS上拉取OplogDump列表,由于Oplog是一系列操作例如:新建(Create)、修改(Update)、刪除(Delete)操作,不像Snapshot一樣全部是插入操作,因此不能像Snapshot一樣對數(shù)據(jù)隨意分組。但是由于Oplog中的一條是對單行數(shù)據(jù)的操作,而行與行之間無關聯(lián),因此遍歷OplogDump文件,按照每一條Oplog的分片標識ObjectId(簡稱ObjId)進行哈希分組,每一組數(shù)據(jù)放入單個線程中順序處理。對于每一行數(shù)據(jù),都有一個唯一的全局Id,這個Id叫做ObjId,每一條Oplog是對某一行的更改,所以每一條Oplog都會記錄對應行的ObjId。

      如圖7和圖8所示,圖7為本發(fā)明實施例提供的基于MongoD實現(xiàn)的增量備份日志恢復流程示意圖,圖8為本發(fā)明實施例提供的多個增量備份日志使用多個發(fā)送線程的示意圖。增量備份日志OplogDump[1]到OplogDump[n]共n個分組,每個分組的OplogDump分別恢復到目標MongoD中。如圖8所示,OplogDump[1]到OplogDump[n]共n個分組使用提取線程(Extract_Thread)送入分片過濾器(Chunk Filter)然后進行哈希分組,分別使用發(fā)送線程池(Send ThreadPool)中的多個發(fā)送線程(Send)向目標MongoD發(fā)送OplogDump[1]到OplogDump[n]。其中解析Oplog也稱為:applyOps,每一條Oplog都完整的記錄了用戶的某次數(shù)據(jù)修改,將該條Oplog中的信息解析出來,并應用到某一個分片上的過程,叫做applyOps。

      Step3:從OplogDump中得到備份Oplog的最后一條時間戳T,Agent從本機的源Mongod中拉取從T時刻到結(jié)束的Oplog,從而得到殘余增量日志,并同步該殘余增量日志至目標Mongod中。該步驟的線程模型與Step2的線程模型一致。在導入OplogDump的過程中,用戶還是有數(shù)據(jù)源源不斷的寫入的,用戶的寫入會被記錄到源MongoD的Oplog中,這部分用戶的寫入的數(shù)據(jù)叫做殘余增量日志。

      Step4:執(zhí)行路由切換流程。請參閱圖9所示,為本發(fā)明實施例提供的基于MongoD實現(xiàn)的路由切換流程示意圖。主要包括如下過程:

      Step4.1:封禁路由,用戶短暫不可寫,將源Mongod中殘余的Oplog同步至目標Mongod。封禁路由由Agent向中控節(jié)點發(fā)起,中控節(jié)點更改Etcd中的路由信息后,向所有Proxy廣播路由更改。

      Step4.2:proxy封禁用戶對應chunk的寫請求,路由封禁成功后,將源Mongod的殘余Oplog同步至目標Mongod中。

      Step4.3:再次通過中控節(jié)點廣播路由,更改遷移chunk對應的分片。中控節(jié)點修改Etcd,然后中控節(jié)點向Proxy廣播路由修改,Proxy更新路由狀態(tài),中控節(jié)點確定路由更新成功。

      Step4.4:Agent刪除源MonoD分片上已經(jīng)遷移走的chunk。

      由前述的舉例說明可知,本發(fā)明實施例中完美的將數(shù)據(jù)備份與數(shù)據(jù)遷移結(jié)合在一起,大大的提高了備份文件的存在價值,數(shù)據(jù)備份主要是用來做數(shù)據(jù)回檔的。在導入SnapShot時,采用多線程并發(fā)插入,大幅提高了基準數(shù)據(jù)的導入速度,在導入OplogDump列表以及從MongoDb的Oplog中導入殘余數(shù)據(jù)時,利用了行與行之間的數(shù)據(jù)無關性,按照oplog的ObjId對Oplog進行哈希分組,不同組之間并發(fā)導入,大幅提升了增量數(shù)據(jù)的導入速度。對于同一張表不同分片之間的輸入輸出隔離性,不同分片之間的數(shù)據(jù)遷移可以并發(fā)進行,由中心節(jié)點靈活控制遷移的并發(fā)度。下面對本發(fā)明實施例中數(shù)據(jù)遷移效率與現(xiàn)有技術中原生MongoDB的數(shù)據(jù)遷移效率對比,相同大小的數(shù)據(jù)集,利用MongoDB原生的遷移方案進行遷移速度遠不如本發(fā)明實施例中CMongo的遷移方案,從下表1可以看出,速度差距在10倍以上。

      現(xiàn)有技術中MongoDB原生的數(shù)據(jù)遷移的并發(fā)度不夠,導致數(shù)據(jù)遷移的效率很慢,本發(fā)明實施例充分利用了數(shù)據(jù)之間的無關性,采用多線程并發(fā)搬遷的技術,充分提高了數(shù)據(jù)搬遷的效率。本發(fā)明實施例使用數(shù)據(jù)備份文件進行數(shù)據(jù)搬遷,不同于原生MongoDB采用在線實時數(shù)據(jù)進行搬遷,MongoDB實時數(shù)據(jù)搬遷會影響源數(shù)據(jù)庫的讀寫性能。

      需要說明的是,對于前述的各方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本發(fā)明并不受所描述的動作順序的限制,因為依據(jù)本發(fā)明,某些步驟可以采用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作和模塊并不一定是本發(fā)明所必須的。

      為便于更好的實施本發(fā)明實施例的上述方案,下面還提供用于實施上述方案的相關裝置。

      如圖1所示的一種數(shù)據(jù)的遷移系統(tǒng),所述數(shù)據(jù)的遷移系統(tǒng)100包括:中控節(jié)點101、第一分片存儲單元102、第二分片存儲單元103、數(shù)據(jù)備份子系統(tǒng)104,其中,

      所述第一分片存儲單元102上配置有第一代理節(jié)點1021,所述第二分片存儲單元103上配置有第二代理節(jié)點1031,所述第一代理節(jié)點1021分別和所述中控節(jié)點101、所述數(shù)據(jù)備份子系統(tǒng)104建立有通信連接,所述第二代理節(jié)點1031分別和所述中控節(jié)點101、所述數(shù)據(jù)備份子系統(tǒng)104建立有通信連接,所述第一分片存儲單元102上存儲的數(shù)據(jù)塊通過所述第一代理節(jié)點1021備份到所述數(shù)據(jù)備份子系統(tǒng)104中,所述第二分片存儲單元103上存儲的數(shù)據(jù)塊通過所述第二代理節(jié)點1031備份到所述數(shù)據(jù)備份子系統(tǒng)104中;

      所述中控節(jié)點101,用于向所述第一代理節(jié)點1021發(fā)送數(shù)據(jù)遷移命令,所述第一代理節(jié)點1021為數(shù)據(jù)遷移的源節(jié)點;

      所述第一代理節(jié)點1021,用于接收到所述中控節(jié)點101發(fā)送的數(shù)據(jù)遷移命令之后,所述第一代理節(jié)點1021通過所述數(shù)據(jù)備份子系統(tǒng)104獲取到需要遷移的第一數(shù)據(jù)塊;

      所述第一代理節(jié)點1021,還用于將所述需要遷移的第一數(shù)據(jù)塊發(fā)送給所述第二代理節(jié)點1031,所述第二代理節(jié)點1031為數(shù)據(jù)遷移的目的節(jié)點;

      所述第二代理節(jié)點1031,用于將所述需要遷移的第一數(shù)據(jù)塊導入到所述第二分片存儲單元103中。

      在本發(fā)明的一些實施例中,所述中控節(jié)點101,還用于將數(shù)據(jù)庫表中的所有數(shù)據(jù)拆分為多個數(shù)據(jù)塊;將所述多個數(shù)據(jù)塊中的一些數(shù)據(jù)塊發(fā)送給所述第一代理節(jié)點1021,并將所述多個數(shù)據(jù)塊中的其余數(shù)據(jù)塊發(fā)送給所述第二代理節(jié)點1031;

      所述第一代理節(jié)點1021,還用于將接收到的所述一些數(shù)據(jù)塊導入到所述第一分片存儲單元102中;

      所述第二代理節(jié)點1031,還用于將接收到的所述另一些數(shù)據(jù)塊導入到所述第二分片存儲單元103中。

      在本發(fā)明的一些實施例中,請參閱圖10-a所示,所述數(shù)據(jù)的遷移系統(tǒng)100還包括:鍵值存儲設備105,所述鍵值存儲設備和所述中控節(jié)點101之間建立有通信連接;

      所述中控節(jié)點101,還用于將數(shù)據(jù)庫表中的所有數(shù)據(jù)拆分為多個數(shù)據(jù)塊之后,根據(jù)所述多個數(shù)據(jù)塊創(chuàng)建路由表,所述路由表包括:所述多個數(shù)據(jù)塊中每個數(shù)據(jù)塊與對應的分片存儲單元的分片標識、工作狀態(tài)之間的映射關系,所述每個數(shù)據(jù)塊與對應的分片存儲單元的工作狀態(tài)包括:正常狀態(tài)和禁止寫入狀態(tài);將所述路由表存儲到所述鍵值存儲設備105中。

      在本發(fā)明的一些實施例中,所述第二代理節(jié)點1031,還用于將所述需要遷移的第一數(shù)據(jù)塊導入到所述第二分片存儲單元103中之后,向所述中控節(jié)點101上報遷移成功消息;

      所述中控節(jié)點101,還用于根據(jù)所述遷移成功消息將所述路由表中記錄的所述第一數(shù)據(jù)塊的映射關系從所述第一分片存儲單元102更改為所述第二分片存儲單元103。

      在本發(fā)明的一些實施例中,請參閱圖10-b所示,所述數(shù)據(jù)的遷移系統(tǒng)100還包括:網(wǎng)關模塊106,所述第一代理節(jié)點1021和所述第二代理節(jié)點1031都通過所述網(wǎng)關模塊106和所述中控節(jié)點101之間建立有通信連接;

      所述中控節(jié)點101,還用于根據(jù)所述遷移成功消息將所述路由表中記錄的所述第一數(shù)據(jù)塊的映射關系從所述第一分片存儲單元102更改為所述第二分片存儲單元103之后,通過所述網(wǎng)關模塊106向所述第一代理節(jié)點和所述第二代理節(jié)點廣播所述路由表的存儲單元更改消息。

      在本發(fā)明的一些實施例中,所述第一代理節(jié)點1021,還用于通過所述數(shù)據(jù)備份子系統(tǒng)104獲取到需要遷移的第一數(shù)據(jù)塊之前,向所述中控節(jié)點101發(fā)送封禁路由請求;

      所述中控節(jié)點101,還用于根據(jù)所述封禁路由請求將所述路由表中記錄的所述第一分片存儲單元102的工作狀態(tài)從正常狀態(tài)更改為禁止寫入狀態(tài);

      所述中控節(jié)點101,還用于向所述網(wǎng)關模塊廣播所述路由表的工作狀態(tài)更改消息;

      所述網(wǎng)關模塊106,還用于根據(jù)所述路由表的工作狀態(tài)更改消息封禁對所述第一分片存儲單元102的操作處理請求。

      在本發(fā)明的一些實施例中,所述中控節(jié)點101,還用于定期的向所述第一代理節(jié)點1021和所述第二代理節(jié)點1031發(fā)起備份任務;

      所述第一代理節(jié)點1021,還用于根據(jù)所述備份任務定期的將所述第一分片存儲單元102上存儲的數(shù)據(jù)塊備份到所述數(shù)據(jù)備份子系統(tǒng)104中;

      所述第二代理節(jié)點1031,還用于根據(jù)所述備份任務定期的將所述第二分片存儲單元103上存儲的數(shù)據(jù)塊備份到所述數(shù)據(jù)備份子系統(tǒng)104中。

      在本發(fā)明的一些實施例中,所述第一代理節(jié)點1021,具體用于若所述第一代理節(jié)點1021在啟動運行后第一次接收到所述備份任務,對所述第一分片存儲單元102上存儲的當前所有數(shù)據(jù)塊進行備份從而生成數(shù)據(jù)快照,將所述數(shù)據(jù)快照備份到所述數(shù)據(jù)備份子系統(tǒng)104中;若所述第一代理節(jié)點1021不是第一次接收到所述備份任務,從所述第一分片存儲單元102上獲取用于記錄所述第一分片存儲單元102被修改的增量備份日志,將所述增量備份日志備份到所述數(shù)據(jù)備份子系統(tǒng)104中。

      在本發(fā)明的一些實施例中,所述第一代理節(jié)點1021,具體用于從所述數(shù)據(jù)備份子系統(tǒng)104獲取到需要遷移的第一數(shù)據(jù)快照;將所述第一數(shù)據(jù)快照劃分為多個快照分塊;調(diào)用線程池中的多個線程從所述多個快照分塊中過濾出需要遷移的快照分塊,所述需要遷移的快照分塊屬于所述第一數(shù)據(jù)塊。

      在本發(fā)明的一些實施例中,所述第一代理節(jié)點1021,具體用于調(diào)用線程池中的多個線程從所述多個快照分塊中過濾出需要遷移的快照分塊之后,所述第一代理節(jié)點1021從所述數(shù)據(jù)備份子系統(tǒng)104獲取到需要遷移的第一增量備份日志;將所述需要遷移的第一增量備份日志按照日志標識進行分組得到不同組的第一增量備份日志,所述不同組的第一增量備份日志屬于所述第一數(shù)據(jù)塊。

      在本發(fā)明的一些實施例中,所述第一代理節(jié)點1021,具體用于從所述數(shù)據(jù)備份子系統(tǒng)104獲取到需要遷移的第一增量備份日志之后,所述第一代理節(jié)點1021根據(jù)所述第一增量備份日志對應的備份時間戳從所述第一分片存儲單元102上獲取從所述備份時間戳到當前時間已存儲的殘余增量日志,所述殘余增量日志屬于所述第一數(shù)據(jù)塊。

      在本發(fā)明的一些實施例中,所述第一代理節(jié)點1021,具體用于將所述需要遷移的快照分塊發(fā)送給所述第二代理節(jié)點1031;對所述不同組的第一增量備份日志使用不同的發(fā)送線程同時向所述第二代理節(jié)點1031發(fā)送;將所述殘余增量日志發(fā)送給所述第二代理節(jié)點1031。

      通過以上對本發(fā)明實施例的描述可知,數(shù)據(jù)的遷移系統(tǒng)中包括:中控節(jié)點、第一分片存儲單元、第二分片存儲單元、數(shù)據(jù)備份子系統(tǒng),該數(shù)據(jù)備份子系統(tǒng)內(nèi)存儲有第一分片存儲單元的數(shù)據(jù)塊和第二分片存儲單元的數(shù)據(jù)塊。中控節(jié)點向第一代理節(jié)點發(fā)送數(shù)據(jù)遷移命令,第一代理節(jié)點為數(shù)據(jù)遷移的源節(jié)點;第一代理節(jié)點接收到中控節(jié)點發(fā)送的數(shù)據(jù)遷移命令之后,第一代理節(jié)點通過數(shù)據(jù)備份子系統(tǒng)獲取到需要遷移的第一數(shù)據(jù)塊;第一代理節(jié)點將需要遷移的第一數(shù)據(jù)塊發(fā)送給第二代理節(jié)點,第二代理節(jié)點為數(shù)據(jù)遷移的目的節(jié)點;第二代理節(jié)點將需要遷移的第一數(shù)據(jù)塊導入到第二分片存儲單元中。由于數(shù)據(jù)的遷移系統(tǒng)中獨立于所有的分片存儲單元設置有中控節(jié)點,第一數(shù)據(jù)塊的遷移由中控節(jié)點來控制,不需要再受到分布式鎖的限制,因此當?shù)谝粩?shù)據(jù)塊有多個時每個第一數(shù)據(jù)塊都可以獨立完成遷移,因此數(shù)據(jù)遷移的效率很高,另外本發(fā)明實施例中第一代理節(jié)點在遷移第一數(shù)據(jù)塊時并不從第一分片存儲單元讀取,而是從數(shù)據(jù)備份子系統(tǒng)中讀取提前備份的第一數(shù)據(jù)塊,用戶仍可以正常從第一分片存儲單元完成讀寫操作。

      圖11是本發(fā)明實施例提供的一種服務器結(jié)構(gòu)示意圖,該服務器1100上設置有代理節(jié)點1123,該服務器具體為前述的分片存儲單元,可因配置或性能不同而產(chǎn)生比較大的差異,可以包括一個或一個以上中央處理器(central processing units,CPU)1122(例如,一個或一個以上處理器)和存儲器1132,一個或一個以上存儲應用程序1142或數(shù)據(jù)1144的存儲介質(zhì)1130(例如一個或一個以上海量存儲設備)。其中,存儲器1132和存儲介質(zhì)1130可以是短暫存儲或持久存儲。存儲在存儲介質(zhì)1130的程序可以包括一個或一個以上模塊(圖示沒標出),每個模塊可以包括對服務器中的一系列指令操作。更進一步地,中央處理器1122可以設置為與存儲介質(zhì)1130通信,在服務器1100上執(zhí)行存儲介質(zhì)1130中的一系列指令操作。

      服務器1100還可以包括一個或一個以上電源1126,一個或一個以上有線或無線網(wǎng)絡接口1150,一個或一個以上輸入輸出接口1158,和/或,一個或一個以上操作系統(tǒng)1141,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,F(xiàn)reeBSDTM等等。

      上述實施例中由分片存儲單元所執(zhí)行的步驟可以基于該圖11所示的服務器結(jié)構(gòu)。

      另外需說明的是,以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本實施例方案的目的。另外,本發(fā)明提供的裝置實施例附圖中,模塊之間的連接關系表示它們之間具有通信連接,具體可以實現(xiàn)為一條或多條通信總線或信號線。本領域普通技術人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。

      通過以上的實施方式的描述,所屬領域的技術人員可以清楚地了解到本發(fā)明可借助軟件加必需的通用硬件的方式來實現(xiàn),當然也可以通過專用硬件包括專用集成電路、專用CPU、專用存儲器、專用元器件等來實現(xiàn)。一般情況下,凡由計算機程序完成的功能都可以很容易地用相應的硬件來實現(xiàn),而且,用來實現(xiàn)同一功能的具體硬件結(jié)構(gòu)也可以是多種多樣的,例如模擬電路、數(shù)字電路或?qū)S秒娐返?。但是,對本發(fā)明而言更多情況下軟件程序?qū)崿F(xiàn)是更佳的實施方式。基于這樣的理解,本發(fā)明的技術方案本質(zhì)上或者說對現(xiàn)有技術做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在可讀取的存儲介質(zhì)中,如計算機的軟盤、U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例所述的方法。

      綜上所述,以上實施例僅用以說明本發(fā)明的技術方案,而非對其限制;盡管參照上述實施例對本發(fā)明進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對上述各實施例所記載的技術方案進行修改,或者對其中部分技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案的本質(zhì)脫離本發(fā)明各實施例技術方案的精神和范圍。

      當前第1頁1 2 3 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1