摘要:探討了災(zāi)難備份與FreeBSD操作系統(tǒng)聯(lián)合使用的重要性,并提出和實現(xiàn)了一種針對FreeBSD的容災(zāi)平臺。該平臺能夠提供磁盤高速鏡像、磁盤監(jiān)控和集系統(tǒng)恢復(fù)于一體的容災(zāi)系統(tǒng)。
關(guān)鍵詞:災(zāi)難備份; 遠(yuǎn)程鏡像; 恢復(fù); 磁盤監(jiān)控
中圖分類號:TP309.2
文獻(xiàn)標(biāo)志碼:A
文章編號:1001-3695(2007)09-0112-03
FreeBSD是最為穩(wěn)定和優(yōu)秀的操作系統(tǒng)之一,同時它的使用率也是相當(dāng)高。據(jù)統(tǒng)計,全球服務(wù)器最長開機(jī)運行時間top 50中,使用該系統(tǒng)的主機(jī)占一半以上;另外Yahoo、Hotmail、Apache、Sony Japan等大型公司主頁的服務(wù)器操作系統(tǒng)也使用FreeBSD。在現(xiàn)代信息社會,數(shù)據(jù)丟失和損壞將造成難以估量的損失,備份是保證數(shù)據(jù)安全的有效方法。基于上述兩個原因,本文設(shè)計并實現(xiàn)了一種針對FreeBSD操作系統(tǒng)的網(wǎng)絡(luò)災(zāi)難備份系統(tǒng)。
該系統(tǒng)具有如下特點: a)實現(xiàn)遠(yuǎn)程磁盤映射功能,彌補(bǔ)了FreeBSD操作系統(tǒng)在對應(yīng)環(huán)節(jié)的空白;b)實現(xiàn)了本地數(shù)據(jù)的遠(yuǎn)程備份,而且備份過程中盡可能減少了公共服務(wù)器負(fù)載;c)可直接架構(gòu)于Internet上,無須專門網(wǎng)絡(luò);d)可同時實現(xiàn)對多臺服務(wù)器的集中備份;e)發(fā)生災(zāi)難時可以迅速進(jìn)行切換和恢復(fù),使得公共服務(wù)期不會出現(xiàn)停止服務(wù)狀態(tài);f)完全軟件實現(xiàn),具有良好的成本優(yōu)勢;g)可擴(kuò)充應(yīng)用到所有基于4.4BSD的操作系統(tǒng),如OpenBSD、 NetBSD等。
1系統(tǒng)設(shè)計
1.1體系結(jié)構(gòu)
本文所提出的災(zāi)難備份系統(tǒng)主要分為本地災(zāi)難備份系統(tǒng)和遠(yuǎn)程災(zāi)難備份系統(tǒng)兩大平臺,而且兩個平臺完全對稱(圖1)。在本地平臺中可分為本地服務(wù)器群和一臺作為本地網(wǎng)關(guān)機(jī)器;同樣在遠(yuǎn)程平臺也分為一臺遠(yuǎn)程網(wǎng)關(guān)和遠(yuǎn)程服務(wù)器群。在這個體系結(jié)構(gòu)中,兩個網(wǎng)關(guān)形成了通過互聯(lián)網(wǎng)溝通兩地服務(wù)器群的橋梁;本地服務(wù)器充當(dāng)?shù)慕巧窃诨ヂ?lián)網(wǎng)中為企業(yè)、政府部門等提供服務(wù)的服務(wù)器。本文提出的災(zāi)難備份系統(tǒng)要保障的就是本地服務(wù)器群,每一個遠(yuǎn)程服務(wù)器則是為上述的對應(yīng)的應(yīng)用服務(wù)器提供的一個遠(yuǎn)程備份。這里本地服務(wù)器和遠(yuǎn)程服務(wù)器均采用FreeBSD操作系統(tǒng)。通過這樣的架構(gòu),在本地服務(wù)器上的應(yīng)用或數(shù)據(jù)可以通過本地網(wǎng)關(guān)和遠(yuǎn)程網(wǎng)關(guān)備份到遠(yuǎn)程服務(wù)器群。當(dāng)本地服務(wù)器發(fā)生災(zāi)難時,遠(yuǎn)程服務(wù)器可以立刻取代本地服務(wù)器,同時將備份在遠(yuǎn)程服務(wù)器的數(shù)據(jù)恢復(fù)并返回本地服務(wù)器,保證服務(wù)的連續(xù)和系統(tǒng)數(shù)據(jù)的完好。
1.2總體設(shè)計
災(zāi)難備份系統(tǒng)的總體設(shè)計由七個模塊組成,每個模塊分別具有一個獨有功能。當(dāng)其整合起來就構(gòu)成了整個災(zāi)難備份系統(tǒng)。各模塊之間關(guān)系如圖2所示。
1)用戶系統(tǒng)設(shè)置模塊在此模塊中,提供了界面讓用戶重啟網(wǎng)關(guān)、密碼設(shè)置、啟動、關(guān)閉服務(wù)和設(shè)置系統(tǒng)運行參數(shù)。用戶提交的數(shù)據(jù)將被監(jiān)控模塊捕獲,并將這些更改后的數(shù)據(jù)放到數(shù)據(jù)庫中保存起來。
2)網(wǎng)絡(luò)設(shè)置模塊在此模塊中,提供了界面來讓用戶按照自己的實際網(wǎng)絡(luò)情況來設(shè)置網(wǎng)絡(luò)。同樣這些改變也會被監(jiān)控模塊捕獲,同樣也將這些改變后的值存入到數(shù)據(jù)庫中。
3)磁盤鏡像管理模塊此模塊分成兩個小模塊分別運行在服務(wù)器群(包括本地服務(wù)器和遠(yuǎn)程服務(wù)器)和網(wǎng)關(guān)(包括本地網(wǎng)關(guān)和遠(yuǎn)程網(wǎng)關(guān))上。位于網(wǎng)關(guān)的一塊磁盤(取名為A磁盤)將被映射到服務(wù)器,并在服務(wù)器和服務(wù)器的一塊備份磁盤(取名為B磁盤)作鏡像操作,生成鏡像磁盤C。這樣對服務(wù)器的磁盤C進(jìn)行寫操作,相當(dāng)于對服務(wù)器磁盤B和網(wǎng)關(guān)的磁盤A作同樣的寫操作。
4)監(jiān)控模塊此模塊采用后臺運行的方式,一直監(jiān)聽用戶設(shè)置、網(wǎng)絡(luò)設(shè)置和磁盤鏡像管理的端口,當(dāng)接收到用戶設(shè)置和網(wǎng)絡(luò)設(shè)置端口傳來的數(shù)據(jù)信息時更改數(shù)據(jù)庫,并可以按用戶要求通過傳輸模塊將磁盤A內(nèi)容發(fā)送到對方網(wǎng)關(guān)。
5)數(shù)據(jù)庫模塊本文構(gòu)建的災(zāi)難備份系統(tǒng)中數(shù)據(jù)庫采用的是MySQL數(shù)據(jù)庫。模塊的功能即把不同來源的數(shù)據(jù)寫到對應(yīng)的數(shù)據(jù)庫字段中,需要時可從數(shù)據(jù)庫中讀出。
6)傳輸模塊傳輸是基于TCP傳輸方式。當(dāng)本地網(wǎng)關(guān)和遠(yuǎn)程網(wǎng)關(guān)中一方接收到寫操作時,將寫操作存放在本地緩沖隊列中,當(dāng)網(wǎng)絡(luò)通暢時發(fā)送給對方。發(fā)送成功后,對方網(wǎng)關(guān)重放寫操作以實現(xiàn)數(shù)據(jù)的異地備份,同時具有校驗功能和錯誤重傳功能。在傳輸模塊中包含了恢復(fù)功能,能夠?qū)Σ煌臑?zāi)難源采用針對性策略恢復(fù)系統(tǒng)。
7)日志模塊對各個模塊提供日志記錄,這樣可以查看每個模塊工作的詳細(xì)信息,并對日志的合法性進(jìn)行水印驗證。
2系統(tǒng)實現(xiàn)
2.1磁盤鏡像管理模塊
磁盤鏡像管理模塊是惟一運行在內(nèi)核空間的程序。運行在服務(wù)器的模塊被稱為發(fā)起端;運行在網(wǎng)關(guān)的模塊被稱為接收端。在災(zāi)難備份系統(tǒng)中實現(xiàn)磁盤鏡像需要兩個步驟:a)將網(wǎng)關(guān)的一塊磁盤映射到服務(wù)器,建立一個虛擬映射磁盤;b)將虛擬映射磁盤和服務(wù)器要求備份磁盤做磁盤鏡像。這樣就可以利用操作生成的鏡像磁盤同時操作服務(wù)器的要求備份磁盤和網(wǎng)關(guān)上的磁盤。
2.1.1服務(wù)器向網(wǎng)關(guān)發(fā)起映射
在最新官方發(fā)布的FreeBSD操作系統(tǒng)版本中,還沒有能實現(xiàn)遠(yuǎn)程磁盤映射這一個功能。在本文陳述的災(zāi)難備份系統(tǒng)中,建立一個簡單的針對FreeBSD的發(fā)起端模塊:磁盤鏡像管理模塊發(fā)起端向下同TCP/ IP 協(xié)議棧接口,向上同磁盤驅(qū)動層接口。它會將自己注冊到磁盤驅(qū)動層驅(qū)動中,通過驅(qū)動層提供的應(yīng)用驅(qū)動獲得一系列的用于傳遞對磁盤進(jìn)行寫命令的接口。在注冊成功后,發(fā)起端會試圖通過發(fā)送查詢命令獲取運行于網(wǎng)關(guān)的接收端的基本信息。通過同一模塊中另一個配置程序來建立TCP連接,開始登錄過程并通過參數(shù)協(xié)商獲取網(wǎng)關(guān)的基本信息。在參數(shù)協(xié)商成功完成后,模塊將創(chuàng)建兩個線程,即接收線程rx_thread和發(fā)送線程tx_thread,如圖3所示。
接收線程tx_thread平時守候在相應(yīng)命令隊列的同步對象上,當(dāng)磁盤驅(qū)動層通過截獲用戶層寫磁盤命令后,通過發(fā)起端獲得的接口轉(zhuǎn)發(fā)給發(fā)起端;隨后發(fā)起端將這個寫磁盤命令轉(zhuǎn)換成一個TCP的包,并喚醒tx_thread;tx_thread就會將這個命令包發(fā)送到本地網(wǎng)關(guān)的接收端;然后又在同步對象上阻塞。Rx_thread 線程負(fù)責(zé)接收來自接收端的對應(yīng)TCP包的到達(dá)。當(dāng)TCP 連接上有包到達(dá)時,rx_thread被喚醒。rx_thread將處理該輸入的TCP包:剝開該TCP包,從中獲取攜帶的寫磁盤命令,又將查找命令隊列,執(zhí)行對應(yīng)的命令,同時向中間層驅(qū)動報告執(zhí)行結(jié)果。
2.1.2網(wǎng)關(guān)接收服務(wù)器的映射
在本地網(wǎng)關(guān)實現(xiàn)的磁盤鏡像管理模塊就是接收端。按其功能又可分成兩個不同的小模塊,分別為磁盤驅(qū)動中間層和前臺驅(qū)動程序。前臺驅(qū)動程序是根據(jù)TCP/IP協(xié)議來實現(xiàn)的,它會將本地服務(wù)器發(fā)起端通過TCP傳過去的TCP包中剝離出命令轉(zhuǎn)換為寫磁盤命令。當(dāng)獲取到寫磁盤命令后,通過磁盤驅(qū)動中間層向前臺驅(qū)動程序提供一系列可以在中斷處理中被調(diào)用的接口,將對磁盤的寫命令傳到磁盤驅(qū)動中間層,并交由后者處理,也就是將收到的命令或數(shù)據(jù)放入一個隊列中,等待被執(zhí)行。同樣,接收端的前臺驅(qū)動程序也要給磁盤驅(qū)動中間層提供入口,以實現(xiàn)對本地服務(wù)器發(fā)起端發(fā)送的對磁盤的寫操作命令。
2.2監(jiān)控模塊
系統(tǒng)加載時,各臺主機(jī)啟動進(jìn)程在指定的端口上監(jiān)聽消息,本地網(wǎng)關(guān)啟動系統(tǒng)監(jiān)控主進(jìn)程,其中對用戶設(shè)置使用8002端口進(jìn)行監(jiān)聽(8002端口只是系統(tǒng)默認(rèn)的端口,記錄在災(zāi)難備份系統(tǒng)數(shù)據(jù)庫中。當(dāng)用戶想要修改可以通過Web在用戶設(shè)置中修改,修改后的值會通過監(jiān)控模塊修改數(shù)據(jù)庫來使其保存)。 當(dāng)收到來自用戶設(shè)置和網(wǎng)絡(luò)設(shè)置模塊傳來的信息時,一邊通知日志模塊記錄,一邊更新數(shù)據(jù)庫。監(jiān)控模塊不僅僅停留在只等待接收消息,與此同時,監(jiān)控模塊還要定時向其他模塊和主機(jī)發(fā)送消息,以查詢各主機(jī)及各模塊的工作是否正常。這個輪詢時間在用戶設(shè)置中可以配置,系統(tǒng)默認(rèn)的是1 s。這個輪詢時間大小也記錄在數(shù)據(jù)庫中。當(dāng)監(jiān)控模塊發(fā)現(xiàn)其他模塊或其他主機(jī)發(fā)生錯誤時,一邊通知日志模塊,一邊作出與錯誤相對應(yīng)的恢復(fù)或切換操作。
2.3日志模塊
日志模塊啟動守護(hù)進(jìn)程,監(jiān)聽監(jiān)控模塊,通過監(jiān)控模塊發(fā)送來的消息記錄系統(tǒng)事件和用戶操作,并加密日志和進(jìn)行水印驗證,檢查日志是否被外部程序或用戶進(jìn)行了非法修改。此外還實現(xiàn)了定時清理日志功能。
2.4傳輸模塊
網(wǎng)關(guān)與服務(wù)器之間的傳輸是利用前面陳述過的磁盤鏡像管理模塊得以實現(xiàn),而傳輸模塊用來解決兩個網(wǎng)關(guān)之間的傳輸問題。災(zāi)難備份系統(tǒng)中的傳輸模塊因為考慮到網(wǎng)絡(luò)環(huán)境不太復(fù)雜,同時兩臺網(wǎng)關(guān)可以架設(shè)VPN通道解決安全問題,所以盡量做到在不失必要功能的同時使功能盡量簡單化,這樣可以提高傳輸?shù)男室膊粫?dān)心數(shù)據(jù)丟失。傳輸是基于TCP傳輸方式,當(dāng)本地網(wǎng)關(guān)發(fā)生問題,要對本地網(wǎng)關(guān)進(jìn)行恢復(fù)時,系統(tǒng)將本地網(wǎng)關(guān)當(dāng)做server端服務(wù)程序,同時將遠(yuǎn)程網(wǎng)關(guān)當(dāng)做client端程序,從遠(yuǎn)程網(wǎng)關(guān)傳送數(shù)據(jù)到本地網(wǎng)關(guān),并對其錯誤進(jìn)行修復(fù);反之,當(dāng)遠(yuǎn)程網(wǎng)關(guān)發(fā)生災(zāi)難需要恢復(fù)時,將本地網(wǎng)關(guān)作為client端,遠(yuǎn)程網(wǎng)關(guān)作為server端,把數(shù)據(jù)從本地網(wǎng)關(guān)發(fā)送至遠(yuǎn)程網(wǎng)關(guān),對其進(jìn)行恢復(fù)。同時,災(zāi)難備份系統(tǒng)傳輸模塊提供簡單的傳輸校驗,client端主機(jī)計算一個要發(fā)送數(shù)據(jù)的CRC值,把CRC值和將要發(fā)送的數(shù)據(jù)一起發(fā)送到server端,在server端主機(jī)計算接收到數(shù)據(jù)的CRC值,然后比較兩個CRC,如果一樣就通過;否則就要求重傳。
災(zāi)難備份系統(tǒng)傳輸模塊也提供序列號控制,這樣可以防止client端所發(fā)出的數(shù)據(jù)順序和server端接收到的數(shù)據(jù)順序不一樣,而導(dǎo)致的傳輸錯誤。
3系統(tǒng)性能測試和分析
測試環(huán)境是由四臺計算機(jī)組成;網(wǎng)絡(luò)環(huán)境設(shè)置為在局域網(wǎng)(100 Mbps帶寬)中設(shè)置私有網(wǎng)段172.168.0.x來模擬搭建本地災(zāi)難備份平臺;設(shè)置私有網(wǎng)段192.168.0.x來模擬搭建遠(yuǎn)程災(zāi)難備份平臺;兩個網(wǎng)段中設(shè)置靜態(tài)路由連接兩個網(wǎng)段來模擬網(wǎng)絡(luò)傳輸。其他配置和操作系統(tǒng)如表1、2所示。
對上數(shù)據(jù)分析所示:a)在沒有加載災(zāi)難備份系統(tǒng)時進(jìn)行遠(yuǎn)程磁盤寫操作的時間和加載了災(zāi)難備份系統(tǒng)的情況下所要求的時間相差平均值是14.48%。b)在線性增加寫磁盤大小的情況下,時間的增長同樣按照相應(yīng)的斜率線性增加,說明災(zāi)難備份系統(tǒng)對性能的影響很小。
4結(jié)束語
本文提出和實現(xiàn)了一種針對FreeBSD的災(zāi)難備份平臺,并保證了系統(tǒng)服務(wù)的穩(wěn)定性和不間斷性;災(zāi)難備份系統(tǒng)不需要額外硬件支持,可以降低總體擁有成本;可以在本地網(wǎng)關(guān)與遠(yuǎn)程網(wǎng)關(guān)之間使用VPN網(wǎng)絡(luò)隧道,還可以保證在互聯(lián)網(wǎng)上的數(shù)據(jù)安全。
參考文獻(xiàn):
[1]李濤. 網(wǎng)絡(luò)安全概論[M]. 北京:電子工業(yè)出版社,2004.
[2]FreeBSD Handbook [K]. The FreeBSD Documentation Project.
[3]FreeBSD Developers,Handbook FreeBSD Architecture Handbook [R]. The FreeBSD Documentation Project.
[4]MANCHESTER J,SAHA D, TRIPATHI S K. Protection, restoration, and disaster recovery [J].IEEE Network,2004,18(2):3-4.
[5]STEVENS R. UNIX network programming, volume 1, networking APIs:socket and XTI [M]. 2nd ed. New York:Prentice Hall, 1988.
[6]CHRISTEN M G, SMITH M, TAYLOR C R, et al. Evolving video skims into useful multimedia abstractions[C]//Proc of the ACM CHI’98 Conference on Human Factors in Computing System. New York:ACM Press, 1998.
[7]SOURCE A.SANS sharing storage to infinity and beyond:electronic design [J]. Electronic Design, 2004, 52(9):50-59.
[8]GUMMADIK P,PRADEEP M J, MURTHY C S R.An efficient primarysegmented backup scheme for dependable realtime communication in multihop networks [J].IEEE/ACM Transactions on Networking,2003, 11(1):81-94.
注:“本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文”