一種基于分布式存儲重復數據刪除的虛擬機系統盤的方法
【技術領域】
[0001]本發明涉及云平臺存儲虛擬化技術領域,特別是一種基于分布式存儲重復數據刪除的虛擬機系統盤的方法。
【背景技術】
[0002]—般的云計算平臺上有多個計算節點,而每個計算節點上都有多個分布式存儲的虛擬機,有些性能較高的節點甚至有幾十個虛擬機,監控代理監控這些虛擬機在高峰期使用大量的網絡10,并且分布式存儲副本數越多,網絡1的壓力更大,這樣會帶來以下問題:
[0003]—是客戶不想花費額外的錢來升級交換機。
[0004]二是高峰期大量的虛擬機同時讀寫,分布式存儲多副本的情況下,網絡1流量大。
[0005]三是分布式存儲成本高。
[0006]為了解決上述問題,需要有一種基于分布式存儲重復數據刪除的虛擬機系統盤方法;減輕網絡1的壓力并同時節省分布式存儲的成本。
【發明內容】
[0007]本發明解決的技術問題在于提供一種基于分布式存儲重復數據刪除的虛擬機系統盤的方法;解決高峰期大量的虛擬機同時讀寫及分布式存儲多副本的情況下網絡1流量大、分布式存儲成本高等問題。
[0008]本發明解決上述技術問題的技術方案是:
[0009]所述的方法包括如下步驟:
[0010]步驟1:分布式存儲上創建存儲卷;
[0011 ]步驟2:通過存儲卷創建虛擬機系統盤;
[0012]步驟3:虛擬機寫數據到系統盤;
[0013]步驟4:分布式存儲卷服務將數據保存到緩存中;
[0014]步驟5:對緩存數據進行滑動分塊;
[0015]步驟6:通過Rabin指紋算法掃描每塊的指紋;
[0016]步驟7:查詢指紋集合是否已經存在分布式存儲系統指紋表;
[0017]步驟8:挑選指紋不存在分布式存儲系統的文件塊存入分布式存儲系統中;
[0018]步驟9:分布式存儲系統更新指紋表。
[0019]所述的分布式存儲上創建存儲卷,在分布式存儲創建一個存儲卷;
[0020]所述的通過存儲卷創建虛擬機系統盤,分布式存儲卷先映射到本地文件塊,此文件塊作為虛擬機的系統盤來使用;
[0021]所述的虛擬機寫數據到系統盤,虛擬機在系統盤讀寫通過分布式存儲卷服務進行讀寫;
[0022]所述的分布式存儲卷服務將數據保存到緩存中,分布式存儲卷服務將虛擬機讀寫的數據先放在本地緩存上,并不是馬上存入到分布式存儲上。
[0023]所述的對緩存數據進行滑動分塊,是對緩沖區的數據進行滑動分塊,通常每塊默認最小大小是4K;用戶可以通過分布式存儲系統對分塊的默認大小進行設置。
[0024]所述的通過Rabin指紋算法掃描每塊的指紋,通過Rabin指紋算法計算整塊,得出一個唯一的指紋,并將每塊的指紋組成一個指紋集合;
[0025]所述的查詢指紋集合是否已經存在分布式存儲系統指紋表,查詢指紋集合各個指紋是否存在通過分布式存儲系統的指紋表中,并返回結果,分布式存儲卷服務標記每個指紋是否已在分布式存儲上存在;
[0026]所述的挑選指紋不存在分布式存儲系統的文件塊存入分布式存儲系統中,凡是被標記為不存在的指紋,該指紋對應的塊文件全部都上傳到分布式存儲系統中;如被標記為存在的指紋,分布式存儲系統上的存儲卷做一個簡單的文件塊引用即可;
[0027]所述的分布式存儲系統更新指紋表,分布式存儲系統根據上傳文件塊的指紋集合,更新指紋表。
[0028]本發明由虛擬機提供分布式存儲卷服務,虛擬機可以連續讀寫,區別于一般基于文件的重復數據刪除方法。本發明提供虛擬機系統盤,區別于一般只能提供虛擬機鏡像的重復數據刪除方法。本發明提供數據重復刪除放在虛擬機所在的宿主機上,區別于一般只能在服務端上執行重復刪除的方法。本發明使用Rabin指紋算法,性能更加高效,區域于一般的指紋掃描方法。本發明解決了高峰期大量的虛擬機同時讀寫及分布式存儲多副本的情況下網絡1流量大、分布式存儲成本高等問題。
【附圖說明】
[0029]下面結合附圖對本發明進一步說明:
[0030]圖1為流程圖;
[0031 ]圖2為本發明邏輯結構圖。
【具體實施方式】
[0032]本發明的實施方式有多種,這里以云平臺為例說明其中一種實現方法,如圖1、2所示,具體實施過程如下:
[0033]1、分布式存儲上創建存儲卷;
[0034]/**
[0035]*分布式存儲上創建存儲卷
[0036]* Oparam name卷名稱
[0037]*Oparam size卷大小
[0038]~k ire turn boolean 返回結果
[0039]* /
[0040]public boolean createVolume(String name,int size){
[0041]return Distribute.createVolume(name,size);
[0042]}
[0043]2、通過存儲卷創建虛擬機系統盤;
[0044]/**
[0045]女通過存儲卷創建虛擬機系統盤
[0046]*Oparam instanceld虛擬機ID
[0047]* Oparam name卷名稱
[0048]/V @re turn 無返回值
[0049]* /
[0050]public void createVm(String instanceld?String name){
[0051]return VmService.createVm(instanceId,name);
[0052]}
[0053]3、虛擬機寫數據到系統盤;實則就是把數據寫入分布式存儲卷服務中
[0054]4、分布式存儲卷服務將數據保存到緩存中;
[0055]/**
[0056]*分布式存儲卷服務將數據保存到緩存中
[0057]* Oparam data帶寫入的數據
[0058]* ?return int成功寫入的字節數
[0059]女 /
[0060]public int writeBuffer(byte[]data){
[0061]return DataEngine.writeBuffer(data);
[0062]}
[0063]5、對緩存數據進行滑動分塊;
[0064]/* *
[0065]女對緩存數據進行滑動分塊
[0066]* Oparam per1d時間間隔[0067 ]* Ore turn無返回值
[0068]* /
[0069]public void chunk(){
[0070]return DataEngine.chunk();
[0071]}
[0072]6、通過Rabin指紋算法掃描每塊的指紋;
[0073]/**
[0074]'k通過Rabin指紋算法掃描每塊的指紋
[0075]-k ?return List〈String>指紋集合對象
[0076]女 /
[0077]public List<String>getHashCodeSet(){
[0078]return DataEngine.getHashCodeSet();
[0079]}
[0080]7、查詢指紋集合是否已經存在分布式存儲系統指紋表;
[0081]/* *
[0082]女查詢指紋集合是否已經存在分布式存儲系統指紋表
[0083]'k Oparam hashCodes指紋集合對象
[0084]-k ire turn boolean 返回結果
[0085]* /
[0086]public List〈String>muticastHashCodeIsExists(List〈String>hashCodes){
[0087]return Distribute.muticastHashCodeIsExists(hashCodes);
[0088]}
[0089]8、挑選指紋不存在分布式存儲系統的文件塊存入分布式存儲系統中;
[0090]/**
[0091 ]*挑選指紋不存在分布式存儲系統的文件塊存入分布式存儲系統中
[0092]~k iparam hashCodes指紋集合對象
[0093]* Oreturn boo lean返回結果
[0094]* /
[0095]public boolean upload(List<String>hashCodes){
[0096]return DataEngine.upload(hashCodes);
[0097]}
[0098]9、分布式存儲系統更新指紋表。
[0099]/**
[0100]*分布式存儲系統更新指紋表
[0101]~k iparam hashCodes指紋集合對象
[0102]-k ire turn boolean 返回結果
[0103]*/
[0104]public boolean updateHashCode(List<String>hashCodes) {
[0105]return Distribute.setThreshoId(hashCodes);
[0106]}
[0107]整個流程結束。
【主權項】
1.一種基于分布式存儲重復數據刪除的虛擬機系統盤的方法,其特征在于:所述的方法包括如下步驟: 步驟I:分布式存儲上創建存儲卷; 步驟2:通過存儲卷創建虛擬機系統盤; 步驟3:虛擬機寫數據到系統盤; 步驟4:分布式存儲卷服務將數據保存到緩存中; 步驟5:對緩存數據進行滑動分塊; 步驟6:通過Rabin指紋算法掃描每塊的指紋; 步驟7:查詢指紋集合是否已經存在分布式存儲系統指紋表; 步驟8:挑選指紋不存在分布式存儲系統的文件塊存入分布式存儲系統中; 步驟9:分布式存儲系統更新指紋表。2.根據權利要求1所述的方法,其特征在于:所述的分布式存儲上創建存儲卷,在分布式存儲創建一個存儲卷; 所述的通過存儲卷創建虛擬機系統盤,分布式存儲卷先映射到本地文件塊,此文件塊作為虛擬機的系統盤來使用; 所述的虛擬機寫數據到系統盤,虛擬機在系統盤讀寫通過分布式存儲卷服務進行讀與; 所述的分布式存儲卷服務將數據保存到緩存中,分布式存儲卷服務將虛擬機讀寫的數據先放在本地緩存上,并不是馬上存入到分布式存儲上。3.根據權利要求1所述的方法,其特征在于:所述的對緩存數據進行滑動分塊,是對緩沖區的數據進行滑動分塊,通常每塊默認最小大小是4K;用戶可以通過分布式存儲系統對分塊的默認大小進行設置。4.根據權利要求2所述的方法,其特征在于:所述的對緩存數據進行滑動分塊,是對緩沖區的數據進行滑動分塊,通常每塊默認最小大小是4K;用戶可以通過分布式存儲系統對分塊的默認大小進行設置。5.根據權利要求1至4任一項所述的方法,其特征在于:所述的通過Rabin指紋算法掃描每塊的指紋,通過Rabin指紋算法計算整塊,得出一個唯一的指紋,并將每塊的指紋組成一個指紋集合; 所述的查詢指紋集合是否已經存在分布式存儲系統指紋表,查詢指紋集合各個指紋是否存在通過分布式存儲系統的指紋表中,并返回結果,分布式存儲卷服務標記每個指紋是否已在分布式存儲上存在; 所述的挑選指紋不存在分布式存儲系統的文件塊存入分布式存儲系統中,凡是被標記為不存在的指紋,該指紋對應的塊文件全部都上傳到分布式存儲系統中;如被標記為存在的指紋,分布式存儲系統上的存儲卷做一個簡單的文件塊引用即可; 所述的分布式存儲系統更新指紋表,分布式存儲系統根據上傳文件塊的指紋集合,更新指紋表。
【專利摘要】本發明涉及云平臺存儲虛擬化技術領域,特別是一種基于分布式存儲重復數據刪除的虛擬機系統盤的方法。本發明首先在分布式存儲上創建存儲卷;通過存儲卷創建虛擬機系統盤;虛擬機寫數據到系統盤;分布式存儲卷服務將數據保存到緩存中;對緩存數據進行滑動分塊;通過Rabin指紋算法掃描每塊的指紋;查詢指紋集合是否已經存在分布式存儲系統指紋表;挑選指紋不存在分布式存儲系統的文件塊存入分布式存儲系統中;最后分布式存儲系統更新指紋表。本發明解決了減輕基于云平臺分布式存儲的虛擬機網絡流量壓力;可應用于云平臺存儲虛擬化。
【IPC分類】G06F3/06
【公開號】CN105677238
【申請號】CN201511018317
【發明人】馬桂成, 楊松, 季統凱
【申請人】國云科技股份有限公司
【公開日】2016年6月15日
【申請日】2015年12月28日