官术网_书友最值得收藏!

1.2 存儲相關技術

1.2.1 備份技術

備份就是出于數據恢復的目的而創建一份額外的數據副本。備份的數據可以是完整的文件、文件中的一部分、目錄或用戶自定義的數據對象,如數據庫中的表。數據的備份可以有多個版本,每個版本獨立地存儲在服務器上。如果原始的數據遭到破壞,某一個版本的備份數據就要從服務器上復制到客戶機,這個過程稱做恢復。

備份窗口(Backup Window)有兩層意思。從業務層面講,備份窗口指的是存儲管理員可以安全地實施備份的時間段,在這段時間內,通常要進行特殊的系統準備,例如關閉應用程序、丟棄用戶連接等。從技術層面講,它表示完成一次給定備份所需的時間,這個時間取決于需要備份的數據總量和數據備份的速度。

和備份窗口相對應的是恢復窗口(Recovery Window),也經常稱為恢復時間目標(Recovery Time Objective),其包括兩層含義。從業務層面上,是指所能容忍的業務停止服務的最長時間。從技術層面上,它表示從災難發生到業務系統恢復服務功能所需要的最短時間周期。

數據恢復點目標(Recovery Point Objective)主要是指業務系統所能容忍的數據丟失量。如果采用傳統的磁帶備份,則恢復點是上一次的備份,而自上次備份以來修改的數據都丟失了。

當前的業務環境下,企業對備份的要求越來越高。主要體現在:

? 應用有效性需求:7×24×永遠。當今的計算環境不允許應用的宕機,這一需求來源于不斷增強的競爭、全球化的驅動;

? 有效的備份窗口:0。當今許多公司都沒有非工作時間——他們需要一直保持數據有效,這樣備份窗口根本就不存在;

? 可接受的恢復窗口:0。公司沒有機會停止服務,即便是要從發生的災難中恢復。如果不能立即滿足用戶需求,這個用戶可能就會永遠離開你;

? 可接受的數據損失:0。數據已經成為任何一個公司最重要的資產,設想這是你的客戶信息、銀行賬號等,它們是不可以丟失的;

? 企業存儲投資增長:盡可能少。當前的存儲系統越來越龐大、越來越復雜,但當前的經濟環境卻迫使許多企業在存儲方面投資(包括設備、軟件和操作人員)盡可能少。畢竟,減少總體擁有成本(Total Cost of Ownership)非常關鍵。

備份有不同的分類方式。根據存儲介質,分為磁帶備份、光盤備份、磁盤備份;按照執行方式,分為手工備份和自動備份;根據備份數據的復制距離,又可分為本地備份和遠程備份;按照備份數據的具體方法來分,包括全量備份、差量備份和增量備份。我們下面還會看到更多基于存儲相關角度的備份分類方式。

1.直接連接備份、網絡連接備份、脫局域網備份和脫服務器備份

按照網絡架構來分,包括直接連接備份(Direct-Attached Backup)、網絡連接備份(Network-Attached Backup)、脫局域網備份(LAN-Free Backup)和脫服務器備份(Server-Free Backup)等。其中直接連接備份和網絡連接備份為傳統局域網的備份方式,而脫局域網備份和脫服務器備份則是基于存儲區域網的新型備份方式。

(1)直接連接備份

在直接連接備份模型下(如圖1-11所示),每臺應用服務器都配備有專用的磁盤陣列或磁帶庫,應用服務器中的數據備份到位于本地的專用磁帶驅動器或資源庫中。直接連接備份模式的問題顯而易見:即使一臺磁帶驅動器處于空閑狀態,另一臺應用服務器也不能用它進行備份工作,因而造成磁帶資源利用率的低下。另外,不同的操作系統使用的備份恢復程序一般也不相同,這使得備份工作和對資源的總體管理變得更加復雜。

(2)網絡連接備份

在網絡連接備份環境下(如圖1-12所示),應用服務器從本地連接的磁盤陣列中讀取數據,通過網絡發送給備份服務器。備份服務器接收到數據后,按照預先配置好的備份策略寫到本地連接的公用磁盤或磁帶系統中。它在一定程度上克服了專用磁帶系統的缺點,將磁帶資源由一個專門的備份服務器控制。這種集中存儲的方式極大地提高了磁帶資源的利用效率,使得企業在高性能磁帶驅動器和資源庫上的投資取得更好的回報。這種方式的主要缺點在于:網絡帶寬將成為備份和恢復進程中的潛在瓶頸,進而影響企業進行快速備份和恢復的能力。另外,通過網絡傳輸備份和恢復數據將占據大量帶寬,增加網絡負荷,影響其性能。

圖1-11 直接連接備份模型

圖1-12 網絡連接備份模型

(3)脫局域網備份

網絡存儲拓展了備份的范圍,脫局域網備份模型(如圖1-13所示)通過建立專用備份網絡把備份數據流量從數據網絡轉移到存儲區域網,把局域網排除在備份和恢復進程之外。用戶只需將磁帶驅動器和資源庫連接到存儲區域網中,應用各服務器就可把需要備份的數據直接發送到共享的磁帶上,不必再經過局域網鏈路。服務器到共享存儲設備的大量數據傳輸是通過存儲區域網進行的,局域網只承擔各服務器之間的通信(而不是數據傳輸)任務。這種分工使得存儲設備、服務器和局域網資源得到更有效的利用,從而使存儲區域網成為速度更快、擴展性和可靠性更好的備份和恢復解決方案。

(4)脫服務器備份

基于存儲區域網結構的網絡備份的另一種方式是脫服務器備份,其模型如圖1-14所示。存儲區域網上獨立的備份管理系統把應用服務器的備份工作接管過來,所以這種備份方式也稱為第三方備份。采用這種方式,數據在存儲設備之間直接進行傳輸(如從磁盤到磁帶機),無須通過主服務器。獨立于服務器的備份和恢復方案可顯著減少主機的CPU占用時間,被釋放的CPU資源用于其他應用,可提高操作系統效率,幫助企業完成更多的工作。但是,這項技術目前仍在發展完善階段,需要進一步同操作系統,數據庫及應用程序相結合,以支持應用級的備份和恢復。

2.文件級備份和塊級備份

按照基本單元來分,可分為基于文件的備份(File-based Backup)和基于數據塊的備份(Block-based Backup)。

在文件級備份下,備份軟件使用服務器操作系統和文件系統來備份文件。它的一個優點就是可以很容易恢復某個或某些特定的文件。另一個優勢在于在進行備份的時候,操作系統和應用程序可以繼續訪問文件。這種方式也有一些不足之處。和塊級備份相比,文件級備份所需要的時間更長。如果備份大量的小文件,操作系統和文件及目錄元數據訪問的開銷相當高。同時“打開文件”的備份也是一個需要解決的問題。

圖1-13 脫局域網備份模型

圖1-14 脫服務器備份模型

塊級備份,也稱為映像級備份(Image-Level Backup)。塊級備份完全繞過文件和文件系統,將數據作為裸磁盤塊,從磁盤上直接讀取數據。塊級備份應用程序并不關心有多少文件,更不深入到文件內部。它按塊在磁盤上的次序讀取,而不是它們在文件中的次序,所以不會因為讀取有大量分片的文件數據時因尋道而導致性能的下降。塊級備份通常有內建的即時快照支持,因此可以從根本上解決“打開”文件問題。它的過程通常是:通過執行特殊的操作將運行著的應用程序和它們在服務器內存中的數據進入一致狀態,沖刷到磁盤,然后做一個快照,備份過程從快照而不是實際卷上讀取改變的數據塊,備份完成后刪除快照。

3.在線備份、離線備份和近線備份

按照保存方式,分為在線備份(Online Backup)、離線備份(Offline Backup)和近線備份(Near-line Backup)。

在線備份指的是實時性訪問數據的磁盤驅動器或磁盤類陣列;在線備份是直接可用的數據備份。一般,進行在線備份成本很高,需要很多的在線存儲。因此,在線備份需要和離線備份以及近線備份結合使用,構成分層次的三線備份。實際上,最新的備份數據是在線保存的,而過期的數據則進行離線存儲。

離線備份需人工介入,通常保存在磁帶或光盤中。在備份完成后,磁帶或者光盤從磁帶庫或者光盤驅動器中取出,集中保存起來。離線備份可以防止數據被誤修改,或者物理損壞,但是也只有將磁帶或光盤再放入到磁帶庫或光盤驅動器中之后,才能被訪問。

近線備份則是介于兩者之間,指的是不須人工介入。和離線備份相比較,近線備份也是保存在磁帶或者光盤中,但其不同之處在于,磁帶或者光盤還保留在磁帶庫或光盤驅動器中。在有恢復需要時,磁帶或光盤立即可用。因此,恢復執行起來更為迅速,根本無須手工操作磁帶。

這種方式避免了常規的磁帶更換,資源庫容量足夠大,可以保存一段相當長時間的備份。但近線備份比離線備份更不安全,因為不能保障無意識地修改。是由于磁帶庫的費用,近線備份較離線備份更為昂貴。

由于硬盤的價格越來越便宜,容量卻越來越大,再加上硬盤速度快的特點,大大降低了近線存儲的成本,也同時降低了近線存儲應用的門檻,從磁盤到磁盤的數據備份將有更大的增長空間。

4.冷備份和熱備份

