(西北工業大學 計算機學院, 西安 710072)
摘 要:提出了一種基于FreeBSD平臺的遠程邏輯卷復制系統的設計方案,論述了它的系統結構以及實現方法。該系統以Vinum邏輯卷管理器為對象添加復制機制,不依賴于具體的存儲設備,能實現數據塊級的復制。系統提供了獨特的日志機制和日志保護技術,支持同步、異步兩種復制模式,可以適合不同的網絡環境。它的傳輸協議基于TCP/IP,并能結合成熟的壓縮技術,減輕網絡負載。該系統提供了一種經濟、通用的復制方案,能廣泛推廣應用。
關鍵詞:邏輯卷; 復制; 日志
中圖分類號:TP334.5 文獻標志碼:A
文章編號:10013695(2009)03095904
Research and design of remote logical volume replication system
based on FreeBSD
ZHAN Wentao, LI Zhanhuai, WANG Chao, JIANG Nan
(College of Computer Science,Northwestern Polytechnical University, Xi’an 710072, China)
Abstract:This paper presented the design of remote logical replication system based on FreeBSD, discussed its architecture and implementation method. The method added replication mechanism objected by Vinum logical volume manager, which could achieve replication on data block level while maintain independence on specific storage device. The system provided unique log mechanism and log protection, and supported synchronous, asynchronous replication strategies. Its transport protocol could be compatible with TCP/IP, and united with excellent compress technology to reduce network load. The system built a general and economical replication method and could be broadly applied.
Key words:logical volume; replication; log
0 引言
隨著計算機和互聯網的廣泛應用,數據已經成為開展業務不可缺少的基礎,數據丟失所造成的損失往往是無法挽回的。因此,建立備份系統,提高計算機系統的可靠性與容災能力,保證業務連續運行,已成為研究熱點。考慮到大范圍災難,如地震、颶風等自然災害,以及戰爭、恐怖襲擊等人為災害,用戶需要把數據備份到幾十公里之外才能避免數據丟失。
遠程復制[1]是實現遠程數據容災的主要手段。目前,已有眾多的知名研究機構、高校和IT公司在Linux和Windows平臺上開展了相關研究,成果顯著,但基于UNIX平臺的相對較少。
FreeBSD是UNIX家族中的一個主流操作系統,是TCP/IP協議的最早實現者,也是應用互聯網服務器的最佳操作系統。由于FreeBSD性能優秀,世界上眾多大型網站采用了FreeBSD操作系統,這其中有雅虎、新浪等。根據最新統計數據,目前互聯網上運行FreeBSD系統的服務器所占比例增長迅猛,已達22.6%,逼近Windows系列(23.4%)和Linux(26.3%)。隨著互聯網的迅速發展和普及,能提供良好互聯網服務的FreeBSD操作系統受到越來越多的互聯網服務提供商的青睞。
目前遠程復制的主要實現方法通常分為硬件和軟件兩種。前者以磁盤陣列間磁盤塊的復制為代表[2],具有通用性強、對應用程序影響小的特點,但是系統構建成本比較昂貴;后者主要是文件復制[3]和應用程序對象復制,實現起來相對經濟,但通用性較差,如文件復制系統不適用于數據庫的復制。在軟件層實現獨立于上層應用(文件系統、數據庫系統及其他應用)的復制可以綜合以上兩者的優點,即通用性強、經濟適用。目前基于邏輯卷管理的數據塊級復制容災受到研究者的關注,主要的代表性產品有VVR(veritas volume replicator)[4]、LVR(Linux volume replicator)[5]等。其中,VVR能提供面向UNIX、Windows、Solaris操作系統的服務,但它需要與自帶的卷管理器——VVM(veritas volume manager)配套,價格相對較貴,是面向高端的容災產品;LVR僅提供Linux平臺上的復制容災,而基于FreeBSD平臺的產品目前基本沒有。鑒于此,本文在這方面展開了研究。
1 Vinum簡介
Vinum[6]是FreeBSD的邏輯卷管理器,已成為FreeBSD內核的一部分且源代碼公開。Vinum是一個實現虛擬磁盤的塊驅動設備工具。它使磁盤從塊設備的接口和數據映射中獨立出來。Vinum考慮了數據冗余保護和磁盤負載均衡,能在保護本地數據的同時提高訪問性能。與傳統的存儲設備相比,Vinum增加了靈活性和可靠性,性能也更加優越。
Vinum提出了一個四層的目標結構:a)Volume,即虛擬磁盤,實際上可以看做沒有大小限制的磁盤驅動器;b)Plex,位于Volume下層,提供冗余功能;c)Subdisks,分解FreeBSD磁盤分區;d)Drive[4],即磁盤分區(驅動器),與硬件相關。通過這四層結構,Vinum實現了RAID0、RAID1和RAID5等多種模式,它們既可以獨立使用,也可組合使用。一般常用的是RAID1和RAID5,以提高可靠性和節省成本。
Vinum屏蔽了FreeBSD底層硬件細節,提供給用戶虛擬的volume,使得用戶可以方便讀寫數據而不用考慮底層接口。同時,Vinum支持striping的功能,將邏輯卷分布在多個磁盤上,通過并行訪問提高性能。Vinum還能提供數據冗余,能保證某個磁盤不可用時的數據訪問和恢復。
本系統(簡稱FSR)的設計方案是在Vinum邏輯卷中嵌入自行設計的遠程動態復制機制,捕獲系統更新數據并通過TCP/IP發送到遠程異地。之所以選擇在Vinum上的主要原因是:
a)從上層來看,Vinum提供的邏輯卷復制獨立于具體的數據類型,對任何應用,包括數據庫系統和文件系統都能適用。
b)Vinum獨立于物理設備,屏蔽了底層細節,并且能跨磁盤組織,這樣不用擔心磁盤容量太小,也不用擔心具體設備類型。
2 遠程復制的原理和結構
2.1 復制方式
復制系統的工作方式主要有主從式[5]、層次式[7]和分布式[8]等。層次式能減輕主服務器的工作負荷,避免瓶頸,但遠端備份數據與原數據之間差異很大,不利于實時數據一致。因此,它主要適用于對數據實時性要求不是很高、需要較多備份節點、保證主服務性能的場合。分布式支持多個同等地位的服務器同時接收應用,并相互備份,但它一般需要多個服務器配置一致,甚至需要專用網絡的支持,因此它的代價也比較大。本系統主要是一種提供經濟通用的備份方式,能提供一個或者多個數據備份。另外,備份的目的是容災抗毀,因此對數據的實時性也有一定的要求。鑒于此,本系統采用主從式結構,支持最多八個數據備份(實際上一般只使用兩三個),這也是備份容災中最經常使用的一種工作方式。在主從式結構中,本系統把運行業務的服務器稱為主端,而用于備份目的服務器稱為從端。主端存放數據的邏輯卷稱為主數據卷,從端存放數據的邏輯卷稱為從數據卷。
2.2 基本工作原理
FSR系統工作的基本原理是:截獲主端上層應用對主數據卷的寫請求,在更新本地主數據卷的同時把更新發往從端,由從端對從數據卷執行寫操作。FSR是嵌入在Vinum中的遠程復制模塊。FSR與FreeBSD中其他部分的相互關系如圖1所示。
在復制過程中,從數據卷是只讀的,只有主數據卷才能進行更新。所有的請求數據都記錄在一個請求隊列上,通過嚴格控制請求數據的順序來保證數據的更新順序。系統的請求隊列是以日志的形式組織,數據傳輸是通過TCP/IP協議實現的。TCP/IP協議是目前使用最廣泛的協議,不需要專用的網絡和設備,經濟實用。
3 日志隊列的組織和保護
3.1 日志的組織
日志機制廣泛應用于各類數據庫系統和文件系統中,也應用于復制系統與新興的連續數據保護系統中。VVR系統將數據記錄在日志上,然后發送到遠端[4]。連續數據保護系統支持任意時間點的數據恢復功能。系統在日志記錄中為寫請求添加時間戳,通過I/O書簽或者時間索引技術建立索引點來查找對應時間點的數據備份,從而進行任意時間點的數據恢復[9]。日志的實現方式也有很多種,一般最簡單的就是記錄到文件中。但是復制系統的日志既是數據請求的記錄者,也是遠程復制的數據源,需要記錄在非易失性隨機訪問存儲器(NVRAM)上。典型的Seneca協議[10]就是利用本地的磁盤或者SAN中的陣列磁盤記錄日志,LVR用的是LVM提供的邏輯卷(logical volume,LV)記錄日志。這類方法的優點是容災能力強,在主端非正常停機后能迅速恢復數據,不至于造成數據損失。
FSR的設計是用Vinum提供的volume記錄日志。FSR把volume組織成一個循環隊列[11],實時記錄上層的寫請求。日志的組織形式如圖2所示。一部分是控制信息區,用于存放日志的控制信息,包括日志的大小、日志隊列的指針等;一部分是數據記錄區,用于存放數據記錄。每個數據又包含記錄頭,記錄數據要寫的volume、偏移等信息,然后才是完整的數據。
記錄日志的volume叫做日志卷(log volume)。日志卷被組織成循環隊列,嚴格按照順序記錄上層數據,寫主數據卷的同時發往從端,并合適地將某些過時的無用數據覆蓋掉,這樣能有效利用磁盤空間,節省成本。
3.2 日志保護技術
循環隊列的日志卷有它的優點,但也有問題存在。首先網絡不可能總是暢通,可能會有一時的中斷或阻塞。其次,請求數據不會總是很平穩,可能某一瞬間有大量的請求,而某些時刻則基本沒有。數據是從日志卷中讀出并發往從端的,而記錄日志卷是相對獨立的操作,因此很有可能出現尚未被發送到從端的數據被新數據記錄覆蓋的情況,從而導致大量數據丟失。但如果為避免覆蓋而暫停應用,又會導致性能受影響。因此,系統還必須提供合理可靠的方法保護日志隊列。
VVR和LVR都提供了一個bitmap來暫時記錄本地所有未發往從端的更新,以保證上層應用的快速響應。FSR也引入一個類似的bitmap表,記錄在日志卷上。表中的每一位對應主數據卷上若干扇區的數據(具體數值依賴于主數據卷的大小)。當日志卷上即將被覆蓋的隊列數據尚未被發送到從端時,將這些數據和已寫入主數據卷之間的數據在bitmap中做標記,標記完成之后,則意味著這些數據能被覆蓋,即使它們還沒有被發送到從端。一旦網絡狀況恢復,則可以根據bitmap上的標記,將對應主數據卷上的數據發送到從端。這樣雖然會造成一定的延遲和一段時間內數據的不可用,但它能有效保證數據的正常發送而不影響應用,保證較好的系統性能。并且,bitmap表只記錄數據是否更改,并不記錄歷史數據。若一個數據塊經過多次改動,系統也只發送最近的一次更新數據,這樣也能較好地減輕網絡負載。
僅有bitmap是不夠的,系統也可能需要在性能和延遲之間折中,即允許系統有一定的性能影響和延遲,但又要保證主從端數據差異在一定的容忍范圍之內。VVR引入了延遲保護的概念,FSR依然借用這個概念,但在VVR的基礎上作了改進。FSR中把VVR中的latency_high_mark稱為延遲上限,latency_low_mark稱為延遲下限。延遲保護實際上是一種特殊的暫停應用的方法,對用戶的請求響應但不返回成功,讓操作系統等待,造成一種暫停的現象,實際是延緩操作。操作系統都提供了這種機制,實現方便。延遲上限標志主端日志上允許等待的最大請求數,一旦請求達到了這個點,延遲保護就開始啟動,保證主從數據差異不會太大。延遲下限標志的是可以撤銷延遲保護的臨界點。日志卷隊列的容量是決定是否需要延遲的最主要因素,因此延遲上限和下限的值也按照日志卷隊列大小的百分比來設置。
4 數據復制和傳輸
4.1 復制模式
FSR的遠程復制要求在保證數據完整性和可恢復性的前提下基于WAN環境提供數據塊級別的復制。WAN環境復雜多變,因此FSR的設計也考慮了多變的網絡環境。文獻[10]基于延遲為度量總結了若干種傳輸方式,其中有同步串行、同步并行、異步有序、異步語義、寫合并、完全拷貝等一系列的方式。歸納起來,這些模式有兩個特點:a)主從兩端完全同步,數據可靠性較高,應對災難能力較強,但是對性能影響比較大;b)從端相對主端數據有延遲,可靠性較差,但性能很好,基本不會影響上層應用。FSR的設計也支持同步和異步復制模式。
在同步模式下,主端的數據以完全同步的方式發送到從端,即主端每發送一個數據到從端,必須等待從端寫成功完成之后才能釋放系統資源,開始進行下一次數據發送。系統通過同步鎖和等待機制實現這一限制。在這種情況下,主從端的數據只相差一個數據請求,基本可以認為是一致的,可靠性很高。但是主端每次都要等待從端成功之后才響應上層應用,速度很慢。假設完成主端操作耗時為T1,網絡時延為T2,完成從端操作耗時T3,那么總的時延是T1+2T2+T3,并且T2的值在網絡擁塞的情況下會更大。如果碰到網絡暫時斷開,那么上層應用將接近于停滯。因此,該模式一般應用在網絡狀況良好的環境中。
在異步模式下,主端數據和從端數據并不完全同步。主端以一種樂觀的態度對待發送的數據,主端完成寫操作,將數據發送出去之后就可以返回成功,繼續響應上層應用。這種情況下總的時延為T1,相比同步模式而言,性能有很大的提升。即便網絡狀況較差,也不會影響上層應用的響應。但是這種模式下從端數據比起主端而言有較大的滯后,數據可靠性較差。
FSR提供兩種模式,供用戶根據需求和網絡狀況進行動態調整。VVR的設計針對保護模式提出了一種能在同步和異步之間進行實時切換的軟同步模式。FSR的設計不提供這種模式,因為兩種模式所要達到的目的和手段完全不一樣,切換會造成設計概念模糊,無所適從。
4.2 傳輸協議
FSR傳輸協議定義為在TCP/IP協議層之上的協議。該協議的優勢是可以利用基于IP的以太網長距離傳播,利用IP網絡已有的特性和工具,使用TCP的屬性,保證數據的順序發送和進行擁塞控制。IPSec能夠利用來提供傳輸協議的安全性。FSR的傳輸協議不僅可以使用標準、廉價的硬件,而且可以使用基于IP的工具和服務,非常經濟通用。
FSR定義了傳輸協議的數據包——傳輸協議包(transport protocol packet,TPP),包括控制包頭(header)和相應的數據。由于傳輸協議是運行在TCP/IP協議之上的,FSR需要作協議層的劃分。一個TPP作為多個TCP包來發送。協議分層如圖3所示。
FSR主要報文部分是TPP header和TPP data兩個部分,要設計的也是這個部分。在所有的報文中TPP header是必需的,因為有些報文只是對系統的狀態進行通知,所以可以沒有TPP data部分。沒有data部分的控制報文主要有健康檢測報文、認證報文、改變從端模式報文等,分別用來檢測網絡狀況、從端的身份是否一致,以及改變從端模式等。這些報文能輔助完成一些系統的檢查和配置任務。帶有data的報文即是FSR的正常數據報文,這些數據Vinum都已封裝好,FSR只需要負責提取有用信息即可。正常的數據報文又都包含數據頭和數據正文。數據頭主要是描述數據的具體狀態信息,如大小、位置序號、時間等,這樣的目的是盡可能減少傳輸的數據量,減輕網絡負載。
4.3 數據壓縮
基于數據塊傳輸的很大一個缺點就是傳輸的數據量比較大,塊級別上很細小的一點改動都需要傳輸整個數據塊。另外,FSR還要在WAN中傳輸,因此FSR引入壓縮算法對數據進行壓縮,以減輕負載,提高傳輸速率。
壓縮分為有損壓縮和無損壓縮。有損壓縮會引起原始數據失真,使FSR在災難發生時無法正常啟用從端數據進行恢復,而無損壓縮算法利用數據的統計冗余進行壓縮,可完全恢復原始數據而不引入任何失真,所以該系統最終選用了無損壓縮方法。LZW(LempleZivWelch)編碼[12]是一種通過把冗長數據轉換成短數據來實現無損信息的數據壓縮及還原的無損壓縮算法,比其他大多數壓縮技術壓縮效率較高,并且壓縮和還原速度很快,可廣泛用于文本數據、程序和圖像數據的壓縮。FSR主要考慮速度和壓縮率,所以最終選擇了LZW壓縮算法,使得傳輸速率獲得較大提高。
5 利用FSR構建高可用集群
集群就是一組計算機,它們作為一個整體向用戶提供一組計算機資源[13]。這些單個的計算機系統就是集群的節點。一個理想的集群是,用戶從來不會意識到集群系統底層的節點,在他們看來,集群是一個整體,而非多個計算機。集群系統的管理員可以隨意增加和刪改集群系統的節點。按照側重點的不同,可以把集群分為三類,不同的集群用于提供不同的服務,但FSR主要側重于應用高可用性集群,以最大限度地減少服務中斷時間,消除單點故障所造成的系統業務停止。
FSR的主端和從端可以通過集群軟件,對外展示為一個IP,由主端接收應用,從端備份數據。主從端通過集群軟件的健康檢測(healthcheck)協議實時監管對方的健康狀況。一旦主端發生災難或宕機,集群健康檢測協議監測到這個狀況之后立即停止與主端的對話,將應用切換到從端,由從端接收數據,接管應用。
FreeBSD的集群配置簡單方便、應用簡單,結合FSR應用構建的高可用集群(圖4)能快速應對災難,最大限度地保證業務的連續。
6 評估和實驗
為了驗證實驗設計的正確性,本文進行了原型實驗。實驗環境為連接到以太網的兩臺安裝FreeBSD的PC機,分別做主從端。實驗測試了各種類型的數據,包括文件系統、數據塊系統以及其他格式的數據。實驗證明,FSR能獨立于數據類型進行備份,能應用不同模式保證傳輸過程中數據的一致性;同時還能與Vinum提供的stripping和RAID技術結合,提高本地性能和可靠性。
7 結束語
本文提出了基于FreeBSD平臺的邏輯卷系統設計框架,主要討論了日志保護和復制模式、傳輸協議等。FSR能兼容TCP/IP協議,不需要專用存儲設備和網絡設備,非常經濟通用。目前,系統已經完成了基本的設計和原型的實驗測試,但依然有如下問題需要進一步完善和解決:
a)磁盤日志隊列保證了非易失性,但增加了一次讀寫磁盤的操作,對系統性能影響很大。因此,如何設計緩沖,減少I/O操作,需要進一步仔細研究。
b)Vinum本身提供了比較豐富的功能,FreeBSD對TCP/IP的支持也超過了其他平臺。因此,進一步結合Vinum,提供靈活的保護和恢復,同時優化傳輸協議,提高傳輸速率,需要繼續深入研究。
參考文獻:
[1]PATTERSON H, MANLEY S, FEDERWISCH M,et al. SnapMirror: filesystembased asynchronous mirroring for disaster recovery[C]//Proc of the FAST 2002 Conference on File and Storage Technologies.[S.l.]:IEEE Press, 2002:117129.
[2]Symmetrix remote data facility product description guide[K].[S.l.]: EMC Corporation, 2000.
[3]BACARISSE B S, BAYDERE S B. A low cost file replication algorithm[C]//Proc of the 34th IEEE Computer Society International Conference: Intellectual Leverage.[S.l.]:IEEE, 1989:191196.
[4]A guide to understanding VERITAS volume replicator[R].[S.l.]: VERITAS Corporation,2002.
[5]董歡慶,李戰懷,林偉,等. Linux平臺遠程邏輯卷復制系統的設計[J]. 計算機工程與應用, 2004, 40(18):109113.
[6]The Vinum volume manager[EB/OL]. [20080405]. http://www.freebsd.org/doc/en_US.ISO88591/books/handbook/vinumvinum.html.
[7]王明鐘,李戰懷,董歡慶. 基于層次結構的遠程數據復制系統[J]. 微電子學與計算機,2005,22(5):98101.
[8]PITOURA E, BHARGAVA B. Data consistency in intermittently connected distributed systems[J]. IEEE Trans on Knowledge and Data Engineering, 1999, 11(6):896915.
[9]YANG Qing, XIAO Weijun, REN Jin. TRAPArray: a disk array architecture providing timely recovery to any pointintime[C]//Proc of the 33rd Annual International Symposium on Computer Architecture(ISCA’06). New York:ACM Press, 2006:289301.
[10]JI Minwen, VEITCH A, WILKES J,et al. Seneca: remote mirroring done write[C]//Proc of USENIX Technical Conference. [S.l.]:ACM Press, 2003:253268.
[11]王彥龍,李戰懷,董歡慶,等.設備復制系統的日志機制研究[J].計算機工程與應用, 2005,41(5):1821.
[12]NELSON M R. LZW data compression[J]. Dr Dobb’s Journal,1989, 14(10):2937.
[13]IBM DevelopersWorks 中國. Linux集群[EB/OL]. [20080428]. http://www.ibm.com/developerworks/cn/linux/theme/cluster.html.