本發(fā)明涉及數(shù)據(jù)存儲領(lǐng)域,尤其涉及一種數(shù)據(jù)存儲方法及系統(tǒng)。
背景技術(shù):
分布式存儲系統(tǒng),是將數(shù)據(jù)按照一定規(guī)則切分并打散存儲在多臺獨立通用存儲存儲模塊上。傳統(tǒng)的網(wǎng)絡(luò)存儲系統(tǒng)采用集中的存儲存儲模塊存放所有數(shù)據(jù),存儲存儲模塊成為系統(tǒng)性能的瓶頸,也是可靠性和安全性的焦點,不能滿足大規(guī)模存儲應(yīng)用的需要,而分布式存儲系統(tǒng)采用可擴展的系統(tǒng)結(jié)構(gòu),利用多臺存儲存儲模塊分擔存儲負荷,利用位置存儲模塊定位存儲信息,它不但提高了系統(tǒng)的可靠性、可用性和存取效率,還易于擴展。存儲集群的成千上萬臺存儲模塊可以將數(shù)據(jù)充分冗余,從而可以顯著提高數(shù)據(jù)的安全性。
在存儲領(lǐng)域,通常使用年故障率(AFR)來表征磁盤的可靠性,現(xiàn)在市場上通用的磁盤的AFR一般是4%左右,即如果一個集群中有365塊磁盤,那么一年中有磁盤損害的概率為pow(0.96,365)=0.9999996619351175,即一年中幾乎肯定有磁盤失效。而對于分布式存儲集群,實際上磁盤個數(shù)通常都達到了上千塊,因此應(yīng)對磁盤損壞成為了每一個存儲系統(tǒng)都要解決的問題。
在分布式存儲系統(tǒng)中,除了處理用戶正常的讀寫請求之外,通常還會有在磁盤之間進行的數(shù)據(jù)遷移,考慮以下兩種情況:
第一、為了解決磁盤失效問題,通常在一塊磁盤損壞之后,在相同位置插入一塊新的磁盤,之后分布式存儲系統(tǒng)會將其他磁盤的相關(guān)數(shù)據(jù)寫入到這塊被替換的磁盤中。
第二,分布式存儲集群通常面臨著擴容的問題,當已有的數(shù)據(jù)量不足以支撐業(yè)務(wù)時,會通過增加服務(wù)器和磁盤的方式來提供更多的容量,為了讓每一個磁盤都擁有相近的磁盤使用量,從而最大限度發(fā)揮所有磁盤的讀寫性能,通常會有一部分位于老集群的數(shù)據(jù)會遷移到新的磁盤中。
發(fā)明人在實現(xiàn)本發(fā)明的過程中發(fā)現(xiàn),對于上述兩種數(shù)據(jù)遷移問題,不論是對于數(shù)據(jù)遷出的一方,還是數(shù)據(jù)遷入的一方,都需要耗費一定量的CPU、內(nèi)存和網(wǎng)絡(luò)帶寬資源,特別是集群擴容時,數(shù)據(jù)遷移量會比較大,從而會影響到已有用戶的正常讀寫請求,在業(yè)務(wù)高峰期,過多的數(shù)據(jù)遷移會嚴重消耗資源,甚至?xí)霈F(xiàn)正常服務(wù)完全無法進行的情況,造成了服務(wù)的不可用。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供一種用于分布式存儲的數(shù)據(jù)存儲方法及系統(tǒng),通過配置傳輸閾值,即每個存儲裝置進行數(shù)據(jù)遷移的最大個數(shù),達到限制數(shù)據(jù)遷移帶寬的目的,從而實現(xiàn)數(shù)據(jù)遷移和用戶請求之間的平衡。當進行集群擴容或者替換失效的存儲裝置時,利用集群中的存活存儲裝置向每個新增加的存儲裝置或替換后的可用存儲裝置遷入數(shù)據(jù)。對于新存儲裝置或替換后的可用存儲裝置而言,都會有一個遷入執(zhí)行隊列和遷入等待隊列。遷入執(zhí)行隊列表示正在向新存儲裝置或可用存儲裝置遷入的數(shù)據(jù)組,該隊列的最大長度即為傳輸閾值,遷入等待隊列表示等待向新存儲裝置或可用存儲裝置遷入的數(shù)據(jù)組。對于集群中的存活存儲裝置而言,會有一個遷出執(zhí)行隊列和遷出等待隊列。遷出執(zhí)行隊列表示存活存儲裝置正在遷出的數(shù)據(jù)組,該隊列的最大長度即為傳輸閾值,遷出等待隊列表示存活存儲裝置等待遷出的數(shù)據(jù)組。
本發(fā)明實施例提供一種數(shù)據(jù)存儲方法,包括:
監(jiān)控存儲集群中各存儲裝置的工作狀態(tài);
當存在失效存儲裝置時,確定所述失效存儲裝置所在的存儲陣列、所述存儲陣列中剩余的存活存儲裝置及與所述存儲陣列相關(guān)的全部數(shù)據(jù)組;
從集群中選擇可用存儲裝置替換所述失效存儲裝置;
遍歷所述全部數(shù)據(jù)組,生成用于可用存儲裝置的遷入執(zhí)行隊列、遷入等待隊列以及用于存活存儲裝置的遷出執(zhí)行隊列、遷出等待隊列,其中,遷入執(zhí)行隊列和遷出執(zhí)行隊列中數(shù)據(jù)組的數(shù)量均小于或等于傳輸閾值。
本發(fā)明實施例提供一種數(shù)據(jù)存儲系統(tǒng),包括:
監(jiān)控模塊,監(jiān)控存儲集群中各存儲裝置的工作狀態(tài);
遷移數(shù)據(jù)確定模塊,當存在失效存儲裝置時,確定所述失效存儲裝置所在的至少一個存儲陣列、所述至少一個存儲陣列中剩余的存活存儲裝置及與所述至少一個存儲陣列相關(guān)的全部數(shù)據(jù)組;
存儲修復(fù)模塊,從集群中選擇可用存儲裝置替換所述失效存儲裝置;
遷移隊列生成模塊,遍歷所述全部數(shù)據(jù)組,生成用于可用存儲裝置的遷入執(zhí)行隊列、遷入等待隊列以及用于存活存儲裝置的遷出執(zhí)行隊列、遷出等待隊列,其中,遷入執(zhí)行隊列和遷出執(zhí)行隊列中數(shù)據(jù)組的數(shù)量均小于或等于傳輸閾值。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例用于分布式存儲的數(shù)據(jù)存儲方法的流程圖;
圖2為本發(fā)明數(shù)據(jù)存儲方法的一個實施例的流程圖;
圖3為本發(fā)明數(shù)據(jù)存儲方法的另一個實施例的流程圖;
圖4為本發(fā)明數(shù)據(jù)存儲方法的再一個實施例的流程圖;
圖5為本發(fā)明實施例用于分布式存儲的數(shù)據(jù)存儲系統(tǒng)的結(jié)構(gòu)示意圖;
圖6為本發(fā)明數(shù)據(jù)存儲系統(tǒng)的一個實施例的結(jié)構(gòu)示意圖。
具體實施方式
為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
根據(jù)本發(fā)明實施例提供的一種用于分布式存儲的數(shù)據(jù)存儲方法,如圖1所示,包括:
監(jiān)控分布式存儲集群中各存儲裝置的工作狀態(tài);
當存在失效存儲裝置時,確定所述失效存儲裝置所在的存儲陣列、所述存儲陣列中剩余的存活存儲裝置及與所述存儲陣列相關(guān)的全部數(shù)據(jù)組;
從集群中選擇可用存儲裝置替換所述失效存儲裝置;
遍歷所述全部數(shù)據(jù)組,生成用于可用存儲裝置的遷入執(zhí)行隊列、遷入等待隊列以及用于存活存儲裝置的遷出執(zhí)行隊列、遷出等待隊列,其中,遷入執(zhí)行隊列和遷出執(zhí)行隊列中數(shù)據(jù)組的數(shù)量均小于或等于傳輸閾值。
在一些可選的實施例中,如圖2所示,在生成用于可用存儲裝置的遷入執(zhí)行隊列、遷入等待隊列以及用于存活存儲裝置的遷出執(zhí)行隊列、遷出等待隊列之后,還包括查詢遷出執(zhí)行隊列中的數(shù)據(jù)組是否在所述遷入執(zhí)行隊列中,若在,則利用所述存活存儲裝置向所述可用存儲裝置遷移該數(shù)據(jù)組,若不在,可以每隔固定時間例如10分鐘進行一次查詢。
分布式存儲是將每個數(shù)據(jù)組均存儲到集群中的N個存儲裝置上,N為常數(shù),在優(yōu)選的實施例中,N=3。
在可選的實施例中,將每個數(shù)據(jù)組均存儲到集群中的3個存儲裝置上,并建立數(shù)據(jù)組對應(yīng)存儲陣列的映射列表和集群中的可用存儲裝置列表,其中,可用存儲裝置可以是已經(jīng)使用但還有存儲空間的存儲裝置,也可以是沒有被使用的存儲裝置。
在一些可選的實施例中,存儲裝置可以是各式存儲器,如RAM、ROM等,也可以是磁盤或軟盤等其他能夠存儲數(shù)據(jù)的存儲介質(zhì)。在本公開實施例中存儲裝置為磁盤。
在一些可選的實施例中,在每個存儲裝置上承載至少一組數(shù)據(jù)組,以便提高存儲裝置的利用率,降低存儲成本。
在一些可選的實施例中,將每組數(shù)據(jù)組均存儲到集群中的3個磁盤上,以形成數(shù)據(jù)組對應(yīng)存儲陣列的映射列表和集群中的可用磁盤列表,所述映射列表中的部分列表如下表1所示,所述可用磁盤列表中的部分列表如下表2所示,
表1:
表2:
在本實施例中,“dg+常數(shù)”用于標記不同的數(shù)據(jù)組,“d+常數(shù)”用于標記不同的磁盤,本公開在此方面沒有限制。
在一些可選的實施例中,存儲陣列中存儲裝置的位置是有順序的,一方面,在存儲陣列中位置靠前的存儲裝置負責接收寫入的數(shù)據(jù)組,并轉(zhuǎn)發(fā)給其所在存儲陣列中其余的存儲裝置,另一方面,當存在失效存儲裝置時,利用位置靠前的存儲裝置向新的存儲裝置進行數(shù)據(jù)組遷移。
監(jiān)控映射列表中磁盤的工作狀態(tài),在一些可選的實施例中,可以通過不斷地對磁盤進行讀寫操作來監(jiān)控其工作狀態(tài),也可以通過每隔20s對磁盤進行一次讀寫操作,還可以利用現(xiàn)有技術(shù)中的監(jiān)控工具如smartmontools來監(jiān)控磁盤的工作狀態(tài)。
請參考圖3,當剩余的存活存儲裝置的數(shù)量為兩個以上時,根據(jù)剩余的各存活存儲裝置在存儲陣列中的位置,生成存儲裝置恢復(fù)順序,具體而言,存儲裝置恢復(fù)順序可以為存儲陣列中存儲裝置的位置順序,利用位置靠前的存儲裝置向新的存儲裝置進行數(shù)據(jù)遷移。如磁盤d4失效時,確定其所在的存儲陣列包括(d4,d666,d77)和(d4,d8,d666),磁盤d4的待遷移數(shù)據(jù)組包括數(shù)據(jù)組dg1至數(shù)據(jù)組dg8,利用磁盤d666向新磁盤d110遷移數(shù)據(jù)組dg1至數(shù)據(jù)組dg4,利用磁盤d8向新磁盤d110遷移數(shù)據(jù)組dg5至數(shù)據(jù)組dg8。
請參考圖4,當失效存儲裝置的數(shù)量為兩個以上時,根據(jù)與所述失效存儲裝置對應(yīng)的至少兩個新存儲裝置在存儲陣列中的位置,生成存儲裝置恢復(fù)順序,具體而言,所述存儲裝置恢復(fù)順序可以為新存儲裝置在存儲陣列的位置順序,位置靠前的新存儲裝置先于位置靠后的新存儲裝置。如存儲陣列(d4,d666,d77)中磁盤d4和磁盤d666均失效后,從集群中選擇可用磁盤d110替換失效磁盤d4,可用磁盤d20替換失效磁盤d666,則優(yōu)先利用存活磁盤d77向可用磁盤d110遷移數(shù)據(jù)組dg1至數(shù)據(jù)組dg4,再利用存活磁盤d77向可用磁盤d20遷移數(shù)據(jù)組dg1至數(shù)據(jù)組dg4。
本發(fā)明對存儲裝置恢復(fù)順序不做限制,本領(lǐng)域技術(shù)人員可以根據(jù)不同需求具體設(shè)定。
在一些可選的實施例中,可以在確定磁盤d4失效之后立即從可用磁盤列表中選擇新的磁盤替換磁盤d4,也可以在確定磁盤d4失效后一定時間內(nèi)失效磁盤d4沒有修復(fù)例如15分鐘內(nèi)失效磁盤d4沒有修復(fù),則從集群中選擇可用磁盤替換失效磁盤d4。
下面以失效磁盤d4為例說明本公開用于分布式存儲的數(shù)據(jù)存儲方法。
當磁盤d4失效,從集群中選擇可用磁盤d110替換失效磁盤d4,生成向可用磁盤d110遷入的數(shù)據(jù)組的遷入執(zhí)行隊列QT-110={dg1,dg2,dg3}、第遷入等待隊列QW-110={dg4,dg5,dg6,dg7,dg8,dg9,dg10,dg11,dg12};與存活磁盤d666對應(yīng)的第一遷出執(zhí)行隊列Qt2-666={dg1,dg2,dg3}、第一遷出等待隊列Qw2-666={dg4};與存活磁盤d8對應(yīng)的第二遷出執(zhí)行隊列Qt2-8={dg5,dg6,dg7}、第二遷出等待隊列Qw2-666={dg8,dg9,dg10,dg11,dg12}。
因為Qt2-8中的數(shù)據(jù)組dg5至數(shù)據(jù)組dg7不在QT-110中,因此只利用存活磁盤d666向可用磁盤d110遷移數(shù)據(jù)組dg1至數(shù)據(jù)組dg3,不遷移數(shù)據(jù)組dg5至數(shù)據(jù)組dg7。
當數(shù)據(jù)組dg1至數(shù)據(jù)組dg3都遷移完成后,遷入執(zhí)行隊列QT-110變?yōu)镼T-110’={dg4,dg5,dg6},此時由存活磁盤d666向可用磁盤d110遷移數(shù)據(jù)組dg4,同時由存活磁盤d8向可用磁盤d110遷移數(shù)據(jù)組dg5和數(shù)據(jù)組dg6。
重復(fù)上述步驟,直至全部數(shù)據(jù)組遷移完成。
對于集群擴容的情況,同樣適用上述數(shù)據(jù)存儲方法。
根據(jù)本發(fā)明實施例提供的一種用于分布式存儲的數(shù)據(jù)存儲系統(tǒng)1000,如圖5所示,包括:
監(jiān)控模塊100,監(jiān)控分布式存儲的集群中各存儲裝置的工作狀態(tài);
遷移數(shù)據(jù)確定模塊200,當存在失效存儲裝置時,確定所述失效存儲裝置所在的至少一個存儲陣列、所述至少一個存儲陣列中剩余的存活存儲裝置及與所述至少一個存儲陣列相關(guān)的全部數(shù)據(jù)組;
存儲修復(fù)模塊300,從集群中選擇可用存儲裝置替換所述失效存儲裝置;
遷移隊列生成模塊400,遍歷所述全部數(shù)據(jù)組,生成用于可用存儲裝置的遷入執(zhí)行隊列、遷入等待隊列以及用于存活存儲裝置的遷出執(zhí)行隊列、遷出等待隊列,其中,遷入執(zhí)行隊列和遷出執(zhí)行隊列中數(shù)據(jù)組的數(shù)量均小于或等于傳輸閾值。
在一些可選的實施例,所述數(shù)據(jù)存儲系統(tǒng)還包括數(shù)據(jù)遷移模塊,用于查詢遷出執(zhí)行隊列中的數(shù)據(jù)組是否在所述遷入執(zhí)行隊列中,若在,則利用所述存活存儲裝置向所述可用存儲裝置遷移該數(shù)據(jù)組。
圖6為本申請實施例提供的又一種數(shù)據(jù)存儲系統(tǒng)1200的結(jié)構(gòu)示意圖,本申請具體實施例并不對用戶設(shè)備1200的具體實現(xiàn)做限定。如圖6所示,該用戶設(shè)備1200可以包括:
處理器(processor)1210、通信接口(Communications Interface)1220、存儲器(memory)1230、以及通信總線1240。其中:
處理器1210、通信接口1220、以及存儲器1230通過通信總線1240完成相互間的通信。
通信接口1220,用于與比如客戶端等的網(wǎng)元通信。
處理器1210,用于執(zhí)行程序1232,具體可以執(zhí)行上述方法實施例中的相關(guān)步驟。
具體地,程序1232可以包括程序代碼,所述程序代碼包括計算機操作指令。
處理器1210可能是一個中央處理器CPU,或者是特定集成電路ASIC(Application Specific Integrated Circuit),或者是被配置成實施本申請實施例的一個或多個集成電路。
該數(shù)據(jù)存儲系統(tǒng)用于執(zhí)行上述用于分布式存儲的數(shù)據(jù)存儲方法,并能達到與該數(shù)據(jù)存儲方法同樣的效果。
以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本實施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性的勞動的情況下,即可以理解并實施。
通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到各實施方式可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當然也可以通過硬件?;谶@樣的理解,上述技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品可以存儲在計算機可讀存儲介質(zhì)中,如ROM/RAM、磁碟、光盤等,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,存儲模塊,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行各個實施例或者實施例的某些部分所述的方法。
最后應(yīng)說明的是:以上實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述實施例對本發(fā)明進行了詳細的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當理解:其依然可以對前述各實施例所記載的技術(shù)方案進行修改,或者對其中部分技術(shù)特征進行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的精神和范圍。