按照備份過程和系統運行的關系則分為冷備份(Cold Backup)和熱備份(Hot Backup)。

冷備份在執行操作時,服務器將不接受來自用戶或應用對數據的更新。這樣,當備份復制正在進行時,并發更新的問題就完全被杜絕了。冷備份能很好地工作,經常用于數據庫備份。當然,冷備份也存在問題,即在備份期間,服務器不可以接受任何更新操作。假如冷備份需要運行6小時到8小時,那么,要使應用服務器做到全天候的可用性就成為一個不可能的事情。

熱備份是在用戶和應用正在更新數據時,系統也可以進行備份。對于熱備份,存在完整性問題,每一個文件或數據庫實體都需要作為一個完整的、一致的版本進行備份。最簡單的方案就是完全忽略這些問題,并希望在后來的恢復過程中不需要這個備份數據。事實上不能這樣做,其原因是:假如你以后不想恢復數據,又何必為備份而費神呢?另一種做法是當備份正在運行時,不要備份任何正由其他應用使用的文件,這樣,當一個應用正在更新數據時,備份一個文件也不會產生不一致的危險。但是,有一些重要的數據文件總是處于打開狀態,如果使用這種方法,它們將永遠得不到備份。此外備份系統應盡量使用文件的單獨寫/修改權限,保證在該文件備份期間應用不能對它進行更新。

1.2.2 快照技術

數據必須持續有效,因備份而宕機是無法接受的。在線或活動的備份系統允許用戶在備份過程中繼續訪問文件,雖然可以提供更高的可用性,但是引入了一致性問題。圖1-15說明了在這種熱備份中是如何產生數據不一致問題的。

圖1-15 備份過程中可能導致的數據不一致問題

剛開始時文件包含了兩個數據塊1和2,這時備份程序開始執行,復制了數據塊1,然而在這一時刻,應用程序對文件內容進行修改,由于操作系統調度的關系,數據塊被覆寫為1′和2′,接著備份程序又獲得執行權,繼續復制第二個數據塊,即2′,后結束。最終備份下來的數據塊內容為1和2′,既不同于文件修改之前的1和2,也不同于文件修改之后的1′和2′。

為了保證備份的一致性,可以采取三種方法。

(1)在備份過程中禁止應用程序訪問磁盤。在早期PC計算的年代,這時最常使用的備份方式,但如今,基于下列兩個事實,這種備份方案并不現實:

? 數據24×7有效稱為當今企業業務連續的一個必備因素:用戶需要在任意時間訪問數據,企業不能承擔應用程序離線或者數據不一致而產生的可能后果;

? 數據的爆炸性增長以及備份窗口的不斷減小使得永遠沒有足夠的時間用于備份。而備份需要在任意時間發生,以確保所有數據都能得到備份。

(2)在有應用程序訪問磁盤的情況下備份數據,但是跳過所有打開文件。顯然,在備份過程中依然要運行的應用程序是重要的,這樣做就意味著這些應用程序用到的“重要”數據沒辦法被備份下來。

(3)區別對待由備份應用程序發起的I/O以及其他應用程序發起的I/O。比如在存儲子系統中使用“快照”技術,可以解決大規模數據復制造成的長停機時間問題。

存儲網絡工業協會(SNIA)對快照的定義為:快照(Snapshot)為一個數據對象產生完全可用的副本,它包含對該數據對象在某一時間點的映像,快照在快照時間點對數據對象進行邏輯復制操作,產生數據對象在該時間點的一致性數據副本,但實際的部分或全部物理復制過程可能在復制時間點之外的某些時間進行。快照可以在非常短的時間內完成數據對象邏輯副本的創建,其數量級通常為幾秒,因此也稱為零時間復制。快照技術可以最大限度減小復制操作對上層應用的影響,同時保證復制操作語義的原子性。

快照技術按照實現方式:包括寫前復制、寫時轉向和拆分鏡像等。

1.寫前復制

寫前復制(Copy on Write),精確地說,應稱為首寫復制(Copy on First Write),指的是在第一次對源卷進行寫操作之前,將源卷中對應的數據塊復制到快照卷中,而后續對源卷中該數據塊的寫操作可以直接進行。

圖1-16說明了寫前復制是如何工作的。在圖中,用表示源卷的初始內容,表示快照卷的初始內容,表示對源卷的第一次修改,表示對源卷的后續修改,表示對可寫快照卷的第一次修改,表示對可寫快照卷的后續修改。

圖1-16 創建快照

寫前復制實現方案是從創建快照開始的。創建快照為源卷的快照卷分配空間。快照卷空間不必等同于源卷,實際上,快照卷的空間選擇取決于源卷的大小、數據更新的頻率以及該快照計劃保存的時間,可為源卷空間的5%~110%左右。當快照卷空間用光之后,快照卷就失效了。在創建快照的同時,還需要一個長度和快照卷容量成比例的快照映射表,其中保存源卷數據塊和快照卷數據塊之間的映射關系。

一旦創建好快照,即可對源卷及其快照卷進行讀/寫操作,下面我們將依次分析每個操作的過程。

在寫源卷前,首先查找快照映射表,這時可能出現兩種情況:① 未命中,即快照映射表中沒有和源卷中待寫的數據塊相對應的記錄;② 命中,即快照映射表中存在和源卷中待寫的數據塊相對應的記錄,如圖1-17所示。

后續寫卷的情形如圖1-18所示。這是因為命中總是出現在首次寫該數據塊時。在未命中的情況下,操作將分割為順序的三個原子操作:將該數據塊(9)的內容從源卷復制到快照卷的某個數據塊(5)中;在快照映射表中追加一條記錄,給出源卷中的數據塊和對應的快照卷中的數據塊;在上述兩步完成之后,即可將新內容寫到源卷的數據塊中。

如果查找快照映射表時命中,則表明源卷中該數據塊在做快照時的數據已經保存到快照中,我們可以直接將新的內容寫到源卷中。

在寫前復制方案中,讀源卷操作和讀取一個普通的設備沒有任何區別,只需要從源卷的對應數據塊中將內容讀出即可,無論這些內容在創建快照后是否有被修改或者是否被多次修改,如圖1-19所示。

圖1-17 首次寫源卷

圖1-18 后續寫源卷

圖1-19 讀源卷

讀取快照卷的操作一般用于獲取在快照創建時刻的“數據映像”,它也涉及快照映射表的查找以及命中和未命中兩種可能。

讀快照卷如果未命中(如圖1-20所示),表明“數據映像”在這個數據塊的值在創建快照以后,并沒有修改過,因此從源卷中直接讀取即可。

圖1-20 讀快照卷——未命中

讀快照卷如果命中(如圖1-21所示),表明“數據映像”在源卷中這個數據塊的值在創建快照以后已經更新,并保存到快照卷中。這時從快照映射表獲得在快照卷中對應的數據塊編號,并讀取之。

圖1-21 讀快照卷——命中

將源卷恢復到快照創建時的狀態,使得源卷中的數據和創建快照時的數據完全一致,這種操作被稱為“回滾(rollback)”(如圖1-22所示)。數據回滾的主要應用是在人工誤操作,或病毒入侵等破壞了源卷內容的情況下,恢復到之前完好的狀態。

借助于快照映射表,很容易實現快照卷的回滾。一般來說,執行快照恢復操作必然導致在這個快照之后創建的快照失效。甚至,在有些比較簡單的實現方案中,一旦源卷利用某一個快照卷進行回滾,則為這個源卷做的所有快照卷都無效了。

圖1-22 快照回滾

某些系統支持可寫快照,并且為寫快照使用另一個快照映射表。也就是說,在第一次對可寫快照進行寫操作之前,將可寫快照卷中的內容復制到快照卷中,并在這個快照映射表中記錄可選快照卷的數據塊和快照卷的數據塊之間的關系,之后才將新的內容更新到可寫快照卷。

這種情況下,快照中有兩種修改:由于修改源卷而復制到快照中的數據,以及對可寫快照卷修改的數據。回滾和前面有相同的含義,即只恢復由于對源卷進行修改而保存的數據,直接對快照卷所做的修改不會傳送到源卷中。這時,還可以引入一種“前滾(roll forward)”的技術,整個快照卷被恢復成源卷。也就是說,除了對源卷進行修改而保存的數據塊也會應用到源卷,直接對可寫快照卷所做的修改也將被應用到源卷。在前滾后,快照卷和源卷的內容完全一致,回滾和前滾的含義如圖1-23所示。

圖1-23 回滾和前滾

回滾和前滾的作用在下面的應用也會顯得特別有用,那就是測試新軟件。在安裝新的軟件包之前,為目標卷創建一個可寫的快照。然后將軟件安裝到快照卷,并在快照卷上測試和驗證軟件。如果測試發現問題,可以簡單地刪除快照,而不會影響到源卷。如果測試成功,可以回滾快照卷到源卷,在其上正式安裝軟件,也可以直接前滾到軟件已成功安裝的快照卷。

2.寫時轉向

寫時轉向技術和寫前復制技術類似,對源卷的寫操作被重定向到另一個位置。使用寫時轉向技術的典型產品是WAFL(Write Anywhere File Layout)文件系統,它使用了和很多傳統UNIX風格文件系統相同的基本數據結構。每個文件用一個inode來描述,其中包含了這個文件的元數據以及指向數據或間接塊的指針。對于小文件,inode直接指向數據塊。對于大文件,inode指向間接塊的樹。

