一種文件遷移的方法和裝置的制造方法
【專利摘要】本發(fā)明提供一種文件遷移的方法和裝置,該方法包括:從所有待遷移文件中選擇出優(yōu)先級最高的第一文件;利用全局?jǐn)?shù)據(jù)集合中的每個節(jié)點的權(quán)重選擇第一節(jié)點;所述全局?jǐn)?shù)據(jù)集合中記錄了分布式存儲系統(tǒng)中的每個節(jié)點與權(quán)重的對應(yīng)關(guān)系;通過第一節(jié)點將所述第一文件從源分布式子卷遷移到目標(biāo)分布式子卷。通過本發(fā)明的技術(shù)方案,可以讓源分布式子卷包含的所有節(jié)點參與文件遷移,可以提高文件遷移速度,避免出現(xiàn)某個節(jié)點壓力過大的情況,不影響各節(jié)點的處理性能,讓節(jié)點的壓力負(fù)載達(dá)到均衡,同時確保在文件遷移前后的數(shù)據(jù)一致性。
【專利說明】
一種文件遷移的方法和裝置
技術(shù)領(lǐng)域
[0001] 本發(fā)明涉及存儲技術(shù)領(lǐng)域,尤其涉及一種文件迀移的方法和裝置。
【背景技術(shù)】
[0002] 對于分布式存儲系統(tǒng)來說,數(shù)據(jù)可靠性和空間利用率很難兼?zhèn)?,?dāng)保證了比較高 的數(shù)據(jù)可靠性時,貝丨】會導(dǎo)致空間利用率較低。DHT(Distributed Hash Table,分布式哈希 表)是一種空間利用率較高的分布式存儲系統(tǒng),為了保證數(shù)據(jù)可靠性以及容錯性,還可以在 DHT中采用EC(Erasure Coding,糾刪碼)算法。
[0003] 如圖1所示,為分布式存儲系統(tǒng)的組網(wǎng)示意圖。在需要寫入文件A時,先通過DHT算 法得到寫入的位置,如分布式子卷D1。然后通過EC算法,將文件A寫入到分布式子卷D1的各 個節(jié)點上。例如,將文件A分成3份,得到3份數(shù)據(jù),并將這3份數(shù)據(jù)分別寫入到分布式子卷D1 的節(jié)點1、節(jié)點2、節(jié)點3上,此外,還可以將文件A對應(yīng)的冗余數(shù)據(jù)寫入到分布式子卷D1的節(jié) 點4上。
[0004] 但是,在通過DHT算法得到寫入位置時,會出現(xiàn)如下情況:分布式子卷D1內(nèi)寫入的 文件較多,而分布式子卷D2內(nèi)寫入的文件較少,從而出現(xiàn)不平衡的情況,影響DHT的性能發(fā) 揮。為解決上述問題,可以采用數(shù)據(jù)平衡(Rebalance)算法,在各個分布式子卷內(nèi)迀移文件, 以使每個分布式子卷內(nèi)的文件數(shù)量接近,確保DHT的性能。例如,將分布式子卷D1內(nèi)的文件A 和文件B迀移到分布式子卷D2,以保證分布式子卷D1和分布式子卷D2內(nèi)的文件數(shù)量大體平 衡。
[0005] 在目前的文件迀移過程中,通常由節(jié)點1迀移所有文件,如節(jié)點1將分布式子卷D1 內(nèi)的文件A和文件B迀移到分布式子卷D2,當(dāng)需要迀移的文件數(shù)量較多時,節(jié)點1的工作壓力 很大,迀移速度較慢,影響節(jié)點1的處理性能。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明提供一種文件迀移的方法,所述方法包括以下步驟:
[0007] 從所有待迀移文件中選擇出優(yōu)先級最高的第一文件;
[0008] 利用全局?jǐn)?shù)據(jù)集合中的每個節(jié)點的權(quán)重選擇第一節(jié)點;其中,所述全局?jǐn)?shù)據(jù)集合 中記錄了分布式存儲系統(tǒng)中的每個節(jié)點與權(quán)重的對應(yīng)關(guān)系;
[0009] 通過第一節(jié)點將所述第一文件從源分布式子卷迀移到目標(biāo)分布式子卷;
[0010]在所述全局?jǐn)?shù)據(jù)集合中增加所述第一節(jié)點的權(quán)重,設(shè)置所述第一文件不是待迀移 文件,如果當(dāng)前還存在待迀移文件,則返回執(zhí)行從所有待迀移文件中選擇出優(yōu)先級最高的 第一文件的過程。
[0011]所述利用全局?jǐn)?shù)據(jù)集合中的每個節(jié)點的權(quán)重選擇第一節(jié)點的過程,具體包括:通 過查詢所述第一文件所在的源分布式子卷對應(yīng)的局部集合,得到所述源分布式子卷包含的 各節(jié)點;從所述全局?jǐn)?shù)據(jù)集合中查詢到所述源分布式子卷包含的各節(jié)點的權(quán)重,并選擇權(quán) 重最小的節(jié)點為所述第一節(jié)點;或者,
[0012] 從全局?jǐn)?shù)據(jù)集合中選擇權(quán)重最小的節(jié)點,并判斷當(dāng)前選擇的節(jié)點是否位于所述第 一文件所在的源分布式子卷對應(yīng)的局部集合中;如果是,將當(dāng)前選擇的節(jié)點確定為所述第 一節(jié)點;如果否,從所述全局?jǐn)?shù)據(jù)集合中選擇權(quán)重第二小的節(jié)點,并繼續(xù)執(zhí)行判斷當(dāng)前選擇 的節(jié)點是否位于所述局部集合的過程,一直到當(dāng)前選擇的節(jié)點位于所述局部集合,并將當(dāng) 前選擇的節(jié)點確定為所述第一節(jié)點;
[0013] 其中,所述局部集合中記錄了所述源分布式子卷包含的各節(jié)點。
[0014] 所述通過第一節(jié)點將所述第一文件從源分布式子卷迀移到目標(biāo)分布式子卷后,所 述方法還包括:在所述第一節(jié)點將所述第一文件從源分布式子卷迀移到目標(biāo)分布式子卷完 成之后,則在所述全局?jǐn)?shù)據(jù)集合中降低所述第一節(jié)點的權(quán)重。
[0015] 在所述第一文件從源分布式子卷到目標(biāo)分布式子卷的迀移過程中,所述方法進(jìn)一 步包括:獲取所述第一文件對應(yīng)的第一文件屬性信息,所述第一文件屬性信息包括文件正 在迀移的標(biāo)記、所述目標(biāo)分布式子卷的信息;
[0016] 根據(jù)所述第一文件屬性信息,確定所述第一文件正在迀移過程中,并將所述第一 文件的更新數(shù)據(jù)發(fā)送到所述源分布式子卷和所述目標(biāo)分布式子卷。
[0017] 在所述第一節(jié)點將所述第一文件從源分布式子卷迀移到目標(biāo)分布式子卷完成之 后,所述方法進(jìn)一步包括:獲取所述第一文件對應(yīng)的第二文件屬性信息,所述第二文件屬性 信息包括文件已經(jīng)完成迀移的標(biāo)記或者不包括文件正在迀移的標(biāo)記;根據(jù)所述第二文件屬 性信息,確定所述第一文件已經(jīng)完成迀移,并將所述第一文件的更新數(shù)據(jù)發(fā)送到所述目標(biāo) 分布式子卷。
[0018] 本發(fā)明提供一種文件迀移的裝置,所述裝置具體包括:
[0019] 第一選擇模塊,用于從所有待迀移文件中選擇出優(yōu)先級最高的第一文件;
[0020] 第二選擇模塊,用于利用全局?jǐn)?shù)據(jù)集合中的每個節(jié)點的權(quán)重選擇第一節(jié)點;所述 全局?jǐn)?shù)據(jù)集合中記錄了分布式存儲系統(tǒng)中的每個節(jié)點與權(quán)重的對應(yīng)關(guān)系;
[0021 ]迀移模塊,用于通過第一節(jié)點將所述第一文件從源分布式子卷迀移到目標(biāo)分布式 子卷;
[0022] 處理模塊,用于在所述全局?jǐn)?shù)據(jù)集合中增加所述第一節(jié)點的權(quán)重,設(shè)置所述第一 文件不是待迀移文件,如果當(dāng)前還存在待迀移文件,則由所述第一選擇模塊執(zhí)行從所有待 迀移文件中選擇出優(yōu)先級最高的第一文件的過程。
[0023] 所述第二選擇模塊,具體用于在利用全局?jǐn)?shù)據(jù)集合中的每個節(jié)點的權(quán)重選擇第一 節(jié)點的過程中,通過查詢所述第一文件所在的源分布式子卷對應(yīng)的局部集合,得到所述源 分布式子卷包含的各節(jié)點;從所述全局?jǐn)?shù)據(jù)集合中查詢到所述源分布式子卷包含的各節(jié)點 的權(quán)重,并選擇權(quán)重最小的節(jié)點為所述第一節(jié)點;或者,從全局?jǐn)?shù)據(jù)集合中選擇權(quán)重最小的 節(jié)點,并判斷當(dāng)前選擇的節(jié)點是否位于所述第一文件所在的源分布式子卷對應(yīng)的局部集合 中;如果是,將當(dāng)前選擇的節(jié)點確定為所述第一節(jié)點;如果否,從所述全局?jǐn)?shù)據(jù)集合中選擇 權(quán)重第二小的節(jié)點,并繼續(xù)執(zhí)行判斷當(dāng)前選擇的節(jié)點是否位于所述局部集合的過程,一直 到當(dāng)前選擇的節(jié)點位于所述局部集合,并將當(dāng)前選擇的節(jié)點確定為所述第一節(jié)點;其中,所 述局部集合中記錄了所述源分布式子卷包含的各節(jié)點。
[0024]所述處理模塊,還用于在通過第一節(jié)點將所述第一文件從源分布式子卷迀移到目 標(biāo)分布式子卷之后,在所述第一節(jié)點將所述第一文件從源分布式子卷迀移到目標(biāo)分布式子 卷完成后,在所述全局?jǐn)?shù)據(jù)集合中降低所述第一節(jié)點的權(quán)重。
[0025] 所述裝置還包括:
[0026] 獲取模塊,用于在所述第一文件從源分布式子卷到目標(biāo)分布式子卷的迀移過程 中,獲取所述第一文件對應(yīng)的第一文件屬性信息,所述第一文件屬性信息包括文件正在迀 移的標(biāo)記、所述目標(biāo)分布式子卷的信息;
[0027]發(fā)送模塊,用于根據(jù)所述第一文件屬性信息,確定所述第一文件正在迀移過程中, 并將所述第一文件的更新數(shù)據(jù)發(fā)送到所述源分布式子卷和所述目標(biāo)分布式子卷。
[0028]所述獲取模塊,還用于在將所述第一文件從源分布式子卷迀移到目標(biāo)分布式子卷 完成之后,獲取所述第一文件對應(yīng)的第二文件屬性信息,所述第二文件屬性信息包括文件 已經(jīng)完成迀移的標(biāo)記或者不包括文件正在迀移的標(biāo)記;
[0029]所述發(fā)送模塊,還用于根據(jù)所述第二文件屬性信息,確定所述第一文件已經(jīng)完成 迀移,并將所述第一文件的更新數(shù)據(jù)發(fā)送到所述目標(biāo)分布式子卷。
[0030] 基于上述技術(shù)方案,本發(fā)明實施例中,在需要迀移文件時,可以動態(tài)選擇用于進(jìn)行 文件迀移的節(jié)點,可以讓源分布式子卷包含的所有節(jié)點都參與文件迀移,當(dāng)需要迀移的文 件數(shù)量較多時,由多個節(jié)點共同完成文件迀移,可以提高文件迀移速度,避免出現(xiàn)某個節(jié)點 壓力過大的情況,不影響各節(jié)點的處理性能,讓節(jié)點的壓力負(fù)載達(dá)到均衡,同時確保在文件 迀移前后的數(shù)據(jù)一致性。
【附圖說明】
[0031] 為了更加清楚地說明本發(fā)明實施例或者現(xiàn)有技術(shù)中的技術(shù)方案,下面將對本發(fā)明 實施例或者現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的 附圖僅僅是本發(fā)明中記載的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,還可以根據(jù)這些 附圖獲得其他的附圖。
[0032] 圖1是分布式存儲系統(tǒng)的組網(wǎng)示意圖;
[0033] 圖2是分布式子卷內(nèi)的文件迀移示意圖;
[0034] 圖3是本發(fā)明一種實施方式中的文件迀移的方法的流程圖;
[0035] 圖4是本發(fā)明另一種實施方式中的文件迀移的方法的流程圖;
[0036] 圖5是本發(fā)明另一種實施方式中的文件迀移過程的示意圖;
[0037] 圖6是本發(fā)明另一種實施方式中的文件迀移的方法的流程圖;
[0038]圖7是本發(fā)明一種實施方式中的控制設(shè)備的硬件結(jié)構(gòu)圖;
[0039]圖8是本發(fā)明一種實施方式中的文件迀移的裝置的結(jié)構(gòu)圖。
【具體實施方式】
[0040] 在本發(fā)明使用的術(shù)語僅僅是出于描述特定實施例的目的,而非限制本發(fā)明。本發(fā) 明和權(quán)利要求書中所使用的單數(shù)形式的"一種"、"所述"和"該"也旨在包括多數(shù)形式,除非 上下文清楚地表示其它含義。還應(yīng)當(dāng)理解,本文中使用的術(shù)語"和/或"是指包含一個或多個 相關(guān)聯(lián)的列出項目的任何或所有可能組合。
[0041] 應(yīng)當(dāng)理解,盡管在本發(fā)明可能采用術(shù)語第一、第二、第三等來描述各種信息,但這 些信息不應(yīng)限于這些術(shù)語。這些術(shù)語僅用來將同一類型的信息彼此區(qū)分開。例如,在不脫離 本發(fā)明范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第 一信息。取決于語境,此外,所使用的詞語"如果"可以被解釋成為"在......時"或 "當(dāng)......時"或"響應(yīng)于確定"。
[0042] 針對現(xiàn)有技術(shù)中存在的問題,本發(fā)明實施例中提出了一種文件迀移的方法,該方 法可以應(yīng)用于分布式存儲系統(tǒng)中,如采用DHT算法+EC算法的分布式存儲系統(tǒng)。在該分布式 存儲系統(tǒng)中,一個文件需要寫入到一個分布式子卷中,且每個分布式子卷橫跨了N+M個節(jié) 點,每個節(jié)點相當(dāng)于一個存儲設(shè)備,分布式子卷在每個節(jié)點中占用一個存儲區(qū)域,并將文件 存儲在該存儲區(qū)域,該存儲區(qū)域可以是物理磁盤或者其它存儲結(jié)構(gòu),本發(fā)明實施例中對此 存儲區(qū)域不做限制。
[0043] 如圖1所示,在需要寫入文件A時,先通過DHT算法得到寫入的位置,如分布式子卷 D1。然后通過EC算法,將文件A寫入到分布式子卷D1的N+M(在圖1中,N為3,M為1)個節(jié)點上。 例如,將文件A分成N份,得到N份數(shù)據(jù),并將這N份數(shù)據(jù)分別寫入到分布式子卷D1的N個節(jié)點 上,并將文件A對應(yīng)的冗余數(shù)據(jù)寫入到分布式子卷D1的M個節(jié)點上。其中,文件A對應(yīng)的冗余 數(shù)據(jù)可以由EC算法決定,如可以是文件A的校驗數(shù)據(jù),本發(fā)明實施例中對此不做限制,文件A 對應(yīng)的冗余數(shù)據(jù)的作用是:當(dāng)文件A的數(shù)據(jù)發(fā)生丟失時,使用該冗余數(shù)據(jù)恢復(fù)文件A。例如, 當(dāng)文件A在節(jié)點1上存儲的數(shù)據(jù)發(fā)生丟失時,可以使用存儲在節(jié)點4上的冗余數(shù)據(jù)對丟失數(shù) 據(jù)進(jìn)行恢復(fù),以得到文件A。
[0044] 在一個例子中,如圖2所示,當(dāng)分布式子卷D1內(nèi)寫入的文件較多,而分布式子卷D2 內(nèi)寫入的文件較少,從而出現(xiàn)不平衡的情況時,則可以采用數(shù)據(jù)平衡算法,在各個分布式子 卷內(nèi)迀移文件,以使每個分布式子卷內(nèi)的文件數(shù)量接近,確保DHT的性能。例如,將分布式子 卷D1內(nèi)的文件A、文件B、文件C迀移到分布式子卷D2,以保證分布式子卷D1和分布式子卷D2 內(nèi)的文件數(shù)量大體平衡。在這個例子中,可以將分布式子卷D1稱為源分布式子卷,并將分布 式子卷D2稱為目標(biāo)分布式子卷,而且將文件A、文件B、文件C稱為待迀移文件。
[0045] 本發(fā)明實施例中,該文件迀移的方法可以應(yīng)用于控制設(shè)備上,該控制設(shè)備可以為 客戶端、服務(wù)器、以及控制節(jié)點。其中,客戶端可以位于PC(Personal Computer,個人計算 機(jī))上,用于幫助各節(jié)點完成文件迀移功能。服務(wù)器可以位于云平臺、或者其它網(wǎng)絡(luò)中,用于 幫助各節(jié)點完成文件迀移功能。在一個例子中,可以將分布式存儲系統(tǒng)的所有節(jié)點(即所有 存儲設(shè)備)作為一個集群,且從所有節(jié)點中選擇一個節(jié)點(如選擇第一個節(jié)點),由該節(jié)點實 現(xiàn)所述集群的控制,可以將該節(jié)點稱為控制節(jié)點,其本質(zhì)是集群內(nèi)的一個存儲設(shè)備。本發(fā)明 實施例中提出的文件迀移的方法,也可以應(yīng)用在該控制節(jié)點上。
[0046] 在一個例子中,可以預(yù)先配置全局?jǐn)?shù)據(jù)集合,并針對每個分布式子卷配置一個局 部集合。其中,該全局?jǐn)?shù)據(jù)集合中記錄了分布式存儲系統(tǒng)中的每個節(jié)點與權(quán)重的對應(yīng)關(guān)系, 且分布式子卷對應(yīng)的局部集合中記錄了該分布式子卷包含的各節(jié)點。在一個例子中,全局 數(shù)據(jù)集合可以通過全局?jǐn)?shù)據(jù)表實現(xiàn),也可以通過其它類型文件實現(xiàn),局部集合可以通過局 部表實現(xiàn),也可以通過其它類型文件實現(xiàn),本發(fā)明實施例中對此全局?jǐn)?shù)據(jù)集合/局部集合的 形式不做限制。
[0047] 例如,在初始狀態(tài)下,分布式存儲系統(tǒng)包括節(jié)點1、節(jié)點2、節(jié)點3、節(jié)點4,分布式子 卷D1、分布式子卷D2、分布式子卷D3內(nèi)的文件占用節(jié)點1、節(jié)點2、節(jié)點3、節(jié)點4。在后續(xù)過程 中,對分布式存儲系統(tǒng)進(jìn)行擴(kuò)容,增加一個節(jié)點5,且分布式子卷D4內(nèi)的文件占用節(jié)點1、節(jié) 點2、節(jié)點3、節(jié)點5。
[0048]基于此,全局?jǐn)?shù)據(jù)集合可以如表1所示,分布式子卷D1對應(yīng)的局部集合內(nèi)可以包括 節(jié)點1、節(jié)點2、節(jié)點3、節(jié)點4,其它分布式子卷的局部集合與分布式子卷D1對應(yīng)的局部集合 類似,后續(xù)不再進(jìn)行贅述。在另一個例子中,還可以通過表2所示的局部表,記錄各分布式子 卷的局部集合。在實際應(yīng)用中,表1、表2中的各節(jié)點,可以使用各節(jié)點的唯一標(biāo)識來表示,如 各節(jié)點的IP地址。在表1中,各節(jié)點對應(yīng)的權(quán)重的初始值可以為〇,后續(xù)對該權(quán)重進(jìn)行調(diào)整。
[0053] 在上述應(yīng)用場景下,如圖3所示,該文件迀移的方法可以包括以下步驟:
[0054]步驟301,從所有待迀移文件中選擇出優(yōu)先級最高的第一文件。
[0055]在一個例子中,可以獲取每個待迀移文件的文件大小,并按照文件大小為每個待 迀移文件劃分優(yōu)先級;其中,文件大小越大的待迀移文件,其優(yōu)先級越高?;诟鞔|移文 件的優(yōu)先級,可以從所有待迀移文件中選擇出優(yōu)先級最高的第一文件。當(dāng)然,也可以選擇其 它優(yōu)先級劃分方式,為每個待迀移文件劃分優(yōu)先級,本發(fā)明實施例中對此優(yōu)先級劃分方式 不做限制。
[0056]步驟302,利用全局?jǐn)?shù)據(jù)集合中的每個節(jié)點的權(quán)重選擇第一節(jié)點。
[0057] 步驟303,通過第一節(jié)點將第一文件從源分布式子卷迀移到目標(biāo)分布式子卷,即向 第一節(jié)點下發(fā)第一文件的迀移通知,由第一節(jié)點在接收到該迀移通知之后,將該第一文件 從源分布式子卷迀移到目標(biāo)分布式子卷。
[0058] 步驟304,在全局?jǐn)?shù)據(jù)集合中增加第一節(jié)點的權(quán)重,并設(shè)置第一文件不是待迀移文 件。如果當(dāng)前存在待迀移文件,則返回步驟302;否則,結(jié)束流程。
[0059] 其中,在由第一節(jié)點迀移第一文件時,通過增加第一節(jié)點的權(quán)重,從而避免第一節(jié) 點的權(quán)重始終最小,避免由一個節(jié)點來迀移所有待迀移文件,讓源分布式子卷包含的所有 節(jié)點都參與文件迀移,提高文件迀移速度,避免出現(xiàn)某個節(jié)點壓力過大的情況,不影響各節(jié) 點的處理性能,讓節(jié)點的壓力負(fù)載達(dá)到均衡。
[0060] 在一個例子中,利用全局?jǐn)?shù)據(jù)集合中的每個節(jié)點的權(quán)重選擇第一節(jié)點的過程,具 體可以包括但不限于如下方式:方式一、通過查詢第一文件所在的源分布式子卷對應(yīng)的局 部集合,得到該源分布式子卷包含的各節(jié)點;從全局?jǐn)?shù)據(jù)集合中查詢到該源分布式子卷包 含的各節(jié)點的權(quán)重,并選擇權(quán)重最小的節(jié)點為第一節(jié)點。或者,方式二、從全局?jǐn)?shù)據(jù)集合中 選擇權(quán)重最小的節(jié)點,并判斷當(dāng)前選擇的節(jié)點是否位于第一文件所在的源分布式子卷對應(yīng) 的局部集合中;如果是,則將當(dāng)前選擇的節(jié)點確定為第一節(jié)點;如果否,則從全局?jǐn)?shù)據(jù)集合 中選擇權(quán)重第二小的節(jié)點,并繼續(xù)執(zhí)行判斷當(dāng)前選擇的節(jié)點是否位于局部集合的過程,一 直到當(dāng)前選擇的節(jié)點位于局部集合,并將當(dāng)前選擇的節(jié)點確定為第一節(jié)點。
[0061] 通過上述實現(xiàn)方式,可以保證第一節(jié)點是第一文件的一個存儲節(jié)點,從而可以減 少數(shù)據(jù)的傳輸,避免傳輸資源的浪費,提高資源利用率。而且,通過上述實現(xiàn)方式,可以保證 第一節(jié)點是第一文件的存儲節(jié)點中權(quán)重最小的節(jié)點(即傳輸壓力最輕的節(jié)點),因此,可以 使用傳輸壓力最輕的節(jié)點來迀移優(yōu)先級最高的第一文件,而優(yōu)先級最高的第一文件是文件 大小最大的待迀移文件,因此,本發(fā)明實施例的上述技術(shù)方案,是使用傳輸壓力最輕的節(jié)點 來迀移最大的待迀移文件,從而可以合理的利用各節(jié)點的傳輸性能,在各節(jié)點之間負(fù)載分 擔(dān)。
[0062] 在一個例子中,在通過第一節(jié)點將第一文件從源分布式子卷迀移到目標(biāo)分布式子 卷之后,當(dāng)?shù)谝还?jié)點將第一文件從源分布式子卷迀移到目標(biāo)分布式子卷完成之后,則還可 以在全局?jǐn)?shù)據(jù)集合中降低該第一節(jié)點的權(quán)重。
[0063] 通過上述實現(xiàn)方式,當(dāng)?shù)谝晃募|移完成后,通過降低該第一節(jié)點的權(quán)重,使得該 第一節(jié)點又可以傳輸其它文件,保證各節(jié)點的合理使用,避免該第一節(jié)點在第一文件迀移 完成后,仍然由于權(quán)重過高,導(dǎo)致無法傳輸文件的問題。
[0064] 在一個例子中,在第一文件從源分布式子卷到目標(biāo)分布式子卷的迀移過程中,還 可以獲取該第一文件對應(yīng)的第一文件屬性信息,其中,該第一文件屬性信息可以包括但不 限于:文件正在迀移的標(biāo)記、目標(biāo)分布式子卷的信息;進(jìn)一步的,根據(jù)該第一文件屬性信息, 可以確定該第一文件正在迀移過程中,并將該第一文件的更新數(shù)據(jù)發(fā)送到源分布式子卷和 目標(biāo)分布式子卷。
[0065] 在一個例子中,在第一節(jié)點將第一文件從源分布式子卷迀移到目標(biāo)分布式子卷完 成之后,還可以獲取該第一文件對應(yīng)的第二文件屬性信息,其中,該第二文件屬性信息可以 包括但不限于:文件已經(jīng)完成迀移的標(biāo)記或者不包括文件正在迀移的標(biāo)記;進(jìn)一步的,根據(jù) 該第二文件屬性信息,可以確定該第一文件已經(jīng)完成迀移,并將該第一文件的更新數(shù)據(jù)發(fā) 送到目標(biāo)分布式子卷。
[0066] 基于上述技術(shù)方案,本發(fā)明實施例中,在需要迀移文件時,可以動態(tài)選擇用于進(jìn)行 文件迀移的節(jié)點,可以讓源分布式子卷包含的所有節(jié)點都參與文件迀移,當(dāng)需要迀移的文 件數(shù)量較多時,由多個節(jié)點共同完成文件迀移,可以提高文件迀移速度,避免出現(xiàn)某個節(jié)點 壓力過大的情況,不影響各節(jié)點的處理性能,讓節(jié)點的壓力負(fù)載達(dá)到均衡,同時確保在文件 迀移前后的數(shù)據(jù)一致性。
[0067] 以下結(jié)合圖4所示的流程圖,對本發(fā)明實施例的文件迀移的方法進(jìn)行說明。
[0068]步驟401,預(yù)先配置全局?jǐn)?shù)據(jù)集合,并針對每個分布式子卷配置一個局部集合。其 中,該全局?jǐn)?shù)據(jù)集合中記錄了分布式存儲系統(tǒng)中的每個節(jié)點與權(quán)重的對應(yīng)關(guān)系,且分布式 子卷對應(yīng)的局部集合中記錄了該分布式子卷包含的各節(jié)點。
[0069] 為了方便說明,后續(xù)以全局?jǐn)?shù)據(jù)集合如表3,局部集合如表2為例。
[0070] 表 3
[0073] 在一個例子中,在Rebalance機(jī)制被觸發(fā)之后,貝lj需要迀移源分布式子卷內(nèi)的文 件。如果只有一個源分布式子卷內(nèi)的文件需要迀移,則針對該源分布式子卷進(jìn)行后續(xù)處理。 如果有多個源分布式子卷內(nèi)的文件需要迀移,則每個源分布式子卷的處理方式相同,后續(xù) 以一個源分布式子卷的處理為例進(jìn)行說明。
[0074]步驟402,獲取每個待迀移文件的文件大小,并按照該文件大小為每個待迀移文件 劃分優(yōu)先級;其中,文件大小越大的待迀移文件,其優(yōu)先級越高。
[0075]例如,在需要將分布式子卷D1內(nèi)的文件A、文件B、文件C迀移到分布式子卷D2時,可 以將分布式子卷D1稱為源分布式子卷,并將分布式子卷D2稱為目標(biāo)分布式子卷,而且將文 件A、文件B、文件C稱為待迀移文件。基于此,可以分別獲取文件A、文件B、文件C的文件大小, 并按照各文件大小為文件A、文件B、文件C劃分優(yōu)先級。例如,假設(shè)文件A的文件大小大于文 件B的文件大小,文件B的文件大小大于文件C的文件大小,則文件A的優(yōu)先級高于文件B的優(yōu) 先級,文件B的優(yōu)先級高于文件C的優(yōu)先級。
[0076] 步驟403,從所有待迀移文件中選擇出優(yōu)先級最高的第一文件。例如,從待迀移的 文件A、文件B、文件C中選擇出優(yōu)先級最高的文件A(即第一文件)。
[0077] 步驟404,從全局?jǐn)?shù)據(jù)集合中選擇權(quán)重最小的節(jié)點。例如,基于表2所示的全局?jǐn)?shù)據(jù) 集合,則從全局?jǐn)?shù)據(jù)集合中選擇的權(quán)重最小的節(jié)點為節(jié)點2。
[0078] 其中,全局?jǐn)?shù)據(jù)集合中的權(quán)重最小的節(jié)點是指傳輸壓力最輕的節(jié)點。
[0079] 步驟405,判斷當(dāng)前選擇的節(jié)點是否位于第一文件所在的源分布式子卷對應(yīng)的局 部集合中。如果是,則執(zhí)行步驟406。如果否,則從全局?jǐn)?shù)據(jù)集合中選擇權(quán)重第二小的節(jié)點, 并繼續(xù)執(zhí)行步驟405。再次執(zhí)行步驟405時,如果判斷結(jié)果為否,則從全局?jǐn)?shù)據(jù)集合中選擇權(quán) 重第三小的節(jié)點,并繼續(xù)執(zhí)行步驟405。以此類推,一直到當(dāng)前選擇的節(jié)點位于對應(yīng)的局部 集合中,并執(zhí)行步驟406。
[0080] 例如,判斷當(dāng)前選擇的節(jié)點2是否位于文件A所在的分布式子卷1對應(yīng)的局部集合, 通過查詢表2可以獲知,節(jié)點2位于分布式子卷1對應(yīng)的局部集合。
[0081 ]步驟406,將當(dāng)前選擇的節(jié)點確定為第一節(jié)點,即第一節(jié)點為節(jié)點2。
[0082] 步驟407,通過第一節(jié)點將第一文件從源分布式子卷迀移到目標(biāo)分布式子卷,即向 第一節(jié)點下發(fā)第一文件的迀移通知,由第一節(jié)點在接收到該迀移通知之后,將該第一文件 從源分布式子卷迀移到目標(biāo)分布式子卷。
[0083]由于第一節(jié)點是全局?jǐn)?shù)據(jù)集合中的權(quán)重最小的節(jié)點2,因此,是通過傳輸壓力最輕 的節(jié)點2來傳輸最大的文件A,從而可以合理利用各節(jié)點的傳輸性能。
[0084] 在一個例子中,在節(jié)點2將文件A從分布式子卷D1迀移到分布式子卷D2的過程中, 節(jié)點2從節(jié)點1上獲取到文件A的部分?jǐn)?shù)據(jù),從節(jié)點3上獲取到文件A的部分?jǐn)?shù)據(jù)。節(jié)點2將節(jié) 點2上的文件A的部分?jǐn)?shù)據(jù)、節(jié)點1上的文件A的部分?jǐn)?shù)據(jù)、節(jié)點3上的文件A的部分?jǐn)?shù)據(jù),組合 在一起,得到一個完整的文件A。節(jié)點2將文件A寫入到分布式子卷D2,例如,節(jié)點2將文件A分 成3份,得到3份數(shù)據(jù),將這3份數(shù)據(jù)分別寫入到分布式子卷D2的節(jié)點1、節(jié)點2、節(jié)點3上,將文 件A對應(yīng)的冗余數(shù)據(jù)寫入到分布式子卷D2的節(jié)點4上。
[0085]其中,節(jié)點2在收集文件A的數(shù)據(jù)時,由于節(jié)點4中存儲的是文件A對應(yīng)的冗余數(shù)據(jù), 因此,節(jié)點2不需要收集節(jié)點4中存儲的冗余數(shù)據(jù)。
[0086] 在一個例子中,節(jié)點2將文件A從分布式子卷D1迀移到分布式子卷D2完成之后,節(jié) 點2還可以從分布式子卷D1中刪除文件A對應(yīng)的所有數(shù)據(jù)。例如,節(jié)點2從節(jié)點1、節(jié)點2、節(jié)點 3、節(jié)點4中刪除文件A對應(yīng)的所有數(shù)據(jù)。
[0087]通過上述實現(xiàn)方式,由于節(jié)點2是文件A的一個存儲節(jié)點,因此在收集文件A的數(shù)據(jù) 時,不需要從節(jié)點2上收集數(shù)據(jù),只需要從節(jié)點1和節(jié)點3上收集數(shù)據(jù),從而可以減少數(shù)據(jù)的 傳輸,避免傳輸資源的浪費,提高資源利用率。
[0088]步驟408,在全局?jǐn)?shù)據(jù)集合中增加第一節(jié)點的權(quán)重,并設(shè)置第一文件不是待迀移文 件。例如,在全局?jǐn)?shù)據(jù)集合中增加節(jié)點2的權(quán)重,如表4所示,并設(shè)置文件A不再是待迀移文 件,文件A當(dāng)前正在進(jìn)行迀移或者已經(jīng)完成迀移。
[0089] 其中,在增加節(jié)點2的權(quán)重時,可以將節(jié)點2的權(quán)重加1,或者加2,或者加3等,本發(fā) 明實施例中對于權(quán)重增加的數(shù)值不做限制,可以任意配置。
[0090] 表 4
[0092]步驟409,判斷當(dāng)前是否還存在待迀移文件。如果是,則執(zhí)行步驟403,繼續(xù)從所有 待迀移文件中選擇出優(yōu)先級最高的第一文件;否則,結(jié)束流程。
[0093] 由于當(dāng)前還存在待迀移文件,即文件B和文件C,因此從所有待迀移文件中選擇出 優(yōu)先級最高的文件B,從全局?jǐn)?shù)據(jù)集合中選擇權(quán)重最小的節(jié)點3,由節(jié)點3將文件B從分布式 子卷D1迀移到分布式子卷D2,在全局?jǐn)?shù)據(jù)集合中增加節(jié)點3的權(quán)重,并設(shè)置文件B不再是待 迀移文件,再次執(zhí)行步驟409。
[0094] 由于當(dāng)前還存在待迀移文件,即文件C,因此從所有待迀移文件中選擇出優(yōu)先級最 高的文件C,從全局?jǐn)?shù)據(jù)集合中選擇權(quán)重最小的節(jié)點1,由節(jié)點1將文件C從分布式子卷D1迀 移到分布式子卷D2,在全局?jǐn)?shù)據(jù)集合中增加節(jié)點1的權(quán)重,并設(shè)置文件C不再是待迀移文件, 再次執(zhí)行步驟409。
[0095]由于當(dāng)前不存在待迀移文件,因此結(jié)束流程,不再返回執(zhí)行步驟403。
[0096] 在一個例子中,節(jié)點2將文件A從分布式子卷D1迀移到分布式子卷D2的過程,與重 新執(zhí)行步驟403-步驟409的過程沒有關(guān)系,可以在節(jié)點2將文件A從分布式子卷D1迀移到分 布式子卷D2的過程中,執(zhí)行步驟403-步驟409。
[0097] 在一個例子中,當(dāng)?shù)谝还?jié)點將第一文件從源分布式子卷迀移到目標(biāo)分布式子卷完 成之后,則還可以在全局?jǐn)?shù)據(jù)集合中降低該第一節(jié)點的權(quán)重。進(jìn)一步的,當(dāng)?shù)谝晃募|移完 成后,通過降低該第一節(jié)點的權(quán)重,使得該第一節(jié)點又可以傳輸其它文件,保證各節(jié)點的合 理使用,避免該第一節(jié)點在第一文件迀移完成后,仍然由于權(quán)重過高,導(dǎo)致無法傳輸文件的 問題。例如,當(dāng)節(jié)點2將文件A從分布式子卷D1迀移到分布式子卷D2完成之后,還可以在全局 數(shù)據(jù)集合中降低該第一節(jié)點的權(quán)重,如上述增加權(quán)重是加2時,則降低權(quán)重可以是減2。
[0098] 基于上述技術(shù)方案,本發(fā)明實施例中,在需要迀移文件時,可以動態(tài)選擇用于進(jìn)行 文件迀移的節(jié)點,可以讓源分布式子卷包含的所有節(jié)點都參與文件迀移,當(dāng)需要迀移的文 件數(shù)量較多時,由多個節(jié)點共同完成文件迀移,可以提高文件迀移速度,避免出現(xiàn)某個節(jié)點 壓力過大的情況,不影響各節(jié)點的處理性能,讓節(jié)點的壓力負(fù)載達(dá)到均衡,同時確保在文件 迀移前后的數(shù)據(jù)一致性。
[0099] 在實際應(yīng)用中,即使一個節(jié)點承擔(dān)了多個文件的迀移工作,由于每個分布式子卷 內(nèi)的文件存放空間是獨立的,因此也不會出現(xiàn)讀取文件沖突的情況。
[0100] 在一個例子中,如圖5所示,為文件迀移過程的示意圖,當(dāng)上層業(yè)務(wù)需要將文件寫 入到分布式子卷D1時,可以將文件拆分成N+M份,并將其寫入到N+M個節(jié)點上。當(dāng)文件需要迀 移時,基于圖4所示的流程,可以由第一節(jié)點進(jìn)行N份數(shù)據(jù)的收集,再重新計算成N+M份,迀移 到分布式子卷D2的所有節(jié)點。
[0101]通常情況下,當(dāng)分布式子卷D1上的文件需要迀移時,上層業(yè)務(wù)可能依舊在操作該 文件?;诖耍诘谝晃募脑捶植际阶泳淼侥繕?biāo)分布式子卷的迀移過程中,還可以獲取第 一文件屬性信息,并根據(jù)該第一文件屬性信息,確定第一文件正在迀移過程中,并將第一文 件的更新數(shù)據(jù)發(fā)送到源分布式子卷和目標(biāo)分布式子卷。在第一節(jié)點將第一文件從源分布式 子卷迀移到目標(biāo)分布式子卷完成之后,還可以獲取第二文件屬性信息,并根據(jù)第二文件屬 性信息,確定第一文件已經(jīng)完成迀移,并將第一文件的更新數(shù)據(jù)發(fā)送到目標(biāo)分布式子卷。 [0102]由于是將第一文件的更新數(shù)據(jù)同時發(fā)送到源分布式子卷和目標(biāo)分布式子卷,因 此,如果發(fā)送給源分布式子卷或者目標(biāo)分布式子卷的更新數(shù)據(jù)發(fā)生丟失,也不會導(dǎo)致文件 出現(xiàn)錯誤,從而保證該文件在迀移前后的數(shù)據(jù)一致性。
[0103] 在一個例子中,可以由部署在控制設(shè)備上的API(Application Programming Interface,應(yīng)用程序編程接口)模塊執(zhí)行本發(fā)明實施例的上述各步驟。在此應(yīng)用場景下,以 下結(jié)合圖6所示的流程圖,對上述文件迀移的方法進(jìn)行詳細(xì)說明。
[0104]步驟601,上層業(yè)務(wù)對分布式子卷D1上的文件A持續(xù)寫入。
[0105]步驟602, API模塊將文件A的數(shù)據(jù)寫入到分布式子卷D1。
[0106]步驟603,當(dāng)文件A需要被迀移時,API模塊獲取文件A的文件屬性信息,該文件屬性 信息可以包括文件正在迀移的標(biāo)記、分布式子卷D2的信息。
[0107]步驟604,API模塊根據(jù)該文件屬性信息,確定文件A正在迀移過程中,并將該文件A 的更新數(shù)據(jù)發(fā)送到分布式子卷D1和分布式子卷D2。
[0108] 其中,文件A已經(jīng)存儲的數(shù)據(jù)也正從分布式子卷D1迀移到分布式子卷D2。
[0109] 在一個例子中,文件A的更新數(shù)據(jù)可能是追加于文件A末尾的數(shù)據(jù),也可能是對文 件A的修改數(shù)據(jù)(如替換文件A中的數(shù)據(jù),或者刪除文件A中的數(shù)據(jù))。
[0110] 當(dāng)文件A的更新數(shù)據(jù)是追加于文件A末尾的數(shù)據(jù)時,由于需要從分布式子卷D1迀移 到分布式子卷D2的數(shù)據(jù)長度已經(jīng)確定,因此,發(fā)送到分布式子卷D1的文件A的更新數(shù)據(jù),不 會被迀移到分布式子卷D2,不會對原數(shù)據(jù)造成影響。
[0111] 當(dāng)文件A的更新數(shù)據(jù)是對文件A的修改數(shù)據(jù)時,如果將文件A的更新數(shù)據(jù)發(fā)送到分 布式子卷D1后,在分布式子卷D1上已經(jīng)對文件A進(jìn)行修改,則在將文件A迀移到分布式子卷 D2后,不再對文件A進(jìn)行修改。如果將文件A的更新數(shù)據(jù)發(fā)送到分布式子卷D1后,在分布式子 卷D1上沒有對文件A進(jìn)行修改,則在將文件A迀移到分布式子卷D2后,由于分布式子卷D2上 也存在文件A的更新數(shù)據(jù),因此可以利用分布式子卷D2上的更新數(shù)據(jù)對文件A進(jìn)行修改。
[0112] 由于是將第一文件的更新數(shù)據(jù)同時發(fā)送到源分布式子卷和目標(biāo)分布式子卷,因 此,如果發(fā)送給源分布式子卷或者目標(biāo)分布式子卷的更新數(shù)據(jù)發(fā)生丟失,也不會導(dǎo)致文件 出現(xiàn)錯誤,從而保證該文件在迀移前后的數(shù)據(jù)一致性。
[0113] 步驟605,當(dāng)文件A迀移完成后,API模塊獲取文件A的文件屬性信息,該文件屬性信 息可以包括文件已經(jīng)完成迀移的標(biāo)記或者不包括文件正在迀移的標(biāo)記,在這兩種情況下, 均表示文件A已經(jīng)完成迀移。
[0114] 步驟606,API模塊根據(jù)該文件屬性信息,確定文件A已經(jīng)完成迀移,并將該文件A的 更新數(shù)據(jù)發(fā)送到分布式子卷D2,而不再將文件A的更新數(shù)據(jù)發(fā)送到分布式子卷D1,而且,還 可以從分布式子卷D1內(nèi)刪除文件A。
[0115] 基于與上述方法同樣的發(fā)明構(gòu)思,本發(fā)明實施例中還提供了一種文件迀移的裝 置,該文件迀移的裝置應(yīng)用在控制設(shè)備上。其中,該文件迀移的裝置可以通過軟件實現(xiàn),也 可以通過硬件或者軟硬件結(jié)合的方式實現(xiàn)。以軟件實現(xiàn)為例,作為一個邏輯意義上的裝置, 是通過其所在的控制設(shè)備的處理器,讀取非易失性存儲器中對應(yīng)的計算機(jī)程序指令形成 的。從硬件層面而言,如圖7所示,為本發(fā)明提出的文件迀移的裝置所在的控制設(shè)備的一種 硬件結(jié)構(gòu)圖,除了圖7所示的處理器、非易失性存儲器外,控制設(shè)備還可以包括其他硬件,如 負(fù)責(zé)處理報文的轉(zhuǎn)發(fā)芯片、網(wǎng)絡(luò)接口、內(nèi)存等;從硬件結(jié)構(gòu)上來講,該控制設(shè)備還可能是分 布式設(shè)備,可能包括多個接口卡,以便在硬件層面進(jìn)行報文處理的擴(kuò)展。
[0116]如圖8所示,為本發(fā)明提出的文件迀移的裝置的結(jié)構(gòu)圖,所述裝置包括:
[0117] 第一選擇模塊11,用于從所有待迀移文件中選擇出優(yōu)先級最高的第一文件;第二 選擇模塊12,用于利用全局?jǐn)?shù)據(jù)集合中的每個節(jié)點的權(quán)重選擇第一節(jié)點;所述全局?jǐn)?shù)據(jù)集 合中記錄分布式存儲系統(tǒng)中的每個節(jié)點與權(quán)重的對應(yīng)關(guān)系;迀移模塊13,用于通過第一節(jié) 點將所述第一文件從源分布式子卷迀移到目標(biāo)分布式子卷;處理模塊14,用于在所述全局 數(shù)據(jù)集合中增加所述第一節(jié)點的權(quán)重,設(shè)置所述第一文件不是待迀移文件,如果當(dāng)前還存 在待迀移文件,則由所述第一選擇模塊12執(zhí)行從所有待迀移文件中選擇出優(yōu)先級最高的第 一文件的過程。
[0118] 在一個例子中,所述文件迀移的裝置還包括:獲取模塊(在圖中未視出),用于獲取 每個待迀移文件的文件大小,按照所述文件大小為所述每個待迀移文件劃分優(yōu)先級;文件 大小越大的待迀移文件,其優(yōu)先級越高。
[0119] 所述第二選擇模塊12,具體用于在利用全局?jǐn)?shù)據(jù)集合中的每個節(jié)點的權(quán)重選擇第 一節(jié)點的過程中,通過查詢所述第一文件所在的源分布式子卷對應(yīng)的局部集合,得到所述 源分布式子卷包含的各節(jié)點;從所述全局?jǐn)?shù)據(jù)集合中查詢到所述源分布式子卷包含的各節(jié) 點的權(quán)重,并選擇權(quán)重最小的節(jié)點為所述第一節(jié)點;或者,從全局?jǐn)?shù)據(jù)集合中選擇權(quán)重最小 的節(jié)點,并判斷當(dāng)前選擇的節(jié)點是否位于所述第一文件所在的源分布式子卷對應(yīng)的局部集 合中;如果是,將當(dāng)前選擇的節(jié)點確定為所述第一節(jié)點;如果否,從所述全局?jǐn)?shù)據(jù)集合中選 擇權(quán)重第二小的節(jié)點,并繼續(xù)執(zhí)行判斷當(dāng)前選擇的節(jié)點是否位于所述局部集合的過程,一 直到當(dāng)前選擇的節(jié)點位于所述局部集合,并將當(dāng)前選擇的節(jié)點確定為所述第一節(jié)點;其中, 所述局部集合中記錄了所述源分布式子卷包含的各節(jié)點。
[0120] 所述處理模塊14,還用于在通過第一節(jié)點將所述第一文件從源分布式子卷迀移到 目標(biāo)分布式子卷后,在所述第一節(jié)點將所述第一文件從源分布式子卷迀移到目標(biāo)分布式子 卷完成后,在所述全局?jǐn)?shù)據(jù)集合中降低所述第一節(jié)點的權(quán)重。
[0121] 所述獲取模塊,還用于在所述第一文件從源分布式子卷到目標(biāo)分布式子卷的迀移 過程中,獲取所述第一文件對應(yīng)的第一文件屬性信息,所述第一文件屬性信息包括文件正 在迀移的標(biāo)記、所述目標(biāo)分布式子卷的信息;
[0122] 所述裝置還包括:發(fā)送模塊(在圖中未體現(xiàn)),用于根據(jù)所述第一文件屬性信息,確 定所述第一文件正在迀移過程中,并將所述第一文件的更新數(shù)據(jù)發(fā)送到所述源分布式子卷 和所述目標(biāo)分布式子卷。
[0123] 所述獲取模塊,還用于在將所述第一文件從源分布式子卷迀移到目標(biāo)分布式子卷 完成之后,獲取所述第一文件對應(yīng)的第二文件屬性信息,所述第二文件屬性信息包括文件 已經(jīng)完成迀移的標(biāo)記或者不包括文件正在迀移的標(biāo)記;
[0124] 所述發(fā)送模塊,還用于根據(jù)所述第二文件屬性信息,確定所述第一文件已經(jīng)完成 迀移,并將所述第一文件的更新數(shù)據(jù)發(fā)送到所述目標(biāo)分布式子卷。
[0125] 其中,本發(fā)明裝置的各個模塊可以集成于一體,也可以分離部署。上述模塊可以合 并為一個模塊,也可以進(jìn)一步拆分成多個子模塊。
[0126] 通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可借助 軟件加必需的通用硬件平臺的方式來實現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更 佳的實施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的 部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機(jī)軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若 干指令用以使得一臺計算機(jī)設(shè)備(可以是個人計算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā) 明各個實施例所述的方法。本領(lǐng)域技術(shù)人員可以理解附圖只是一個優(yōu)選實施例的示意圖, 附圖中的模塊或流程并不一定是實施本發(fā)明所必須的。
[0127] 本領(lǐng)域技術(shù)人員可以理解實施例中的裝置中的模塊可以按照實施例描述進(jìn)行分 布于實施例的裝置中,也可以進(jìn)行相應(yīng)變化位于不同于本實施例的一個或多個裝置中。上 述實施例的模塊可以合并為一個模塊,也可進(jìn)一步拆分成多個子模塊。上述本發(fā)明實施例 序號僅僅為了描述,不代表實施例的優(yōu)劣。
[0128] 以上公開的僅為本發(fā)明的幾個具體實施例,但是,本發(fā)明并非局限于此,任何本領(lǐng) 域的技術(shù)人員能思之的變化都應(yīng)落入本發(fā)明的保護(hù)范圍。
【主權(quán)項】
1. 一種文件迀移的方法,其特征在于,所述方法包括以下步驟: 從所有待迀移文件中選擇出優(yōu)先級最高的第一文件; 利用全局?jǐn)?shù)據(jù)集合中的每個節(jié)點的權(quán)重選擇第一節(jié)點;其中,所述全局?jǐn)?shù)據(jù)集合中記 錄了分布式存儲系統(tǒng)中的每個節(jié)點與權(quán)重的對應(yīng)關(guān)系; 通過第一節(jié)點將所述第一文件從源分布式子卷迀移到目標(biāo)分布式子卷; 在所述全局?jǐn)?shù)據(jù)集合中增加所述第一節(jié)點的權(quán)重,設(shè)置所述第一文件不是待迀移文 件,如果當(dāng)前還存在待迀移文件,則返回執(zhí)行從所有待迀移文件中選擇出優(yōu)先級最高的第 一文件的過程。2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述利用全局?jǐn)?shù)據(jù)集合中的每個節(jié)點的權(quán) 重選擇第一節(jié)點的過程,具體包括: 通過查詢所述第一文件所在的源分布式子卷對應(yīng)的局部集合,得到所述源分布式子卷 包含的各節(jié)點;從所述全局?jǐn)?shù)據(jù)集合中查詢到所述源分布式子卷包含的各節(jié)點的權(quán)重,并 選擇權(quán)重最小的節(jié)點為所述第一節(jié)點;或者, 從全局?jǐn)?shù)據(jù)集合中選擇權(quán)重最小的節(jié)點,并判斷當(dāng)前選擇的節(jié)點是否位于所述第一文 件所在的源分布式子卷對應(yīng)的局部集合中;如果是,將當(dāng)前選擇的節(jié)點確定為所述第一節(jié) 點;如果否,從所述全局?jǐn)?shù)據(jù)集合中選擇權(quán)重第二小的節(jié)點,并繼續(xù)執(zhí)行判斷當(dāng)前選擇的節(jié) 點是否位于所述局部集合的過程,一直到當(dāng)前選擇的節(jié)點位于所述局部集合,并將當(dāng)前選 擇的節(jié)點確定為所述第一節(jié)點; 其中,所述局部集合中記錄了所述源分布式子卷包含的各節(jié)點。3. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述通過第一節(jié)點將所述第一文件從源分 布式子卷迀移到目標(biāo)分布式子卷之后,所述方法還包括: 在所述第一節(jié)點將所述第一文件從源分布式子卷迀移到目標(biāo)分布式子卷完成之后,則 在所述全局?jǐn)?shù)據(jù)集合中降低所述第一節(jié)點的權(quán)重。4. 根據(jù)權(quán)利要求1-3任一項所述的方法,其特征在于,在所述第一文件從源分布式子卷 到目標(biāo)分布式子卷的迀移過程中,所述方法進(jìn)一步包括: 獲取所述第一文件對應(yīng)的第一文件屬性信息,所述第一文件屬性信息包括文件正在迀 移的標(biāo)記、所述目標(biāo)分布式子卷的信息; 根據(jù)所述第一文件屬性信息,確定所述第一文件正在迀移過程中,并將所述第一文件 的更新數(shù)據(jù)發(fā)送到所述源分布式子卷和所述目標(biāo)分布式子卷。5. 根據(jù)權(quán)利要求4所述的方法,其特征在于,在所述第一節(jié)點將所述第一文件從源分布 式子卷迀移到目標(biāo)分布式子卷完成之后,所述方法進(jìn)一步包括: 獲取所述第一文件對應(yīng)的第二文件屬性信息,所述第二文件屬性信息包括文件已經(jīng)完 成迀移的標(biāo)記或者不包括文件正在迀移的標(biāo)記; 根據(jù)所述第二文件屬性信息,確定所述第一文件已經(jīng)完成迀移,并將所述第一文件的 更新數(shù)據(jù)發(fā)送到所述目標(biāo)分布式子卷。6. -種文件迀移的裝置,其特征在于,所述裝置具體包括: 第一選擇模塊,用于從所有待迀移文件中選擇出優(yōu)先級最高的第一文件; 第二選擇模塊,用于利用全局?jǐn)?shù)據(jù)集合中的每個節(jié)點的權(quán)重選擇第一節(jié)點;所述全局 數(shù)據(jù)集合中記錄了分布式存儲系統(tǒng)中的每個節(jié)點與權(quán)重的對應(yīng)關(guān)系; 迀移模塊,用于通過第一節(jié)點將所述第一文件從源分布式子卷迀移到目標(biāo)分布式子 卷; 處理模塊,用于在所述全局?jǐn)?shù)據(jù)集合中增加所述第一節(jié)點的權(quán)重,設(shè)置所述第一文件 不是待迀移文件,如果當(dāng)前還存在待迀移文件,則由所述第一選擇模塊執(zhí)行從所有待迀移 文件中選擇出優(yōu)先級最高的第一文件的過程。7. 根據(jù)權(quán)利要求6所述的裝置,其特征在于, 所述第二選擇模塊,具體用于在利用全局?jǐn)?shù)據(jù)集合中的每個節(jié)點的權(quán)重選擇第一節(jié)點 的過程中,通過查詢所述第一文件所在的源分布式子卷對應(yīng)的局部集合,得到所述源分布 式子卷包含的各節(jié)點;從所述全局?jǐn)?shù)據(jù)集合中查詢到所述源分布式子卷包含的各節(jié)點的權(quán) 重,并選擇權(quán)重最小的節(jié)點為所述第一節(jié)點;或者,從全局?jǐn)?shù)據(jù)集合中選擇權(quán)重最小的節(jié) 點,并判斷當(dāng)前選擇的節(jié)點是否位于所述第一文件所在的源分布式子卷對應(yīng)的局部集合 中;如果是,將當(dāng)前選擇的節(jié)點確定為所述第一節(jié)點;如果否,從所述全局?jǐn)?shù)據(jù)集合中選擇 權(quán)重第二小的節(jié)點,并繼續(xù)執(zhí)行判斷當(dāng)前選擇的節(jié)點是否位于所述局部集合的過程,一直 到當(dāng)前選擇的節(jié)點位于所述局部集合,并將當(dāng)前選擇的節(jié)點確定為所述第一節(jié)點;其中,所 述局部集合中記錄了所述源分布式子卷包含的各節(jié)點。8. 根據(jù)權(quán)利要求6所述的裝置,其特征在于, 所述處理模塊,還用于在通過第一節(jié)點將所述第一文件從源分布式子卷迀移到目標(biāo)分 布式子卷之后,在所述第一節(jié)點將所述第一文件從源分布式子卷迀移到目標(biāo)分布式子卷完 成后,在所述全局?jǐn)?shù)據(jù)集合中降低所述第一節(jié)點的權(quán)重。9. 根據(jù)權(quán)利要求6-8任一項所述的裝置,其特征在于,所述裝置還包括: 獲取模塊,用于在所述第一文件從源分布式子卷到目標(biāo)分布式子卷的迀移過程中,獲 取所述第一文件對應(yīng)的第一文件屬性信息,所述第一文件屬性信息包括文件正在迀移的標(biāo) 記、所述目標(biāo)分布式子卷的信息; 發(fā)送模塊,用于根據(jù)所述第一文件屬性信息,確定所述第一文件正在迀移過程中,并將 所述第一文件的更新數(shù)據(jù)發(fā)送到所述源分布式子卷和所述目標(biāo)分布式子卷。10. 根據(jù)權(quán)利要求9所述的裝置,其特征在于, 所述獲取模塊,還用于在將所述第一文件從源分布式子卷迀移到目標(biāo)分布式子卷完成 之后,獲取所述第一文件對應(yīng)的第二文件屬性信息,所述第二文件屬性信息包括文件已經(jīng) 完成迀移的標(biāo)記或者不包括文件正在迀移的標(biāo)記; 所述發(fā)送模塊,還用于根據(jù)所述第二文件屬性信息,確定所述第一文件已經(jīng)完成迀移, 并將所述第一文件的更新數(shù)據(jù)發(fā)送到所述目標(biāo)分布式子卷。
【文檔編號】G06F17/30GK105930545SQ201610512718
【公開日】2016年9月7日
【申請日】2016年6月29日
【發(fā)明人】江萍, 于相洋
【申請人】浙江宇視科技有限公司