摘要:通過本地監(jiān)控模塊監(jiān)控數(shù)據(jù)變化,并將其傳輸?shù)胶A扛咚倬彺嬷袝捍妗Mㄟ^網(wǎng)絡(luò)傳輸及優(yōu)化模塊將緩存的數(shù)據(jù)高效地傳輸?shù)竭h(yuǎn)程,由遠(yuǎn)程重放模塊完成寫操作重放。本地一致性檢測模塊和遠(yuǎn)程一致性檢測模塊協(xié)同工作完成數(shù)據(jù)一致性的保證,該方法對主機及網(wǎng)絡(luò)的要求相對較低。在Linux上實現(xiàn)了該方法的演示系統(tǒng),通過測試工具驗證了該設(shè)計具有良好的工作性能。
關(guān)鍵詞:備份; 災(zāi)難恢復(fù); Linux內(nèi)核; 優(yōu)化
中圖分類號:TP309.2
文獻(xiàn)標(biāo)志碼:A
文章編號:1001-3695(2007)09-0140-03
由于紛繁復(fù)雜的原因,計算機信息系統(tǒng)的脆弱性不斷增加[1],災(zāi)難備份系統(tǒng)隨之得到愈來愈多的關(guān)注[2]。傳統(tǒng)的備份技術(shù),如快照技術(shù)、磁帶備份、RAID等,很難應(yīng)付大規(guī)模的災(zāi)難。即便是人們投入了極高熱情的網(wǎng)絡(luò)存儲技術(shù),一般都需要光纖專線等十分昂貴的傳輸基礎(chǔ)設(shè)施[2],這使得NAS[1]等遠(yuǎn)距離網(wǎng)絡(luò)存儲技術(shù)的大范圍推廣受到極大的限制。所以,廉價、高效的災(zāi)備技術(shù)成為了有重要意義的熱點技術(shù)[2~7]。
本文提出一種廉價、高效的災(zāi)難備份方法。該方法具有以下的顯著優(yōu)點:能夠高效地利用從本地到遠(yuǎn)程的帶寬,即使在極低的帶寬下依然有良好的性能表現(xiàn);對部署環(huán)境要求低,成本低廉;對應(yīng)用程序完全透明;給監(jiān)控主機帶來的讀寫負(fù)載小。并且通過使用NetworkAppliance公司的開源測試工具PostMark[8],測試在Linux 2.4上實現(xiàn)的演示系統(tǒng)。測試數(shù)據(jù)表明該方法對需要備份的目標(biāo)主機幾乎沒有讀寫性能上的影響,而且在低帶寬下依然有良好的性能表現(xiàn),通過簡單的配置就可以在Internet上實現(xiàn)遠(yuǎn)程異地備份。
1設(shè)計
1.1總體架構(gòu)
整個方案從部署上可以分為本地和遠(yuǎn)程兩大子系統(tǒng),如圖1所示。
本地子系統(tǒng)又分為本地服務(wù)器和本地網(wǎng)關(guān)。本地服務(wù)器將監(jiān)控到的數(shù)據(jù)變化通過高速本地網(wǎng)絡(luò)傳輸?shù)奖镜鼐W(wǎng)關(guān);本地網(wǎng)關(guān)將接收到的數(shù)據(jù)暫存到海量高速緩存中,然后將海量高速緩存中的數(shù)據(jù)取出,通過Internet傳輸?shù)竭h(yuǎn)程重放備份主機上進(jìn)行重放備份。
1.2模塊設(shè)計
從功能上,該方法可以分為以下六個模塊(圖2):
a)本地監(jiān)控模塊。運行在需要備份的主機上,負(fù)責(zé)獲取變化的數(shù)據(jù),并通過網(wǎng)絡(luò)傳輸模塊將其傳輸?shù)奖镜鼐W(wǎng)關(guān)。
b)網(wǎng)絡(luò)傳輸模塊。負(fù)責(zé)數(shù)據(jù)在網(wǎng)絡(luò)上端到端地傳輸。
c)海量高速緩存模塊。工作于本地網(wǎng)關(guān)上,負(fù)責(zé)將變化的數(shù)據(jù)暫時緩存本地網(wǎng)關(guān)上。
d)優(yōu)化模塊。工作于本地網(wǎng)關(guān)上,它將從海量高速緩存中取出的數(shù)據(jù)進(jìn)行整合優(yōu)化,再傳遞到遠(yuǎn)程備份主機。
e)一致性檢測模塊。工作于本地網(wǎng)關(guān)及遠(yuǎn)程備份主機上,主要負(fù)責(zé)備份數(shù)據(jù)一致性檢測。從實現(xiàn)上來講,本地網(wǎng)關(guān)的一致性檢查工作主要負(fù)責(zé)提取必要的相關(guān)數(shù)據(jù),如數(shù)據(jù)的原始摘要值等,這些功能分散于海量緩存和優(yōu)化模塊中。而在遠(yuǎn)程備份主機上有獨立的一致性檢查模塊,它利用各種信息進(jìn)行一致性檢測工作。
f)遠(yuǎn)程重放模塊。工作在遠(yuǎn)程備份主機,主要負(fù)責(zé)將變化的數(shù)據(jù)在遠(yuǎn)程主機上進(jìn)行重放備份操作。
2實現(xiàn)
2.1本地監(jiān)控模塊
本地監(jiān)控模塊實現(xiàn)在文件系統(tǒng)以下。在Linux上所有對塊設(shè)備的I/O請求都必須經(jīng)過塊設(shè)備驅(qū)動,因此選擇塊設(shè)備驅(qū)動上實現(xiàn)本地監(jiān)控模塊。這樣的實現(xiàn)層次不僅可以監(jiān)控Linux的所有文件操作,還可以監(jiān)控對塊設(shè)備的直接I/O操作。這種特性使得本地監(jiān)控模塊具有良好的對應(yīng)用程序的透明性。由于需要工作在塊設(shè)備驅(qū)動之上,將本地監(jiān)控模塊實現(xiàn)為內(nèi)核模塊,可以動態(tài)地加載和卸載。
本地監(jiān)控模塊分析所有對塊設(shè)備的請求:所有的讀請求直接向塊設(shè)備提交;對所有的寫請求進(jìn)行必要的封裝通過高速網(wǎng)絡(luò)發(fā)送給本地網(wǎng)關(guān)的海量高速緩沖模塊進(jìn)行緩沖,并且向本地的對應(yīng)塊設(shè)備提交。
2.2網(wǎng)絡(luò)傳輸模塊
網(wǎng)絡(luò)傳輸模塊主要負(fù)責(zé)整個方法中端到端的數(shù)據(jù)傳輸工作。考慮到效率和本地監(jiān)控模塊工作的層次以及截獲數(shù)據(jù)的格式,網(wǎng)絡(luò)傳輸模塊和其他模塊都工作在Linux內(nèi)核中。
網(wǎng)絡(luò)傳輸模塊主要功能內(nèi)核創(chuàng)建通信連接,并且等待上層(如本地監(jiān)控模塊、優(yōu)化模塊等)提交的傳輸請求,完成傳輸請求或傳輸出錯后通知請求發(fā)起者。
2.3海量高速緩存模塊
海量高速緩存模塊通過網(wǎng)絡(luò)傳輸模塊接收來自本地監(jiān)控模塊的數(shù)據(jù),解析這些數(shù)據(jù)并申請適當(dāng)大小的空閑磁盤空間。依據(jù)公式mddata=H(data)生產(chǎn)本次數(shù)據(jù)的摘要值;依據(jù)公式mddisk=H(mddata+mddisk)更新對應(yīng)的監(jiān)控磁盤的摘要值。其中摘要生產(chǎn)算法H可以通過配置文件選擇MD5、SHA-1等;然后把本地網(wǎng)關(guān)需要的數(shù)據(jù)封裝成新的數(shù)據(jù)結(jié)構(gòu),格式為sendnode={data,mddata,mddisk,address,len,othermesg}
其中:data為這次請求要備份的數(shù)據(jù);mddata為備份數(shù)據(jù)的摘要;mddisk為成功提交數(shù)據(jù)后對應(yīng)監(jiān)控磁盤的摘要值;len為數(shù)據(jù)的長度;address為數(shù)據(jù)應(yīng)該寫到備份磁盤的起始位置; othermesg為一些其他信息;然后將封裝后的數(shù)據(jù)保存到本地網(wǎng)關(guān)上的海量磁盤中,在稍后系統(tǒng)負(fù)載較輕時,從海量緩存磁盤中依次讀取這些數(shù)據(jù),并將其依次插入發(fā)送隊列(sendlist,以sendnode為節(jié)點組成的鏈表)中,等待優(yōu)化模塊處理。只有當(dāng)優(yōu)化模塊返回正確的確認(rèn),才從海量緩存中把這些數(shù)據(jù)標(biāo)志為無效,回收這些磁盤空間。
2.4優(yōu)化模塊
優(yōu)化模塊主要的工作就是要使得傳輸工作可以高效地完成。在優(yōu)化模塊中有兩個主要的數(shù)據(jù)結(jié)構(gòu)、一個主要的配置參數(shù)和兩個主要的算法。這兩個數(shù)據(jù)結(jié)構(gòu)是待發(fā)送集合Stosend和發(fā)送集合Ssend。Stosend 和Ssend 有同樣的結(jié)構(gòu)S={{nod1,nod2,…,nodn},{mdbegin,mdend,count}}。其中:nodi為sendnode,從nod1到nodn是按順序提交的寫請求序列,以鏈表來實現(xiàn);mdbegin為nod1提交前監(jiān)控磁盤的md值,mdend為nodn提交后監(jiān)控磁盤的md值;count 為nod的計數(shù)器,即count=n;重要的配置參數(shù)是max表示Stosend最多包含的nod數(shù)。max可以通過配置文件進(jìn)行配置。兩個算法是從發(fā)送隊列中生成Stosend的Fget和從Stosend生成Ssend的Fopt。簡而言之:
Stosend=Fget(sendlist);Ssend=Fopt(Stosend)
Fget,F(xiàn)opt算法具體如下:
Fget(sendlist)
begin
初始化計數(shù)器、Stosend集合;
while(sendlist不為空或計數(shù)器小于max)
begin
將sendlist的頭節(jié)點插入Stosend尾部;
計算器加1;
end
if(如果Stosend不是空集合)
將Stosend尾節(jié)點的mddisk賦值給Stosend的mdend;
returnStosend;
end
fopt(Stosend)
begin
初始化 Ssend;
從Stosend的頭節(jié)點開始對Stosend中的每一個節(jié)點;
begin
if(該節(jié)點可以與Stosend已有節(jié)點合并)使用該節(jié)點替換中Stosend的對應(yīng)節(jié)點;
else
將該節(jié)點加入Stosend的尾部;
end
return Ssend;
end
優(yōu)化模塊將Ssend提交給網(wǎng)絡(luò)傳輸模塊,傳輸?shù)竭h(yuǎn)端備份主機。當(dāng)整個Ssend在遠(yuǎn)端完成備份后,遠(yuǎn)端返回確認(rèn)信息;然后優(yōu)化模塊對Stosend集合返回確認(rèn)信息給海量緩沖模塊。整個過程一直循環(huán)直到sendlist為空。
2.5一致性檢測模塊
一致檢查模塊的思想是:在遠(yuǎn)端進(jìn)行備份操作之前校驗備份集合(即是本地網(wǎng)關(guān)發(fā)送的Ssend)的mdbegin與當(dāng)前備份磁盤的md值是否一致。如果不一致,報錯;如果一致,通過nod.mddata校驗每一個nod的數(shù)據(jù)是否被竄改,如果沒有通過校驗要求,則要求對端重傳該nod。
2.6遠(yuǎn)程重放模塊
數(shù)據(jù)重放模塊接收經(jīng)過一致性檢查的備份集合,對集合中每一個操作進(jìn)行合法性檢驗。當(dāng)且僅當(dāng)所有的操作都合法,重放模塊才提交所有的操作。如果任何一個操作不合法,重放模塊立即報錯并通知對端。當(dāng)所有的操作正確返回時,使用備份集合的mddisk更新當(dāng)前備份磁盤的md值。
3實驗及分析
3.1實驗環(huán)境
實驗環(huán)境如表1所述。其中本地網(wǎng)關(guān)與遠(yuǎn)程備份中心使用512 kbps的帶寬相連,而本地網(wǎng)絡(luò)的帶寬為100 Mbps。
3.2方法讀寫性能對比
在本地服務(wù)器上分別在使用災(zāi)備系統(tǒng)和不使用災(zāi)備系統(tǒng)的情況下對其讀寫性能進(jìn)行測試。PostMark的參數(shù)中transaction=5 000, number=1 000,其他參數(shù)使用默認(rèn)配置。實驗結(jié)果如表2所示。
表2中的A代表沒有使用災(zāi)備系統(tǒng)的情況,B代表使用災(zāi)備系統(tǒng)的情況。如表2數(shù)據(jù)所示,該方法對應(yīng)用程序而言在讀寫性能上幾乎沒有影響。
3.3網(wǎng)絡(luò)使用效率分析
本文分別在開啟優(yōu)化模塊和不開啟優(yōu)化模塊的情況下使用PostMark對系統(tǒng)進(jìn)行壓力測試。首先連續(xù)對本地服務(wù)器的備份磁盤進(jìn)行大量的讀寫操作,把這些讀寫操作全部記錄下來作為一個標(biāo)準(zhǔn)的分析樣本;然后將這個樣本分別在各種情況下作為數(shù)據(jù)源進(jìn)行測試并統(tǒng)計實際發(fā)送的網(wǎng)絡(luò)流量。分別對max為256、512、1024的三種不同的優(yōu)化情況進(jìn)行了測試。表3反映了總體對比情況。其中:tosend列是需要發(fā)送的數(shù)據(jù)量;send是實際發(fā)送的數(shù)據(jù)量; S/TS是實際發(fā)送數(shù)據(jù)量與需要發(fā)送數(shù)據(jù)量的比值。
從上述測試數(shù)據(jù)可以看出,優(yōu)化模塊可以對從本地網(wǎng)關(guān)發(fā)送到遠(yuǎn)程備份服務(wù)器的數(shù)據(jù)起到很好的優(yōu)化作用,尤其是當(dāng)需要頻繁地讀寫同一系列文件的應(yīng)用架構(gòu)在當(dāng)本災(zāi)備方法之上的時候。max的設(shè)置也直接影響著優(yōu)化模塊的工作效率。所以max的設(shè)置要根據(jù)本地網(wǎng)關(guān)的硬件配置,尤其是本地網(wǎng)關(guān)的內(nèi)存大小以及需要備份的應(yīng)用讀寫同一系列文件的周期來設(shè)定一個比較合理的值。
4結(jié)束語
本文提出一種廉價、高效、可靠的災(zāi)難備份方法,并且實現(xiàn)了其演示系統(tǒng)。使用PostMark測試了演示系統(tǒng)的效率,測試結(jié)果說明,該方法不僅對應(yīng)用程序透明,而且對文件系統(tǒng)的工作效率幾乎沒有影響。對網(wǎng)絡(luò)效率的測試充分說明,該方法在Internet的低帶寬上可以高效地工作,避免了傳統(tǒng)異地災(zāi)備系統(tǒng)對高速網(wǎng)絡(luò)的依賴,極大地降低了該方法的成本。
參考文獻(xiàn):
[1]McENTIRE DA. Triggering events, vulnerabilities, and disaster reduction:towards a holistic paradigm[J].Disaster Prevention and Management, 2001, 10(3):189-196.
[2]李濤. 網(wǎng)絡(luò)安全概論[M]. 北京:電子工業(yè)出版社,2004.
[3]BALDONI R, MARCHETTI C, PIERGIOVANNIS T. Asynchronous active replication in threetier distributed systems[C]//Proc of the 9th IEEE Pacific Rim International Symposium on Dependable Computing. Tsukuba, Japan:[s.n.], 2002:19-26.
[4]LENNERT J F, WILLIAM R,RODGERS M G, et al. The automated backup solutionsafeguarding the communications network infrastructure[J].Bell Labs Technical, 2004,9(1):59-84.
[5]EHRHARDT A. Extension of storage area networks and integration on different platforms of an optical transport network[C]//Proc of the 6th International Conference on Transparent Optical Networks. 2004:229-232.
[6]KOTLA R, DAHLIN M. High throughput byzantine fault tolerance[C]//Proc ofInternational Conference on Dependable Systems and Networks. Washington, DC: IEEE Computer Society, 2004:575-584.
[7]AGHDAIEN,TAMIR Y. Implementation and evaluation of transparent faulttolerant Web service with kernellevel support[C]//Proc of the IEEE International Conference on Computer Communications and Networks. Miami, Florida:[s.n.], 2002:63-68.
[8]KATCHER J. PostMark:a new file system benchmark,tr3022[R]. 1999.
[9]CHEN Yan, QU Zhiwei, ZHANG Zhenhua, et al. Data redundancy and compression methods for a diskbased network backup system[C]//Proc of the International Conference on Information Technology:Coding and Computing. Washington, DC:IEEE Computer Society, 2004:778-785.
[10]KEETON K, MERCHANT A. A framework for evaluating storage system dependability[C]//Proc of International Conference on Dependable Systems and Networks. Washington, DC:IEEE Computer Society, 2004:877-886.
注:“本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文”