這個樹發源于根inode,從它開始,沿著樹向下遍歷,找到任何數據和元數據。換句話說,只要能找到根inode,無所謂任何其他塊被分配在磁盤上哪個地方,這就是WAFL名字的來源——它的文件系統布局允許將數據寫到任何位置。

在寫一個塊到磁盤時(數據或元數據),WAFL從不覆蓋它的當前版本。相反,塊的新值被寫到磁盤上的未使用位置。因此,每次WAFL寫塊時,它必須同時更新指向該塊的老位置的任何塊(可能是inode或間接塊)。這些更新遞歸,生成了一條塊更新鏈,沿著塊向上一直到根inode。

理解WAFL文件系統是一棵以根inode為根的塊樹是理解快照的關鍵。圖1-24顯示了WAFL是如何創建新快照的,它僅僅簡單地創建了根inode的一個副本,它與原始根inode有完全相同的內容。這個復制的根inode代表快照文件系統的樹根,而原始根inode作為活動文件系統的樹根。通過只復制根inode,WAFL可以很快速,并且以最少磁盤消耗地創建快照。實際上,一個全新的文件系統快照不會消耗磁盤空間,除了用于快照根inode本身的磁盤空間以外。

圖1-24 寫時轉向

在活動文件系統的數據塊被修改時,它的內容被寫到新的位置,數據塊的父親必須被修改以指向它的新位置。反過來,父親的父親,也需要被修改以指向這個父親的新位置,依次類推,一直向上到達樹根。圖1-24中顯示了在用戶修改了數據塊A時的情況。WAFL寫新數據到磁盤上的塊A',同時改變活動文件系統指向這個新的數據塊。快照文件系統仍然指向原始的數據塊A,在磁盤上保持不變。

寫時轉向的優勢在于只有一個寫操作發生(利用寫前復制技術,要執行兩個寫操作:一次將原始數據復制到快照卷,另一次將新數據復制到源卷)。可是,使用寫時轉向,把生產文件系統的數據和快照的數據都放在一個卷上了,彼此犬牙交錯,因此,在快照被刪除時,來自快照文件系統的數據必須被調整回到原始文件系統。此外,在創建了多個快照時,對原始數據的訪問,對快照和源卷中數據的跟蹤,以及在快照刪除時的調整更為復雜。依賴于原始數據副本和原始數據集的快照很快就會變得非常脆弱。

3.拆分鏡像

拆分鏡像快照技術在快照時間點到來之前,首先要為源數據卷創建并維護一個完整的物理鏡像卷,這一過程與標準的RAID1相似:同一數據的兩個副本分別保存在由源數據卷和鏡像卷組成的鏡像對上。在快照時間點到來時,鏡像操作被停止,鏡像卷轉化為快照卷,獲得一份數據快照。快照卷在完成數據備份等應用后,將與源數據卷重新同步,重新成為鏡像卷。對于要同時保留多個時間點快照的源數據卷,則必須預先為其創建多個鏡像卷,拆分鏡像備份過程如圖1-25所示。

圖1-25 拆分鏡像備份過程

鏡像分裂快照雖然能夠在最短時間內生成完整的物理副本,但該技術缺乏靈活性,需要預先分配存儲資源,而且快照時間點前的鏡像操作將影響系統性能。

拆分鏡像快照的優點為:在快照命令發出之后立即就能得到一個完整的物理副本,不再需要額外的復制操作。快照操作的時間非常短,僅僅是斷開鏡像卷對所需的時間,通常只有幾毫秒,這樣小的“復制窗口”不會對上層應用造成影響。

但是拆分鏡像快照也存在一些缺點:首先,這種快照技術缺乏靈活性,無法在任意時刻為任意的數據卷建立快照;如果源數據卷沒有預先創建鏡像卷,則無法建立快照;當一個鏡像卷正處于重新同步狀態時,也無法用于建立快照。其次,預先創建鏡像卷占用了大量的存儲資源,并極有可能造成資源的浪費。最后,快照時間點之前持續的鏡像操作將會增加系統的開銷,尤其當一個源數據卷同時維持多個鏡像卷時。

EMC的TimeFinder是使用拆分鏡像實現方案的一個典型示例。TimeFinder采用了硬件和軟件相結合的實現思路,并引入了一種專門配置的設備類型,稱為業務持續卷(Business Continuance Volume,BCV)。和標準的主存儲設備一樣,每個業務持續卷可以有自己的設備地址,并可以配置成一個獨立的設備,并通過服務器來訪問。業務持續卷也可以和主存儲設備進行綁定,構成BCV對(BCV Pair),實現同步、恢復等目的。在綁定狀態下,業務持續卷不能被服務器訪問。

典型的BCV狀態包括創建、同步、分裂、重建、恢復、增量恢復。

? 創建:將業務持續卷綁定到主存儲設備,作為其一個鏡像設備,構成BCV對。這時BCV設備中不包含任何有效數據,并且BCV設備被置為離線狀態,不能被服務器訪問。

? 同步:在創建BCV對之后,需要將主存儲設備的內容同步到BCV設備上。可以通過查詢操作了解同步的狀態。在同步完成之后,BCV設備和主存儲設備的內容相同。

? 分裂:分裂BCV對將解除業務持續卷和主存儲設備的綁定。這時,業務持續卷重新賦予一個獨立、有效的設備地址,服務器可以通過這個地址來訪問之,而主存儲設備不會受到任何影響。業務持續卷的內容是主存儲設備在分裂命令執行時刻的即時復制。

? 重建:在重建操作中,業務持續卷和它最初的主存儲設備被重新綁定到一起,構成BCV對。這個操作將在拆分該BCV對后對主存儲設備所做的修改更新到業務持續卷上,并丟棄對BCV卷所做的修改。這樣可以使得BCV對快速達到同步狀態。

? 恢復:恢復操作將業務持續卷綁定到主存儲設備,構成BCV對,將業務持續卷的內容復制到主存儲設備中。在恢復完成之后,主存儲設備和業務持續卷設備的內容相同。

? 增量恢復:在增量恢復操作中,業務持續卷和它最初的主存儲設備被重新綁定到一起,構成BCV對。和恢復操作不同的是,這個操作只是將對BCV卷所作的修改更新到主存儲設備上,并丟棄在拆分該BCV對后對主存儲設備所作的修改。如果BCV卷沒有修改,則這個操作和恢復操作相同,將主存儲設備回滾到過去的狀態。

需要注意的是,重建BCV對和增量恢復BCV卷都需要將對主存儲設備或業務持續卷的寫操作記錄下來。如果寫操作沒有被記錄,或者記錄寫的空間耗盡,那么必須復制整個映像以實現重新同步。

4.快照一致性

在存儲網絡環境下,需要面對快照的一致性問題。存儲空間被分配給應用服務器,應用程序將數據寫到存儲設備上。如果在對存儲設備執行數據塊級別的快照時,應用程序數據可能處于兩個“一致性”狀態的中間,其結果是產生了一個“數據不一致”的快照。這種情況也常常出現在應用服務器的操作系統支持緩存的時候。即使在同一個系統中,如果不采取這種協調機制,底層執行快照操作也可能產生對上層應用來說是“不一致”的數據。例如,如果文件系統不在一致狀態,這時在邏輯卷級進行快照會出現問題。

因此,在做快照之前,應用程序必須將所有在緩存中的數據沖刷到磁盤。不同的系統采用不同的方法來解決這個問題,圖1-26闡述了其中的一種。在應用服務器配有一個快照代理,在快照執行進程需要對存儲設備作快照時,首先發送一個“準備快照”的通知給快照代理。快照代理接收到后,向應用程序緩存管理發送“停止寫并刷新緩存”的消息,然后在應用服務器上的緩存將會被沖刷到存儲設備。最終,快照代理從應用程序緩存管理收到“緩存已刷新”的回復,進而向快照執行進程發送消息,報告“快照準備完畢”。

圖1-26 做快照時刷新應用程序緩存

1.2.3 連續數據保護技術

連續數據保護(Continuous Data Protection,CDP)是一種連續捕獲和保存數據變化,將變化后的數據獨立于原始數據進行保存,以便在必要時將數據恢復到之前的任意時間點的方法。根據定義,所有連續數據快照解決方案都應該具備以下幾個基本的特性:

? 數據的改變受到連續的捕獲與跟蹤;

? 所有的數據改變都存儲在一個與主存儲地點不同的獨立地點中;

? 恢復點目標是任意的,而且不需要在實際恢復之前事先定義。

連續數據快照可應用于一個實時的數據備份系統,提供更快的數據檢索、更強的數據保護和更高的業務連續性能力。它的關鍵是將每一個應用數據的變化加上時間索引,也就是說,“快照”的動作在每個時間點上進行。因為所有數據變化都被實時地記錄下來,當出現數據丟失、數據損壞、或者安全問題時,就可能恢復到最近的完好數據。連續數據保護范例如圖1-27所示。

圖1-27 連續數據保護范例

在圖1-27中,有五個數據塊,其初始內容為A、B、C、D、E。在3:35:50(三時三十五分五十秒),第二個數據塊和第四個數據塊的內容被修改為X和Y,其修改前的內容被記錄在快照中,連同修改的時間戳。然后在3:35:51,第一個數據塊和第二個數據塊的內容被修改為2和6,其修改前的內容以及時間戳被記錄在快照中。依次類推,在3:35:55秒,第四個數據塊和第五個數據塊的內容被修改,其修改前的內容h、7以及時間戳被記錄在快照中。

