一種分布式塊存儲克隆方法
【專利摘要】本發(fā)明公開了一種分布式塊存儲克隆方法,提出了一個存儲系統(tǒng),所述存儲系統(tǒng)包括分布式塊存儲基礎(chǔ)層、塊存儲中間API層和用戶應(yīng)用層;通過對存儲系統(tǒng)的塊設(shè)備卷建立快照,克隆時用戶指定該卷的某個時期的一個快照ID建立新的塊設(shè)備卷,用戶所指定的卷稱為父卷,所創(chuàng)建的新塊設(shè)備卷稱為克隆卷;然后建立克隆卷與父卷之間的映射關(guān)系,當向克隆卷發(fā)出讀寫請求時,從父卷的對應(yīng)快照中獲取數(shù)據(jù)復(fù)制到為克隆卷申請的存儲空間中,再將新數(shù)據(jù)予以覆蓋寫入。通過該分布式塊存儲克隆方法,能夠最大程度的保證克隆的高效性和克隆數(shù)據(jù)的一致性,使得用戶的數(shù)據(jù)不會發(fā)生意外丟失和篡改,顯著提高了克隆的穩(wěn)定性和安全性。
【專利說明】一種分布式塊存儲克隆方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及塊存儲領(lǐng)域,具體地說是一種分布式塊存儲克隆方法。
【背景技術(shù)】
[0002]克隆技術(shù)的應(yīng)用主要是為了滿足人們對重復(fù)數(shù)據(jù)的需求。在實際應(yīng)用中,往往要面對這樣的場景,面對一份存放在塊設(shè)備上的數(shù)據(jù),既想對其進行修改,又不希望完全丟失其原始數(shù)據(jù),比較快速的解決方法就是克隆出一個復(fù)本,在復(fù)本上進行修改和覆蓋,而其原本保持不變。傳統(tǒng)的克隆解決方案一般會選擇完整地備份原始數(shù)據(jù),這樣的處理方式不僅效率低下,還會在業(yè)務(wù)高峰期占用較多的帶寬,從而極大地影響用戶使用,最大的隱患在于備份過程中如果原始數(shù)據(jù)被修改,則有可能造成克隆前后的數(shù)據(jù)不一致。
【發(fā)明內(nèi)容】
[0003]針對現(xiàn)有技術(shù)的不足之處,本發(fā)明提出一種分布式塊存儲克隆方法。
[0004]本發(fā)明所述一種分布式塊存儲克隆方法,解決上述技術(shù)問題采用的技術(shù)方案如下:本發(fā)明所述分布式塊存儲克隆方法提出了一個存儲系統(tǒng),所述存儲系統(tǒng)包括分布式塊存儲基礎(chǔ)層、塊存儲中間API層和用戶應(yīng)用層;其中,所述分布式塊存儲基礎(chǔ)層完成對底層物理塊設(shè)備的模擬,底層設(shè)備為物理磁盤disk或邏輯卷,同時負責接收并響應(yīng)塊存儲中間API層發(fā)來的讀寫請求;所述塊存儲中間API層監(jiān)控分布式塊存儲基礎(chǔ)層的狀態(tài)和讀寫行為,所述用戶應(yīng)用層接收用戶的管理類操作命令和讀寫命令,并向塊存儲中間API層發(fā)起請求。
[0005]本實施例所述分布式塊存儲克隆方法,通過對存儲系統(tǒng)的塊設(shè)備卷建立快照,克隆時用戶指定該卷的某個時期的一個快照ID建立新的塊設(shè)備卷,用戶所指定的卷稱為父卷,所創(chuàng)建的新塊設(shè)備卷稱為克隆卷;然后建立克隆卷與父卷之間的映射關(guān)系,當向克隆卷發(fā)出讀寫請求時,從父卷的對應(yīng)快照中獲取數(shù)據(jù)復(fù)制到為克隆卷申請的存儲空間中,再將新數(shù)據(jù)予以覆蓋寫入??寺【淼脑紨?shù)據(jù)完全來自于父卷的快照數(shù)據(jù),沒有額為申請空間,只有當覆蓋寫入時才真正使用物理空間,極大地提高了克隆操作的效率。所述分布式塊存儲克隆方法包括:對塊設(shè)備卷建立快照的步驟,建立克隆卷與父卷之間映射關(guān)系的步驟以及對克隆卷發(fā)起讀寫請求的步驟。
[0006]本發(fā)明所述一種分布式塊存儲克隆方法具有的有益效果:通過所述分布式塊存儲克隆方法,不再需要完整的備份所有數(shù)據(jù),引入快照ID使得克隆可以瞬間完成,能夠最大程度的保證克隆的高效性,不會在業(yè)務(wù)高峰期占用較多帶寬,能夠最大限度的減小對用戶使用的影響;同時寫請求的過程,使得用戶的數(shù)據(jù)不會發(fā)生意外丟失和篡改,提高了克隆數(shù)據(jù)的一致性,從而顯著提高了克隆的穩(wěn)定性和安全性,該分布式塊存儲克隆方法更加適用于將來大規(guī)模普及的分布式塊存儲中。
【專利附圖】
【附圖說明】
[0007]附圖1為本發(fā)明所述存儲系統(tǒng)的示意圖。
【具體實施方式】
[0008]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚明白,下文中將結(jié)合附圖和實施例,對本發(fā)明的一種分布式塊存儲克隆方法進行詳細說明。
[0009]如附圖1所示,本發(fā)明所述分布式塊存儲克隆方法提出了一個存儲系統(tǒng),所述存儲系統(tǒng)包括分布式塊存儲基礎(chǔ)層、塊存儲中間API層和用戶應(yīng)用層;其中,所述分布式塊存儲基礎(chǔ)層完成對底層物理塊設(shè)備的模擬,底層設(shè)備為物理磁盤disk或邏輯卷,同時負責接收并響應(yīng)塊存儲中間API層發(fā)來的讀寫請求;所述塊存儲中間API層監(jiān)控分布式塊存儲基礎(chǔ)層的狀態(tài)和讀寫行為,所述用戶應(yīng)用層接收用戶的管理類操作命令和讀寫命令,并向塊存儲中間API層發(fā)起請求。
[0010]下面對本發(fā)明所述存儲系統(tǒng)的三個組成部分進行詳細說明:
所述分布式塊存儲基礎(chǔ)層:該層完成對底層物理塊設(shè)備的模擬,塊設(shè)備為單獨的物理磁盤disk或邏輯卷,它們是該層識別的最基本的塊存儲單元;所有塊設(shè)備(卷)被編號并分組,以便通過一致性哈希將待存放的數(shù)據(jù)映射到對應(yīng)的存儲介質(zhì)上;同時,所述分布式塊存儲基礎(chǔ)層還負責接收并響應(yīng)上層發(fā)來的讀寫請求、消息調(diào)度、自適應(yīng)調(diào)整權(quán)重,因此,所有對底層塊設(shè)備的操作以及對上層的接口支持均在該層完成;
所述塊存儲中間API層:該層進行接口封裝,封裝出的接口能夠進行隨機讀寫、克隆快照管理塊等所有存儲方面的應(yīng)用;同時,該層也會針對多線程進行優(yōu)化,對數(shù)據(jù)緩存進行控制,監(jiān)控分布式塊存儲基礎(chǔ)層卷的狀態(tài)和讀寫行為;
所述用戶應(yīng)用層:該層用于接收用戶在終端或服務(wù)端所發(fā)出的管理類操作命令和讀寫命令,進行解析和篩選,并分別調(diào)用對應(yīng)的中間層API (應(yīng)用程序編程接口)完成功能;即用戶應(yīng)用層負責收集用戶的傳入?yún)?shù)和操作類型,并向塊存儲中間API層發(fā)起請求,執(zhí)行完畢后給用戶反饋結(jié)果。
[0011]上述分布式塊存儲基礎(chǔ)層、塊存儲中間API層和用戶應(yīng)用層三個部分是本存儲系統(tǒng)的核心模塊,三者共同協(xié)調(diào)配合完成包括克隆在內(nèi)的所有塊設(shè)備卷的高級功能。本存儲系統(tǒng)的塊存儲單元卷都會擁有一個默認的快照ID,當對該卷的當前數(shù)據(jù)添加快照之后,此快照ID會自動增1,成為最新的快照的ID號;同時對卷進行讀寫時需要指定快照的ID號,這樣可以確定用戶當前需要對卷的哪一部分數(shù)據(jù)進行讀寫操作。
[0012]實施例:
下面通過一個實施例,對本發(fā)明所述分布式塊存儲克隆方法的優(yōu)點和設(shè)計內(nèi)容,進行詳細說明。
[0013]本實施例所述分布式塊存儲克隆方法,提出了一個存儲系統(tǒng),通過對存儲系統(tǒng)的塊設(shè)備卷建立快照,克隆時用戶指定該卷的某個時期的一個快照ID建立新的塊設(shè)備卷,用戶所指定的卷稱為父卷,所創(chuàng)建的新塊設(shè)備卷稱為克隆卷;然后建立克隆卷與父卷之間的映射關(guān)系,當向克隆卷發(fā)出讀寫請求時,從父卷的對應(yīng)快照中獲取數(shù)據(jù)復(fù)制到為克隆卷申請的存儲空間中,再將新數(shù)據(jù)予以覆蓋寫入??寺【淼脑紨?shù)據(jù)完全來自于父卷的快照數(shù)據(jù),沒有額為申請空間,只有當覆蓋寫入時才真正使用物理空間,極大地提高了克隆操作的效率。所述分布式塊存儲克隆方法包括:對塊設(shè)備卷建立快照的步驟,建立克隆卷與父卷之間映射關(guān)系的步驟以及對克隆卷發(fā)起讀寫請求的步驟。
[0014]所述對塊設(shè)備卷建立快照的步驟包括:完整記錄存儲系統(tǒng)的塊設(shè)備卷中所有的可用數(shù)據(jù),將卷各時期的數(shù)據(jù)進行分層,同時期的數(shù)據(jù)擁有相同的一個快照ID號,各快照之間通過ID號彼此區(qū)分,通過對卷建立快照將卷的數(shù)據(jù)存放形式變成層狀分布;需要訪問塊設(shè)備卷某時期的數(shù)據(jù)時,只需指定其對應(yīng)的快照ID。
[0015]所述建立克隆卷與父卷之間映射關(guān)系的步驟包括:用戶指定父卷的一個快照ID,分布式塊存儲基礎(chǔ)層接收到創(chuàng)建命令之后,根據(jù)用戶給出的新卷名稱創(chuàng)建一個克隆卷,將其基本信息注冊到存儲系統(tǒng)中;建立一個對象數(shù)據(jù)文件來記錄克隆卷與父卷的對應(yīng)關(guān)系,使用LevelDB以key-value的形式標識出克隆卷與其父卷的對應(yīng)關(guān)系,即把克隆卷名稱和父卷快照ID組成key-value對,通過LevelDB的接口將此數(shù)據(jù)對象記錄到存儲系統(tǒng)中;同時,所述對象數(shù)據(jù)文件還記錄著父卷所在的存儲池、父卷名稱以及所使用的父卷快照ID號等信息,以此來鎖定克隆卷和父卷的對應(yīng)關(guān)系。
[0016]所述對克隆卷發(fā)起讀寫請求的步驟包括:對克隆卷發(fā)起讀請求和對克隆卷發(fā)起寫請求兩個過程;
當用戶對克隆卷發(fā)起讀請求時,所述存儲系統(tǒng)先通過記錄克隆卷和父卷之間映射關(guān)系的對象數(shù)據(jù)文件,查看該卷是否存在父卷并獲得父卷的快照ID,將針對克隆卷的讀請求轉(zhuǎn)還成針對父卷對應(yīng)快照的讀請求,再配合用戶給出的數(shù)據(jù)偏移量和讀取數(shù)據(jù)長度,即可從父卷中獲取數(shù)據(jù)。而在上層用戶看來,像是從一個真正的新卷里獲取數(shù)據(jù);
當用戶對克隆卷發(fā)出寫請求時,所述存儲系統(tǒng)先通過記錄克隆卷和父卷之間映射關(guān)系的對象數(shù)據(jù)文件,查看該卷是否存在父卷并獲得父卷的快照ID,然后再根據(jù)數(shù)據(jù)要寫入的偏移地址和長度判斷是否越界,在確定此次操作合法之后,存儲系統(tǒng)為保證父卷和克隆卷數(shù)據(jù)的一致性,先從父卷的對應(yīng)快照中獲取數(shù)據(jù)復(fù)制到為克隆卷申請的存儲空間中,然后再將新數(shù)據(jù)予以覆蓋寫入。從父卷將相應(yīng)偏移處的數(shù)據(jù)進行拷貝,是為克隆卷申請存儲空間的過程,這樣做能在最大限度上保證父卷和克隆卷數(shù)據(jù)的一致性,確保用戶不想修改部分的數(shù)據(jù)的安全。
[0017]上述【具體實施方式】僅是本發(fā)明的具體個案,本發(fā)明的專利保護范圍包括但不限于上述【具體實施方式】,任何符合本發(fā)明的權(quán)利要求書的且任何所屬【技術(shù)領(lǐng)域】的普通技術(shù)人員對其所做的適當變化或替換,皆應(yīng)落入本發(fā)明的專利保護范圍。
【權(quán)利要求】
1.一種分布式塊存儲克隆方法,其特征在于,所述分布式塊存儲克隆方法提出了一個存儲系統(tǒng),所述存儲系統(tǒng)包括分布式塊存儲基礎(chǔ)層、塊存儲中間API層和用戶應(yīng)用層;其中, 所述分布式塊存儲基礎(chǔ)層:完成對底層物理塊設(shè)備的模擬,塊設(shè)備為單獨的物理磁盤disk或邏輯卷,所有塊設(shè)備卷被編號并分組;同時所述分布式塊存儲基礎(chǔ)層還負責接收并響應(yīng)塊存儲中間API層發(fā)來的讀寫請求、消息調(diào)度、自適應(yīng)調(diào)整權(quán)重,且負責完成所有對底層塊設(shè)備的操作以及對塊存儲中間API層的接口支持; 所述塊存儲中間API層:進行接口封裝,封裝出的接口能夠進行隨機讀寫、克隆快照管理塊所有存儲方面的應(yīng)用;同時,該層針對多線程進行優(yōu)化,對數(shù)據(jù)緩存進行控制,監(jiān)控分布式塊存儲基礎(chǔ)層卷的狀態(tài)和讀寫行為; 所述用戶應(yīng)用層:負責收集用戶的傳入?yún)?shù)和操作類型,并向塊存儲中間API層發(fā)起請求,并在執(zhí)行完畢后給用戶反饋結(jié)果。
2.根據(jù)權(quán)利要求1所述的一種分布式塊存儲克隆方法,其特征在于,通過對存儲系統(tǒng)的塊設(shè)備卷建立快照,克隆時用戶指定該卷的某個時期的一個快照ID建立新的塊設(shè)備卷,用戶所指定的卷稱為父卷,所創(chuàng)建的新塊設(shè)備卷稱為克隆卷;然后建立克隆卷與父卷之間的映射關(guān)系,當向克隆卷發(fā)出讀寫請求時,從父卷的對應(yīng)快照中獲取數(shù)據(jù)復(fù)制到為克隆卷申請的存儲空間中,再將新數(shù)據(jù)予以覆蓋寫入; 所述分布式塊存儲克隆方法包括:對塊設(shè)備卷建立快照的步驟,建立克隆卷與父卷之間映射關(guān)系的步驟以及對克隆卷發(fā)起讀寫請求的步驟。
3.根據(jù)權(quán)利要求2所述的一種分布式塊存儲克隆方法,其特征在于,所述對塊設(shè)備卷建立快照的步驟包括:完整記錄存儲系統(tǒng)的塊設(shè)備卷中所有的可用數(shù)據(jù),將卷各時期的數(shù)據(jù)進行分層,同時期的數(shù)據(jù)擁有相同的一個快照ID號,各快照之間通過ID號彼此區(qū)分,通過對卷建立快照將卷的數(shù)據(jù)存放形式變成層狀分布D。
4.根據(jù)權(quán)利要求3所述的一種分布式塊存儲克隆方法,其特征在于,所述建立克隆卷與父卷之間映射關(guān)系的步驟包括:用戶指定父卷的一個快照ID,分布式塊存儲基礎(chǔ)層接收到創(chuàng)建命令之后,根據(jù)用戶給出的新卷名稱創(chuàng)建一個克隆卷,將其基本信息注冊到存儲系統(tǒng)中;建立一個對象數(shù)據(jù)文件來記錄克隆卷與父卷的對應(yīng)關(guān)系,使用LevelDB以key-value的形式標識出克隆卷與其父卷的對應(yīng)關(guān)系,即把克隆卷名稱和父卷快照ID組成key-value對,通過LevelDB的接口將此數(shù)據(jù)對象記錄到存儲系統(tǒng)中;同時,所述對象數(shù)據(jù)文件還記錄著父卷所在的存儲池、父卷名稱以及所使用的父卷快照ID號。
5.根據(jù)權(quán)利要求4所述的一種分布式塊存儲克隆方法,其特征在于,所述對克隆卷發(fā)起讀寫請求的步驟包括:對克隆卷發(fā)起讀請求和對克隆卷發(fā)起寫請求兩個過程。
6.根據(jù)權(quán)利要求5所述的一種分布式塊存儲克隆方法,其特征在于,當用戶對克隆卷發(fā)起讀請求時,所述存儲系統(tǒng)先通過記錄克隆卷和父卷之間映射關(guān)系的對象數(shù)據(jù)文件,查看該卷是否存在父卷并獲得父卷的快照ID,將針對克隆卷的讀請求轉(zhuǎn)還成針對父卷對應(yīng)快照的讀請求,再配合用戶給出的數(shù)據(jù)偏移量和讀取數(shù)據(jù)長度,即可從父卷中獲取數(shù)據(jù)。
7.根據(jù)權(quán)利要求5所述的一種分布式塊存儲克隆方法,其特征在于,當用戶對克隆卷發(fā)出寫請求時,所述存儲系統(tǒng)先通過記錄克隆卷和父卷之間映射關(guān)系的對象數(shù)據(jù)文件,查看該卷是否存在父卷并獲得父卷的快照ID,然后再根據(jù)數(shù)據(jù)要寫入的偏移地址和長度判斷是否越界,在確定此次操作合法之后,先從父卷的對應(yīng)快照中獲取數(shù)據(jù)復(fù)制到為克隆卷申請的存儲空間中,然后再將新數(shù)據(jù)予以覆蓋寫入。
【文檔編號】G06F11/14GK104182184SQ201410426148
【公開日】2014年12月3日 申請日期:2014年8月27日 優(yōu)先權(quán)日:2014年8月27日
【發(fā)明者】孟圣智, 魏盟 申請人:浪潮電子信息產(chǎn)業(yè)股份有限公司