可以看到,在最后一次修改中,新的內容被標記為,這是一次不成功的修改,它可能是人工誤操作或者病毒入侵的結果,直接導致了業務數據內容被破壞。

恢復過程是一個逆過程,例如要恢復3:35:54的內容,從快照中找到對應的修改,即第四塊的內容h和第五塊的內容7,將它們導回到3:35:55的數據塊,即覆蓋數據塊中的錯誤內容。同樣,以3:35:54的數據塊內容為基礎,根據快照中3:35:53的修改,可以得到3:35:53時刻的數據。依次類推,最終可以恢復出所有五個數據塊的初始內容集。

也可以直接恢復某個時間點的數據。假設當前時間點為3:35:55,要求恢復到時間點3:35:52。遍歷快照,發現第一個數據塊在此期間,只有過一次修改,發生在3:35:53,修改之前的內容為2,用它覆寫內容集中的當前值t。同樣第四個數據塊的內容在3:35:54修改時保存的值h覆寫內容集中的當前值。對于第二個和第三個數據塊,沒有被修改過,保存當前的內容不變。最關鍵的是第五個數據塊,它有兩次修改,分別發生在3:35:52和3:35:54,取最早一次的修改,或者說離恢復點最近的修改,將修改時保存在快照中的數據(為E)覆寫內容集中的當前值。最終所有數據塊處理完畢,則3:35:52時間點的數據也就被正確地恢復出來了。

Linux CDP是內核中基于塊的連續數據保護模塊,這個模塊在數據塊級別提供連續數據保護能力。連續數據保護是一種備份和恢復技術,它持續地捕獲所有I/O請求,并且為這些請求打上時間戳標志。它將數據變化以及時間戳保存下來,以便恢復到過去的任意時刻。因此,這個模塊支持數據的任意時刻映像。在Linux CDP實現中,涉及三個設備:主機磁盤(Host Disk)設備、CDP倉庫(Repository)設備和CDP元數據(Metadata)設備。

對主機磁盤設備數據塊在各個時刻所做的寫操作都被記錄下來,被順序保存到CDP倉庫設備中,同時對應的元數據也被保存在CDP元數據設備中。元數據包括以下信息:數據塊被寫入主機磁盤設備的時間、數據塊的以字節為單位的長度、倉庫設備中對應數據塊的起始扇區編號,以及數據塊在主機磁盤設備中的起始扇區編號。

對主機磁盤設備的寫請求被分解為三個過程:

? 將原始數據塊的內容寫到CDP倉庫設備的快照數據塊中;

? 將元數據(原始數據塊的內容、快照數據塊的編號以及寫請求時間)寫到CDP元數據設備中;

? 將更新的內容寫到主機磁盤設備上的原始數據塊中。

恢復過程是用戶空間通過ioctl來執行的,調用時指定要恢復的時間點:

? 順序讀取CDP元數據設備的所有扇區,構造一個從主機磁盤設備數據塊到CDP倉庫設備的(在這個時間點之前)更新數據塊的映射,其結果保存在一個映射鏈表中;

? 根據映射鏈表從CDP倉庫設備中讀取更新的數據塊,構造一個數據更新鏈表;

? 將數據更新鏈表中的數據塊都恢復到主機磁盤設備中。

當然上面只是關于CDP技術原理的一個闡述,實際上CDP產品要解決很多的問題:如何節省保存數據修改的空間、如何提升寫及恢復的性能,以及如何向用戶提供更友好的使用界面和部署體驗等。市場上有很多成熟的CDP產品。從基本單元上講,有的是基于塊級的CDP產品,有的是基于文件級的,它們的基本原理都是“寫前復制+時間戳”,只不過一個是在塊級的復制,一個是在文件級的復制。從數據路徑上看,一類是“帶外(Out of Bound)”產品,即快照的產生獨立于業務操作請求,另一類則是“帶內(Inband)”的產品,帶內CDP產品對主機透明,但會影響存儲的輸入、輸出性能;而帶外CDP產品則需要在主機上安裝代理或者其他的設置,容易同應用更緊密地結合。此外,從表現形式來看,有些CDP產品是純軟件,被安裝在主機上運行,而另一類則為硬件產品(存儲設備)。

1.2.4 RAID技術

1988年6月,在ACM的一個國際會議上,美國加州大學伯克利分校的Patterson、Gibson和Katz發表了一篇文章,最先提出RAID的概念。RAID的本意是“廉價磁盤冗余陣列”。當時高端計算機系統采用的都是昂貴的單個大容量磁盤,但是伯克利的學者們認為應該可以用小的廉價磁盤組成的陣列來代替。

在這之后,RAID技術獲得了迅速發展。隨著應用的普及,RAID開始進入了企業級市場,因此RAID咨詢委員會(RAID Advisory Board)將RAID中的字母I從Inexpensive改成Independent,RAID就成為“獨立冗余磁盤陣列”的簡稱。

使用RAID的目的在于:

? 將若干個磁盤組成一個大的邏輯磁盤來使用,提高單個邏輯盤的容量;

? 在處理I/O請求時對磁盤進行并發訪問,實現高的吞吐率;

? 對磁盤上的數據實行冗余存放,實現容錯功能;

? 相對于達到同樣容量的吞吐率的單個磁盤,價格低廉。

根據RAID對磁盤的組織方式的不同,RAID分為不同的級別。最初提出5種基本RAID級別是RAID1/ RAID2/RAID3/RAID4/RAID5,后來,添加兩種不提供冗余的Linear RAID和RAID0,以及支持雙磁盤容錯的RAID6,此外,一些廠商也將不同級別的RAID組合起來,提升性能和可靠性,形成了各種組合RAID。這些分類方法和術語已被廣泛接受,也為本文所沿用。

1.條帶化模型

在傳統的數據存儲方案中,每個磁盤獨立編址,而RAID對所有成員磁盤統一編址,并采取了一種特殊的“條帶化(Striping)”方案。每個成員磁盤的存儲空間被劃分為相等大小的“條帶(Stripe)”,每一個這樣的條帶都被稱為“條帶單元(Stripe Unit)”,同時,寫到RAID中的數據信息也被分為若干個相等大小的“條帶”。這些邏輯上連續的數據信息條帶依照一定的映射方式交叉存儲到不同物理磁盤的存儲空間條帶中。條帶化模型的圖示如圖1-28所示。

圖1-28 條帶化模型

條帶大致分為兩種:細粒度條帶和粗粒度條帶。在細粒度條帶中,條帶單元的尺寸很小,通常為1位或者是1字節,任何I/O請求都需要訪問陣列中的所有磁盤,雖然可以獲得很高的數據傳輸率,但在同一時刻只能為一個I/O請求服務。而采用粗粒度條帶的磁盤陣列,條帶單元較大,以扇區或者塊為單位,小的I/O請求只訪問一部分磁盤,大的I/O請求才訪問所有的磁盤,因此既能為小請求提供并行服務,同時也能夠為大請求提供傳輸速率。

條帶單元可以用來存儲不同的信息:如果存儲的是用戶數據,稱為“數據單元(Data Unit)”;如果用來存儲冗余校驗數據,稱為“校驗單元(Parity Unit)”。數據單元和校驗單元統稱“信息單元(Information Unit)”,這是和閑置不用的條帶單元,即“備用單元(Spare Unit)”相對應的。而備用單元是準備在信息單元故障時,用來保存信息單元的數據的。

在包含了容錯機制的RAID中,若干個數據單元以及由這些數據單元通過校驗計算得到的一個或若干個校驗單元所組成的集合,稱為“校驗組(Parity Group)”。校驗組是基于校驗計算角度提出的概念,某些RAID的校驗組中包含多個數據單元和一個校驗單元,而另一些RAID的校驗組可能包含多個數據單元和多個校驗單元。

計算校驗單元的算法可以是簡單的異或算法,也可能是如Hamming或者Reed-Solomon的編碼算法。校驗單元在磁盤陣列中的散布方式可分為兩類:一類是集中于一個或若干個校驗盤;另一類是均勻分布到不同的磁盤上。數據單元、校驗單元和備用單元的不同散布方式,構成了RAID的特殊物理布局。

對RAID物理布局的分析通常以“校驗條帶(Parity Stripe)”為基礎。校驗條帶是從容錯角度提出的概念,是指能夠實現某種容錯能力的若干個條帶單元的集合。換句話說,校驗條帶是最小的自保護的條帶單元集合。假設容許k個故障,則條帶中丟失任何k個單元均可由其他單元恢復。在傳統的容單磁盤錯的陣列中,校驗條帶和校驗組是一致的。而在容多個并發磁盤錯的陣列中,校驗條帶根據編碼方式的不同,有可能包含多個校驗組。

本節介紹幾種基本的RAID級別,包括Linear RAID、RAID0、RAID1、RAID2、RAID3、RAID4、RAID5和RAID6。對于每種RAID,我們將從容量、性能和容錯方面進行闡述。本節中的存儲空間利用率(或稱存儲效率)為所有數據磁盤(不包含校驗磁盤)有效容量對所有磁盤(包含校驗磁盤)有效容量的比率。

2.線性RAID

線性RAID將多個物理磁盤順序串聯成一個邏輯磁盤。在寫線性RAID時,首先寫第一個磁盤,寫滿后接著寫第二個磁盤,依次類推。因此線性RAID稱為“線性”(Linear)或“追加”(Appended)模式。

線性RAID由至少一個成員磁盤組成,組成線性RAID的磁盤并不需要有相同的容量,線性RAID的容量為所有成員磁盤的容量之和,存儲空間利用率為100%。

在線性RAID中,對單個讀/寫而言,性能并沒有改進,它完全決定于對應成員磁盤的讀/寫性能。但是,如果同時有多個用戶在使用線性RAID設備,并且碰巧第一個用戶在訪問第一個成員磁盤上的數據,而第二個用戶在訪問第二個成員磁盤上的數據,這時性能就“提高”了。

線性RAID不提供數據冗余。如果一個成員磁盤故障,則將損失其上的所有數據。可是也有可能恢復線性RAID上的某些數據,因為對文件系統而言,只是出了一個大的數據“漏洞”,在該“漏洞”影響范圍之外的數據還是可以恢復的。

3.RAID0

從RAID0開始,采用了“條帶化”的思想。寫到邏輯陣列的數據被分成多個條帶,依次被重定位到各個物理磁盤上,當最后一個磁盤寫好之后,又從第一個磁盤開始順序寫。因此RAID0也稱為“條帶”(Striped)模式。布局如圖1-29所示。

RAID0由至少兩個成員磁盤組成,各個磁盤理論上并不一定具有相同的存儲容量,RAID0的容量為所有成員磁盤的容量之和,存儲空間利用率為100%。

通過在各成員磁盤之間并行讀/寫,RAID0極大地提高了I/O性能。如果不考慮控制器和總線帶寬的因素,則由n個相同磁盤構成的RAID0能提供幾乎n倍的讀/寫性能。

RAID0不提供數據冗余。只要其中一個磁盤出了問題,那么整個陣列的數據都會不保了。因為對文件系統而言,這時出現了大量小的數據“漏洞”,其影響甚大,足以使得整個陣列崩潰。從這一點來說,要比線性RAID更嚴重。

4.RAID1

從技術上講,線性RAID和RAID0都不是RAID,因為RAID代表“廉價(獨立)磁盤冗余陣列”,而線性RAID和RAID0都不提供任何類型的數據冗余。第一種傳統意義上(提供數據冗余)的RAID是RAID1,寫到RAID1的數據被分成多個條帶,這些條帶同時寫到組成的所有成員磁盤中。RAID1成員磁盤互為鏡像,因此RAID1稱為“鏡像”(Mirror)模式,布局如圖1-30所示。

圖1-29 RAID0布局

圖1-30 RAID1布局

RAID1至少由兩個成員磁盤組成。組成RAID1的成員磁盤應該具有相同的容量,否則其容量決定于容量最小的成員磁盤。對于由n個相同容量的成員磁盤組成的RAID1,其容量等于單個成員磁盤的容量,存儲空間利用率為

隨著成員磁盤的增加,對RAID1的寫操作性能下降,因為每個寫操作需要等待對所有成員磁盤的寫操作執行成功。但是,由于可以從成員磁盤上并行讀取數據,RAID1的讀操作性能顯著提升。事實上,大多數實現是采用負載均衡技術來優化RAID1讀操作性能的。

RAID1提供數據冗余。因為每個成員磁盤都保存了數據的一個副本,因此只要有一個成員磁盤正常,數據就得以保存。也就是說,由n個成員磁盤組成的RAID1可以容許n-1個成員磁盤同時故障。

同其他提供輸入冗余的RAID級別一樣,RAID1分為三種狀態:正常狀態、降級狀態和同步狀態。圖1-31反映了在正常狀態和降級狀態下的讀/寫情況。

圖1-31 RAID1在正常和降級狀態下的讀/寫操作

5.RAID2

RAID2系統將數據按照位或者字節進行分割,并寫到陣列中的數據磁盤中,同時根據Hamming算法計算糾錯碼保存在其他磁盤中,因此,RAID2也稱為“采用位(字節)交叉訪問及Hamming碼校驗”的模式,布局如圖1-32所示。

圖1-32 RAID2布局

在RAID2中,所有數據磁盤和校驗磁盤應該具有相同的容量。校驗磁盤的數目正比于以2為底、磁盤總數的LOG值,隨著數據磁盤數目的增長,存儲效率也得到提升。

RAID2提供數據冗余。使用多個校驗磁盤的目的是定位故障磁盤,一旦定位好,只需要一個校驗磁盤即可恢復故障磁盤中的數據。RAID2主要在RAID早期使用。如今的磁盤包含精確電路實現錯誤檢測和糾正,并且定義復雜的協議和外部進行通信,陣列控制器可以從磁盤的狀態信息,或者它們是否遵照通信協議直接識別出故障磁盤。這樣,就沒有必要通過額外的冗余磁盤來檢測故障磁盤,因此RAID2幾乎不再實際使用了。

6.RAID3

在RAID2,去掉多余的校驗磁盤,這種改進的結果就是RAID3。RAID3系統將數據按照位或者字節進行分割,寫到陣列的數據磁盤中,同時將對應的奇偶校驗值寫入專門的校驗磁盤。RAID3被稱為“采用位(字節)交叉訪問及專用奇偶校驗磁盤”的模式,布局如圖1-33所示。

圖1-33 RAID3布局

組成RAID3的數據磁盤和校驗磁盤應該具有相同的容量。對于由n個相同容量的成員磁盤組成的RAID3,其容量等于n-1個成員磁盤的容量,存儲空間利用率為

由于RAID3中條帶劃分較小,使得每個讀請求訪問所有的數據磁盤,每個寫請求訪問所有的數據磁盤以及校驗磁盤。RAID3經常處于磁頭同步狀態以減少等待時間,RAID3適于單一大文件以高數據率進行讀/寫的應用,對于多用戶并發發起眾多互不相關磁盤操作的應用則不適宜。

RAID3實現了單盤容錯冗余。當一個硬盤發生故障,除故障盤外,寫操作將繼續對數據盤和校驗盤進行操作,而讀操作是通過對剩余數據盤和校驗盤的異或計算重構故障盤上應有的數據來進行的。圖1-34反映了在正常狀態和降級狀態下的讀/寫情況。

圖1-34 RAID3在正常和降級狀態下的讀/寫操作

7.RAID4

與RAID3相似,區別是:RAID3是按位或字節交叉存取,而RAID4是按塊(扇區)存取,因此RAID4被稱為“采用塊交叉訪問和專用奇偶校驗磁盤”的模式,布局如圖1-35所示。

同RAID3一樣,組成RAID4的數據磁盤和校驗磁盤應該具有相同的容量。對于由n個相同容量的成員磁盤組成的RAID4,其容量等于n-1個成員磁盤的容量,存儲空間利用率為

圖1-35 RAID4布局

RAID4中的每一個數據盤都可以同時滿足一個單獨用戶的請求,無須像RAID3那樣,哪怕每一次小I/O操作也要涉及全組。正常情況下,讀操作只涉及數據盤,而寫操作涉及一個數據盤和一個校驗盤。但是,對于隨機分散的小數據量I/O,固定的校驗盤又成為I/O瓶頸,每次寫都要對校驗盤操作,所以發生爭用校驗盤的問題。

RAID4實現了單盤容錯,在正常狀態和降級狀態下的讀/寫操作過程,和后面要介紹的RAID5類似。

假設數據單元標號為chunk_number,RAID磁盤數為raid_disks,數據盤數為data_disks,所在條帶編號為stripe=chunk_number/data_disks。

然后計算在條帶內的數據磁盤和校驗磁盤編號。對于RAID4,校驗盤編號為data_disks,數據盤編號為chunk_number%data_disks。

8.RAID5

RAID5與RAID4類似,但與RAID4擁有獨立校驗磁盤不同,RAID5是在陣列中所有磁盤上存儲校驗信息。RAID5的主要優勢在于它可以防止校驗磁盤本身成為讀/寫瓶頸。因此RAID5也被稱為“采用塊交叉訪問及校驗信息均勻分布”的模式,布局如圖1-36所示。

圖1-36 RAID5布局

因為校驗磁盤中只包含校驗信息,而不包含數據,校驗磁盤不參與讀過程,使得讀性能比將數據和校驗分布到所有磁盤上的冗余方案稍低。

假設有n個數據磁盤D0、D1、…、Dn-1,計算:

P是通常的XOR校驗。

如果任意一個磁盤損壞,可以通過XOR校驗從其他磁盤恢復這個失效的磁盤,即有

校驗分布算法

RAID5的校驗分布算法有:向左非對稱、向右非對稱、向左對稱和向右對稱,如圖1-37所示。基本上,左/右是指校驗信息如何分布,而對稱/非對稱是指數據如何分布。“左”算法中,校驗從最后一個磁盤開始,每一個條帶將校驗向靠近第一個磁盤的方向移動一個磁盤的位置(必要時重繞)。而“右”算法則相反,其校驗從第一個磁盤開始,每一個條帶將校驗向靠近最后一個磁盤的方向移動一個磁盤的位置(必要時重繞)。“非對稱”算法將給定條帶的數據塊按簡單的順序方式放置,必要時跳過條帶,并且總是從第一個磁盤上的第一個條帶的數據塊開始。與之不同的是,“對稱”算法并不是將條帶的第一個塊放在第一個磁盤上,而是連續將數據塊按順序磁盤序列的方式分布,只是在必要時重繞回第一個磁盤。因此對稱算法對于大量順序讀操作有更好的性能,例如,因為實際讀磁盤是均勻跨多個磁盤的。

圖1-37 RAID5校驗分布算法

讀/寫操作

RAID5在正常和降級狀態下的讀操作,如圖1-38所示。

圖1-38 RAID5在正常和降級狀態下的讀操作

正常讀:如果要讀取的磁盤正常(不管是否有一個其他磁盤發生故障),我們直接從包含數據的條帶中讀取。

降級讀:如果要讀取的磁盤故障,而其他磁盤均正常,則從陣列中除故障磁盤之外的所有磁盤上讀取對應條帶的數據,進行異或,即為故障磁盤上要讀取的數據。

在正常情況下,RAID5的寫操作分為三種類型,如圖1-39所示。

圖1-39 RAID5在正常狀態下的寫操作

? 整條寫(Full-stripe Write):整條寫需要修改奇偶校驗群組中所有的條帶單元,因此新的奇偶校驗值可以根據所有新的條帶數據計算得到。例如,在圖1-39中,同時寫條帶0、條帶1、條帶2和條帶3將導致完整條帶寫,直接根據這些條帶計算奇偶校驗值,不需要額外的讀/寫操作。因此,整條寫是最有效的寫類型。

? 重構寫(Reconstruct Write):在正常情況下,如果要寫入的磁盤數目超過陣列磁盤數目的一半,采取重構寫方式。在重構寫中,從不需要修改的條帶上讀取數據,再和需要修改的條帶上的新數據計算奇偶校驗值,并將新的條帶數據和新的奇偶校驗值一并寫入。例如,在圖1-39中,同時寫條帶0、條帶1、條帶2將導致重構寫。磁盤陣列軟件將首先讀取條帶3的數據,再和條帶0、1、2的新數據一起計算校驗值。顯然,重構寫要涉及更多的I/O操作,因此效率比整條寫低。

? 讀改寫(Read-Modify Write):在正常情況下,如果要寫入的磁盤數目不足陣列磁盤數目的一半,采取讀改寫方式。讀改寫過程如下:(1)從需要修改的條帶上讀取舊的數據;(2)從條帶上讀取舊的奇偶校驗值;(3)根據舊數據、舊奇偶校驗值和需要修改的條帶上的新數據計算新的奇偶校驗值;(4)寫入新的數據和新的奇偶校驗值。這個過程中包含讀取、修改、寫入的一個循環周期,因此稱為讀改寫。例如,在圖1-39中,寫條帶0將產生讀改寫:磁盤陣列軟件首先讀取條帶0以及校驗0~3的舊值,再和條帶0的新值一道計算新的奇偶校驗值。讀改寫要讀取舊的數據和舊的奇偶校驗值,故效率比整條寫低。

在有的文獻中,將讀改寫也稱為小寫(Small Write),而將重構寫稱為大寫(Large Write)。在這里,大和小表示I/O請求數相對于在奇偶校驗組中條帶單元的多少。正常情況進行非整條寫時,讀改寫和重改寫是兩種可能的方案,系統會根據實際情況,選擇合適的方法,使得I/O總數目達到最小。

如圖1-40所示,在降級情況下,如果要寫入的數據磁盤出現故障,可采用類似于重構寫的方式,從其他磁盤上讀取對應條帶的數據和舊的校驗值,并計算新的校驗值,寫入校驗盤中。唯一不同之處在于:故障磁盤略過不寫。

圖1-40 RAID5在降級狀態下的寫操作

在某個非目標盤的數據磁盤故障情況下,總是采用讀改寫的方式,從要寫入的磁盤和校驗盤上讀取舊的數據,和新的磁盤數據進行異或,計算新的校驗值,然后寫入新的數據和新的校驗值。

如果校驗盤損壞,我們直接寫入要修改的磁盤。

9.RAID6

傳統的單一奇偶校驗RAID技術,能為單個故障磁盤驅動器提供保護。需要警告的是,它無法恢復兩個磁盤同時故障的情況,并且在重構故障磁盤時也必須確保不發生其他磁盤故障,如果出現上面任何一種事件,那么保留在RAID陣列中的部分或所有數據就可能會丟失。應用需要更高一級的RAID數據保護,RAID6便應運而生。

RAID6提供雙磁盤冗余,即陣列中的兩個磁盤失效時,陣列仍然能夠繼續工作。根據所應用的計算方法以及計算對象的不同,可以將RAID6的實現分為兩大類:一維冗余(One Dimensional Redundancy)和二維冗余(Two Dimensional Redundancy)。在一維冗余中,對相同的數據單元集采用兩種不同的校驗計算方法,當出現兩個磁盤故障時,這兩種計算方法可以保證從現存信息中解出具有兩個未知數的方程式,從而恢復故障磁盤中的信息。而在二維冗余中,只采用一種校驗計算方法,但是應用到不同的數據單元集合上,靈活地設計方程式組,并能夠從中求解具有最多兩個未知數。

(1)RAID 6的一維冗余

Iceberg RAID、HP RAID ADG和Linux RAID6采用一維冗余技術。通常用P和Q來表示一維冗余中的校驗數據計算方法,因此一維冗余也被稱為P+Q方法。RAID6的P+Q方案如圖1-41所示。

圖1-41 RAID6的P+Q方案

假設有n個數據單元D0、D1、…、Dn-1,P可以采用通常的XOR校驗計算,而Q則采用Reed Solomon編碼形式的校驗,則有:

其中g是域生成子(使用g={02})。

如果任意一個磁盤損壞,通過P校驗從其他磁盤恢復這個失效的磁盤,這和RAID5的原理相同。

如果損失的是校驗數據,只需根據上述公式重新計算即可。

如果損失的是數據和Q校驗值,可以通過P校驗先計算出數據,然后再根據公式2計算得到Q校驗值。

如果損失的是數據和P校驗值,可以通過Reed Solomon編碼形式的Q校驗先計算出數據,然后再根據公式1計算得到P校驗值。假設丟失的是數據單元,具體計算過程是:

假設,根據公式2計算

,計算得到

如果損失的是兩個數據值,例如條帶,將這些值設置為0,根據公式①和②計算,注意到:

根據上述方程式計算得到

(2)RAID 6的二維冗余

二維冗余基于這樣一個概念:陣列可以邏輯地以矩陣的行和列安排。因此,數據的排列以行和列來表示,校驗數據可作為陣列空間的正交矢量來計算。為了實現這個方法,每一個數據分塊都屬于兩個正交(分離和獨立)的條帶,不存在將陣列中任何其他條帶寫入相同校驗位置的可能性。

? 2nd-Parity

2nd-Parity方法將數據磁盤組織成矩陣,有m個磁盤用于水平方向n個數據磁盤的校驗計算,n個磁盤用于垂直方向m個數據磁盤的校驗計算。

校驗計算方程式組如下:

如果同一行的兩個磁盤出現故障,可以通過列校驗盤恢復這兩個磁盤中的數據;或者在通過列校驗盤恢復了其中一個磁盤的數據之后,再通過行校驗盤恢復另一個磁盤中的數據。

如果同一列的兩個磁盤出現故障,可以通過行校驗盤恢復這兩個磁盤中的數據;或者在通過行校驗盤恢復了其中一個磁盤的數據之后,再通過列校驗盤恢復另一個磁盤中的數據。

如果出現故障的兩個磁盤分屬于不同行和不同列,這時任意選擇行校驗盤或列校驗盤來分別恢復這兩個磁盤中的數據。

從另一個角度來看,這種恢復的靈活性反映了冗余信息的“冗余性”。實際上,在這種方案中,冗余率高達,而存儲空間利用率僅為,因此,矩陣方案并不實用,更多地是作為一種理論上的闡述。

? EVEN-ODD

在上面的方法中,采用了兩種類型的冗余:水平冗余(Horizontal Redundancy)和垂直冗余(Vertical Redundancy)。另一種巧妙的設計是使用水平冗余和對角冗余(Diagonal Redundancy)來設計方程式組。在這一部分,采用了正對角冗余;而在后面例子中,采用了反對角冗余方法。讀者可以根據這一思路采用水平冗余、正對角冗余和反對角冗余設計容許三個磁盤故障的容錯方案。

用EVEN-ODD編碼構造的雙容錯磁盤陣列可看作維矩陣,如圖1-42所示,其中為素數。矩陣每一列對應一個磁盤,共個磁盤,前個磁盤存放數據信息,后兩個磁盤存儲水平校驗和對角校驗信息,每個磁盤均含有個條帶單元。水平校驗計算如下:

圖1-42 RAID6的EVEN-ODD方案中水平校驗計算

如圖1-43所示,對角校驗計算如下:

其中

圖1-43 RAID6的EVEN-ODD方案中對角校驗計算

對角冗余有兩種可能性:校驗位可能為偶數或奇數。其奇偶性取決于等式中的S,而S給出了對角、...、的校驗值。觀察無窮號(∞)表示的條帶所在的對角線,如果這個對角有偶數個1,那么在計算對角冗余時的校驗值為0(EVEN);否則,校驗值為1(ODD),這就是EVEN-ODD方案的原因。

上面定義的矩陣可以恢復任意兩列丟失的信息。假設,有兩個磁盤損壞(磁盤i和磁盤j),其中0≤i<j≤m+1,這里可分為四種情況:

?,即兩個校驗磁盤失效,我們可以從上述等式重新計算校驗值;

?,一個數據磁盤和水平冗余磁盤損壞,我們可以通過對角校驗先計算出數據,然后再計算得到水平冗余校驗值。計算數據磁盤i的步驟如下:

其中,我們假設,對于0≤l≤m+1,然后,我們有

,對于所有的0≤k≤m-2

?,一個數據磁盤和對角冗余磁盤損壞,我們可以通過水平校驗先計算出數據,然后再計算得到對角冗余校驗值;

?并且,兩個數據磁盤損壞,

同樣,對于0≤l≤m+1,假設,我們計算對角校驗值如下:

,即S是水平校驗和對角校驗數據的異或值。

對于0≤u≤m-1,計算水平Syndrome和對角Syndrome如下:

注意到,其中表示x模m的值。

利用RAID6的EVEN-ODD恢復兩個數據磁盤故障如圖1-44所示,具體的恢復思路如下:在最后添加一行條帶并清零()。根據損壞的磁盤編號i和j(),計算得到步長為。設置開始恢復的當前指示值s為,依次恢復磁盤j和磁盤i對應于s的條帶:,隨后根據步長修改當前指示值s,使。如此循環,直至時結束。

圖1-44 利用RAID6的EVEN-ODD算法恢復兩個數據磁盤故障

? NetApp Dual DP

如果讀者對理解上面的計算方法有困難的話,可以通過NetApp Dual DP的一個具體數據恢復實例來理解。

從DATAONTAP 6.5版開始,NetApp推出了雙校驗RAID,叫做RAID DP(Dual Protection,雙磁盤保護)。本文給出RAID DP的雙磁盤故障恢復過程,說明RAID DP如何做到既能不間斷地提供數據訪問,又能同時對兩塊故障磁盤上損失的數據進行重建。

在本質上,RAID DP基于傳統的RAID4技術,并采用兩個固定的校驗磁盤:水平校驗磁盤和對角校驗磁盤。水平校驗磁盤對RAID DP中的數據磁盤處于同一水平方向條帶的奇偶校驗值進行存儲,而對角校驗磁盤則對RAID DP中的數據磁盤和水平校驗磁盤在處于對角線方向條帶的奇偶校驗值進行存儲。通過這兩種奇偶校驗條帶,即使RAID DP中有兩個磁盤發生故障,也能得到數據保護。

RAID DP的實現思路類似于EVEN-OLD,只是由于RAID DP將水平校驗磁盤納入到對角奇偶校驗值的計算當中,因此它將磁盤的條帶劃分為的矩陣(m為素數),而不是像EVEN-OLD中那樣的矩陣。

在RAID DP中,仍然使用了傳統的RAID4水平奇偶校驗結構,并且這種結構已成為RAID DP結構的子集。實際上,如果是單一磁盤故障,或是從壞數據塊中的讀取錯誤,或者出現誤碼,那么RAID4的行奇偶校驗方法就是進行數據恢復的唯一手段,無需采用RAID DP。在這種情況下,RAID DP的對角線奇偶校驗組件僅僅是行奇偶校驗組件周圍的保護層。

圖1-45給出了在m為5時RAID DP的條帶化模型,以及各個條帶在某時刻的數據“快照”。第一列至第四列對應四個數據磁盤,第五列為水平校驗磁盤,其數據由各行的數據磁盤計算得到,例如第一行為11。第六列為對角校驗磁盤,其數據由同一對角線上數據磁盤和水平校驗磁盤計算得到,例如純灰色對角=01。

假設這時有兩個數據磁盤(磁盤1和磁盤2)損壞,反映在圖1-46中,第一、二列中的所有數據都丟失了,用黑色圓圈標志。

RAID DP首先會尋找一個鏈來開始重建。務必記住,當在RAID4下為單一磁盤故障重建數據時,只有在丟失的元素不超過一個時,重建才有可能。記住這一點后,我們可以看到,圖1-46正斜線()表示的條帶所在的對角線上只丟失了五個塊中的一個(磁盤2的正斜線條帶),借助于仍然存在的四個條帶,可以重建丟失塊中的數據(=01)。接下來的圖1-47反映了這個數據被恢復到備用磁盤上的情況。

圖1-45 RAID6恢復實例——正常布局

圖1-46 RAID6恢復實例——磁盤故障

圖1-47 RAID6恢復實例——第一輪

在恢復了磁盤2正斜線條帶的數據后,我們可以看到第一行所在的水平方向上五個數據有了四個,恢復過程從對角奇偶校驗轉換至使用水平奇偶校驗,即利用第五列水平校驗磁盤來恢復第一行丟失的條帶。圖1-47表明磁盤1純灰色()條帶的數據已經被恢復到備用磁盤上(=11)。

無論是水平奇偶校驗,還是對角奇偶校驗,數據重建均使用XOR算法。下面的圖1-48依次從對角方向和水平方向恢復了磁盤2純灰色條帶(=01)和磁盤1純白色()條帶(=01)。

圖1-48 RAID6恢復實例——第二輪

這時,似乎問題出現了。與我們前面所注意到的一樣,對角校驗磁盤并沒有存儲純白色對角方向的奇偶校驗數據,當前鏈中沒有額外的條帶來重建磁盤2的純白色條帶。RAID DP將開始尋找新的鏈以開始重建,這時找到反斜線()表示的條帶所在的對角線,利用現存的其余四個條帶恢復出磁盤1反斜線條帶(00=01),如圖1-49所示。

圖1-49 RAID6恢復實例——第三輪

之后的恢復過程類似于前面,RAID DP依次從水平校驗磁盤重建出磁盤2的交斜線()條帶(=01)(如圖1-50所示),接著從對角校驗磁盤重建出磁盤1的交斜線條帶(=10),最后又從水平校驗磁盤重建出磁盤2的純白色條帶(=11)(如圖1-51所示),至此,所有黑色圓圈中的數據都被重建了,RAID DP又回到正常狀態,如圖1-52所示。

圖1-50 RAID6恢復實例——第四輪

圖1-51 RAID6恢復實例——第五輪

圖1-52 RAID6恢復實例——回到正常狀態

同樣,我們可以利用這個實例理解RAID DP在損壞一個數據磁盤和水平校驗磁盤、一個數據磁盤和對角校驗磁盤,以及水平校驗磁盤和對角校驗磁盤后的數據重建過程。

? DH1和DH2

DH1和DH2編碼的對角校驗比EVEN-ODD編碼簡單,并且校驗信息不再存儲于固定校驗磁盤,而是均勻散布于整個磁盤陣列上,因此,不會因頻繁小寫操作而導致出現校驗盤的瓶頸問題。

DH1的校驗條帶是的單元矩陣,水平校驗存儲于矩陣對角線方向,對角校驗信息存儲于水平方向,其方案的圖示如圖1-53所示。

DH2的校驗條帶是的單元矩陣,水平校驗單元布均勻散布,而用額外的校驗磁盤存儲,對角校驗仍位于最后一行,矩陣右下角位置多出一個備用。DH2方案的圖示如圖1-54所示。

圖1-53 RAID6的DH1方案

圖1-54 RAID6的DH2方案

1.2.5 “多路徑”技術

“多路徑”技術使用一個以上的物理路徑來訪問網絡存儲設備,并通過容錯、I/O流量負載均衡甚至更細粒度的I/O調度策略等方式,為網絡存儲系統提供更高的可用性和性能優勢。

存儲設備有兩個I/O控制器,每個I/O控制器上有兩個連接主機的端口。存儲設備中還有n個磁盤,并假設每個磁盤對應一個LUN。對于存儲設備中的LUN,可以有幾種不同的多路徑訪問方式。

? Active-Active(A/A):如果對于存儲設備的同一個LUN的I/O請求訪問可以同時在兩個I/O控制器,或者某一個控制器的兩個端口上同時進行,則稱之為Active-Active(A/A)型的存儲設備。如果Active-Active陣列的某個路徑故障,I/O只需要路由到另一條路徑,這就保證了對保存在陣列的LUN上的數據的連續訪問。

? Active-Passive(A/P)。如果存儲設備只在一個(主)I/O控制器(端口)上接受和執行對LUN的I/O請求,但是,它可以被切換,或者失敗接管(Fail Over),到從另一個(次)I/O控制器(端口)來訪問這個LUN,則它稱為Active-Passive(A/P)型的存儲設備。這種切換,稱為LUN失敗接管,或者LUN trespass。

1.通用的“多路徑”硬件配置

圖1-55給出了一些通用的“多路徑”硬件配置。在這些配置中,有一個服務器及一個存儲陣列。服務器上有兩個主機適配器,而存儲陣列也有兩個控制器,分別含有一個或兩個端口。假設存儲陣列上有三個磁盤驅動器,每個驅動器之包含唯一的LUN。磁盤陣列都可能是Active-Active(能夠在兩個端口同時呈現LUN),或Active-Passive(只能夠在一個端口,而不是同時在兩個端口呈現LUN)。

(1)直接連接的磁盤陣列

盡管在實際中并不常遇到,最簡單的多路徑硬件配置是直接將每個端口通過線纜直接連接到服務器的某個主機適配器上的。圖1-55①闡述了這種配置。

圖1-55 “多路徑”硬件配置(從左到右依次為①、②、③、④)

在這樣的配置下,服務器和存儲陣列之間有兩條路徑,它們是:

HBA1?Controller1

HBA2?Controller2

因為磁盤陣列包含3個LUN,而每個LUN都可以從兩個端口訪問。操作系統在探測設備時,3個LUN分別會在兩條路徑上被檢測到,一共會發現6個LUN。操作系統本質上并不是能意識多路徑的,如果沒有安裝多路徑軟件,那么它將為每一個發現的LUN注冊一個“設備”。最終,操作系統發現的“設備”數為6。也就是說,可通過兩個路徑訪問的同一個LUN被當成了兩個“設備”,這是容易理解的,因為對操作系統來說,代表“設備”的僅僅是內存中的能夠用來發送SCSI命令的數據結構而已。

(2)一個網絡存儲交換機

更常見的多路徑配置,尤其在大的數據中心,使用存儲網絡來連接服務器和磁盤陣列,圖1-55②闡述了這種配置。假設采用“開放區(Open Zone)”策略,即沒有定義訪問控制,每個主機適配器可以通過交換機連接到磁盤陣列的每個控制器端口。在服務器和磁盤陣列之間就有了四條路徑,即:

HBA1?Port1?Port2?Controller1

HBA1?Port1?Port4?Controller2

HBA2?Port3?Port2?Controller1

HBA2?Port3?Port4?Controller2

在這種配置下,操作系統發現的“設備”數是12(3個LUN在4個路徑上)。

從可用性的觀點看,這種配置有一些優勢,因為它消除了在交換機的主機一端出現故障時的失敗接管時間,但是它卻不會有性能上的改進,對給定LUN的訪問依然受限于它所呈現的單個控制器端口的性能。

(3)冗余的存儲網絡結構

一種通用的(而且是好)存儲網絡設計如圖1-55③的配置,兩個并行存儲網絡結構(Fabric)被連接到同一個存儲陣列和服務器,但不相互連接。在這樣的配置下,每個主機適配器被連接到不同的存儲網絡結構(為簡便起見,在圖中只用一個交換機來表示存儲網絡結構)。類似地,每個磁盤陣列端口也被連接到不同的存儲網絡結構,因此在服務器和存儲陣列之間建立了兩條路徑:

HBA1?Port1?Port2?Controller1

HBA2?Port3?Port4?Controller2

操作系統發現會報告總共6個“設備”(3個LUN在2條路徑上)。

在圖1-55③的配置下,即使有一個存儲網絡完全癱瘓(例如交換機故障),服務器依然能夠和所有的LUN通信。

(4)雙端口陣列控制器以及冗余存儲網絡結構

圖1-55④闡述的配置也有兩個并行的存儲網絡結構,但不同的是,每個磁盤陣列控制器都有兩個端口,并且同時被連接到兩個存儲網絡結構。假設每個LUN都可以從兩個控制器的四個端口中的任何一個端口訪問,并且存儲網絡結構中采用“開放區”策略,操作系統發現會在四條路徑上報告每個LUN,因為一共有3個LUN,因此發現的“設備”數是12。服務器和存儲陣列之間的四條路徑是:

HBA1?Port1?Port2?Port7

HBA1?Port1?Port3?Port9

HBA2?Port4?Port5?Port8

HBA2?Port4?Port6?Port10

這種配置提供了增強的可用性,因為某個控制器失效,依然有兩個存儲網絡結構可用。類似地,某個存儲網絡結構癱瘓,磁盤陣列還是可以使用兩個控制器的。

2.“多路徑”軟件的實現層次

“多路徑”軟件的作用就是識別出系統中的多路徑設備,將它作為一個設備來處理,同時管理這多條路徑,以便實現I/O流量的負載均衡,或者在I/O路徑故障時的切換和恢復。多路徑軟件通常被部署在服務器端,可以在三個層次上實現,如圖1-56所示。

圖1-56 “多路徑”軟件的實現層次

? HBA驅動程序:雖然HBA驅動程序可能通過多條路徑連接到這個磁盤,但它將每個磁盤向上層報告為一個塊設備。

? 操作系統內核:對于每個磁盤,HBA報告為不同的塊設備,例如/dev/sda和/dev/sdb,操作系統內核將這兩個塊設備進入“歸并”為一個塊設備,例如/dev/md0。當前,在Linux中,有兩種這樣的實現方式:基于Software RAID的多路徑技術和基于Device Mapper的多路徑技術。

? 應用程序:例如HDS HDLM、HP SecurePath、EMC PowerPath、Veritas DMP和IBM RDAC。

實現多路徑軟件的關鍵在于磁盤標識。即它應該能夠識別出從HBA“看到”的塊設備對應著存儲設備端的哪一個物理磁盤,進而將對應同一個物理磁盤的塊設備仿真為一個邏輯塊設備。磁盤標識的方法有兩種:

? SCSI INQUIRY:發送SCSI INQUIRY命令,從返回的響應數據判斷對應的物理磁盤;

? World Wide Node Name:雖然每個物理磁盤有兩個WWPN地址,但只有一個WWNN地址。因而可以根據WWNN地址判斷對應的物理磁盤是否相同。

1.2.6 虛擬化技術

計算機科學家David Wheeler有一句名言:“計算機科學中的任何問題,都可以通過加上一層邏輯層來解決。”存儲技術和存儲產品,都深刻反映了這一思想的應用。

虛擬化可以有不同的實現方式。就存儲虛擬化而言,也有各種分類方式,如圖1-57所示。

圖1-57 存儲虛擬化分類

根據虛擬化的層次來分,可分為塊級虛擬化和文件級虛擬化。Linux內核中的Multi-Disk和Device Mapper技術,就是塊級虛擬化的典型。而文件級虛擬化的例子也比比皆是,例如體現Linux設計精髓的“一切都是文件”的思想,塊設備文件就是將塊設備當成邏輯塊順序排列的文件來看待的。

根據虛擬化的形式來分,包括聚合虛擬化、拆分虛擬化和仿真虛擬化。聚合虛擬化將多個存儲資源整合成一個可尋址的實體,例如線性RAID;拆分虛擬化將一個存儲資源拆分成多個可尋址的實體,例如分區;仿真虛擬化仿真另一個產品或功能,例如虛擬磁帶庫(Virtual Tape Library,簡記為VTL)。

根據虛擬化的實現方式,包括帶內虛擬化和帶外虛擬化。如果虛擬化實現位于應用服務器和存儲設備的數據通道中間,稱為帶內虛擬化;如果虛擬化實現位于數據通道之外,僅僅向應用服務器傳送一些控制信息,來完成物理設備和邏輯卷之間的映射,被稱為帶外虛擬化。

根據虛擬化的位置來分,又包括基于服務器的虛擬化、基于網絡的虛擬化和基于存儲子系統的虛擬化。

盡管虛擬化的概念已經提出了很長一段時間,最近在最大化硬件利用率、降低硬件成本、減少電能消耗以及簡化系統管理和安全方面的需求導致了在虛擬化部署和虛擬化解決方案數量上的巨大增長。這最終導致了虛擬化技術的最新發展,即虛擬機的出現。

在傳統的計算模型中,計算機系統只運行一個操作系統,這個操作系統控制所有的硬件平臺資源。而對于虛擬機系統,多個可能不同的操作系統(被稱為來賓操作系統)實例并發地運行在一個物理計算機系統上,它們共享宿主計算機系統的物理資源。

虛擬機最關鍵的部分是虛擬機監視器(Virtual Machine Monitor,VMM)。虛擬機監視器作為虛擬的來賓操作系統和真實的平臺硬件之間的一層抽象,它的主要角色是仲裁對底層硬件主機平臺資源的訪問以便多個來賓操作系統共享這些資源。在某些情況下,虛擬機監視器本身就是一個操作系統(被稱為宿主操作系統),例如Xen;其他時候,它也可能是宿主操作系統上的一個用戶級軟件,例如VMware。虛擬機的來賓操作系統是相互隔離的操作系統,將底層硬件平臺視為它自己所有。但實際上,是虛擬機監視器為它們提供了這種幻像。

虛擬機技術對存儲技術的發展也產生著重要的影響,例如就前面的備份技術而言,在虛擬機環境下,數據備份又有了新的選擇,至少有三個可能:備份虛擬機中的文件,或數據塊;備份虛擬機文件;或者備份虛擬機文件所在的數據塊等。這些不同選擇又會衍生新的技術課題,產生新的解決方案。

主站蜘蛛池模板: 巫山县| 浦江县| 金湖县| 建湖县| 青冈县| 辽阳市| 桂林市| 陇南市| 黑山县| 汉川市| 谢通门县| 即墨市| 嘉鱼县| 清原| 通州区| 庆阳市| 南城县| 法库县| 松原市| 承德市| 固始县| 罗定市| 溧阳市| 黄骅市| 华坪县| 宁国市| 横峰县| 习水县| 阳城县| 中阳县| 湟源县| 昔阳县| 原阳县| 阳东县| 满城县| 崇仁县| 右玉县| 明星| 武冈市| 大方县| 万山特区|