- 存儲技術(shù)原理分析
- 敖青云著
- 24195字
- 2018-12-27 02:38:10
1.2 存儲相關(guān)技術(shù)
1.2.1 備份技術(shù)
備份就是出于數(shù)據(jù)恢復(fù)的目的而創(chuàng)建一份額外的數(shù)據(jù)副本。備份的數(shù)據(jù)可以是完整的文件、文件中的一部分、目錄或用戶自定義的數(shù)據(jù)對象,如數(shù)據(jù)庫中的表。數(shù)據(jù)的備份可以有多個(gè)版本,每個(gè)版本獨(dú)立地存儲在服務(wù)器上。如果原始的數(shù)據(jù)遭到破壞,某一個(gè)版本的備份數(shù)據(jù)就要從服務(wù)器上復(fù)制到客戶機(jī),這個(gè)過程稱做恢復(fù)。
備份窗口(Backup Window)有兩層意思。從業(yè)務(wù)層面講,備份窗口指的是存儲管理員可以安全地實(shí)施備份的時(shí)間段,在這段時(shí)間內(nèi),通常要進(jìn)行特殊的系統(tǒng)準(zhǔn)備,例如關(guān)閉應(yīng)用程序、丟棄用戶連接等。從技術(shù)層面講,它表示完成一次給定備份所需的時(shí)間,這個(gè)時(shí)間取決于需要備份的數(shù)據(jù)總量和數(shù)據(jù)備份的速度。
和備份窗口相對應(yīng)的是恢復(fù)窗口(Recovery Window),也經(jīng)常稱為恢復(fù)時(shí)間目標(biāo)(Recovery Time Objective),其包括兩層含義。從業(yè)務(wù)層面上,是指所能容忍的業(yè)務(wù)停止服務(wù)的最長時(shí)間。從技術(shù)層面上,它表示從災(zāi)難發(fā)生到業(yè)務(wù)系統(tǒng)恢復(fù)服務(wù)功能所需要的最短時(shí)間周期。
數(shù)據(jù)恢復(fù)點(diǎn)目標(biāo)(Recovery Point Objective)主要是指業(yè)務(wù)系統(tǒng)所能容忍的數(shù)據(jù)丟失量。如果采用傳統(tǒng)的磁帶備份,則恢復(fù)點(diǎn)是上一次的備份,而自上次備份以來修改的數(shù)據(jù)都丟失了。
當(dāng)前的業(yè)務(wù)環(huán)境下,企業(yè)對備份的要求越來越高。主要體現(xiàn)在:
? 應(yīng)用有效性需求:7×24×永遠(yuǎn)。當(dāng)今的計(jì)算環(huán)境不允許應(yīng)用的宕機(jī),這一需求來源于不斷增強(qiáng)的競爭、全球化的驅(qū)動;
? 有效的備份窗口:0。當(dāng)今許多公司都沒有非工作時(shí)間——他們需要一直保持?jǐn)?shù)據(jù)有效,這樣備份窗口根本就不存在;
? 可接受的恢復(fù)窗口:0。公司沒有機(jī)會停止服務(wù),即便是要從發(fā)生的災(zāi)難中恢復(fù)。如果不能立即滿足用戶需求,這個(gè)用戶可能就會永遠(yuǎn)離開你;
? 可接受的數(shù)據(jù)損失:0。數(shù)據(jù)已經(jīng)成為任何一個(gè)公司最重要的資產(chǎn),設(shè)想這是你的客戶信息、銀行賬號等,它們是不可以丟失的;
? 企業(yè)存儲投資增長:盡可能少。當(dāng)前的存儲系統(tǒng)越來越龐大、越來越復(fù)雜,但當(dāng)前的經(jīng)濟(jì)環(huán)境卻迫使許多企業(yè)在存儲方面投資(包括設(shè)備、軟件和操作人員)盡可能少。畢竟,減少總體擁有成本(Total Cost of Ownership)非常關(guān)鍵。
備份有不同的分類方式。根據(jù)存儲介質(zhì),分為磁帶備份、光盤備份、磁盤備份;按照執(zhí)行方式,分為手工備份和自動備份;根據(jù)備份數(shù)據(jù)的復(fù)制距離,又可分為本地備份和遠(yuǎn)程備份;按照備份數(shù)據(jù)的具體方法來分,包括全量備份、差量備份和增量備份。我們下面還會看到更多基于存儲相關(guān)角度的備份分類方式。
1.直接連接備份、網(wǎng)絡(luò)連接備份、脫局域網(wǎng)備份和脫服務(wù)器備份
按照網(wǎng)絡(luò)架構(gòu)來分,包括直接連接備份(Direct-Attached Backup)、網(wǎng)絡(luò)連接備份(Network-Attached Backup)、脫局域網(wǎng)備份(LAN-Free Backup)和脫服務(wù)器備份(Server-Free Backup)等。其中直接連接備份和網(wǎng)絡(luò)連接備份為傳統(tǒng)局域網(wǎng)的備份方式,而脫局域網(wǎng)備份和脫服務(wù)器備份則是基于存儲區(qū)域網(wǎng)的新型備份方式。
(1)直接連接備份
在直接連接備份模型下(如圖1-11所示),每臺應(yīng)用服務(wù)器都配備有專用的磁盤陣列或磁帶庫,應(yīng)用服務(wù)器中的數(shù)據(jù)備份到位于本地的專用磁帶驅(qū)動器或資源庫中。直接連接備份模式的問題顯而易見:即使一臺磁帶驅(qū)動器處于空閑狀態(tài),另一臺應(yīng)用服務(wù)器也不能用它進(jìn)行備份工作,因而造成磁帶資源利用率的低下。另外,不同的操作系統(tǒng)使用的備份恢復(fù)程序一般也不相同,這使得備份工作和對資源的總體管理變得更加復(fù)雜。
(2)網(wǎng)絡(luò)連接備份
在網(wǎng)絡(luò)連接備份環(huán)境下(如圖1-12所示),應(yīng)用服務(wù)器從本地連接的磁盤陣列中讀取數(shù)據(jù),通過網(wǎng)絡(luò)發(fā)送給備份服務(wù)器。備份服務(wù)器接收到數(shù)據(jù)后,按照預(yù)先配置好的備份策略寫到本地連接的公用磁盤或磁帶系統(tǒng)中。它在一定程度上克服了專用磁帶系統(tǒng)的缺點(diǎn),將磁帶資源由一個(gè)專門的備份服務(wù)器控制。這種集中存儲的方式極大地提高了磁帶資源的利用效率,使得企業(yè)在高性能磁帶驅(qū)動器和資源庫上的投資取得更好的回報(bào)。這種方式的主要缺點(diǎn)在于:網(wǎng)絡(luò)帶寬將成為備份和恢復(fù)進(jìn)程中的潛在瓶頸,進(jìn)而影響企業(yè)進(jìn)行快速備份和恢復(fù)的能力。另外,通過網(wǎng)絡(luò)傳輸備份和恢復(fù)數(shù)據(jù)將占據(jù)大量帶寬,增加網(wǎng)絡(luò)負(fù)荷,影響其性能。

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

圖1-12 網(wǎng)絡(luò)連接備份模型
(3)脫局域網(wǎng)備份
網(wǎng)絡(luò)存儲拓展了備份的范圍,脫局域網(wǎng)備份模型(如圖1-13所示)通過建立專用備份網(wǎng)絡(luò)把備份數(shù)據(jù)流量從數(shù)據(jù)網(wǎng)絡(luò)轉(zhuǎn)移到存儲區(qū)域網(wǎng),把局域網(wǎng)排除在備份和恢復(fù)進(jìn)程之外。用戶只需將磁帶驅(qū)動器和資源庫連接到存儲區(qū)域網(wǎng)中,應(yīng)用各服務(wù)器就可把需要備份的數(shù)據(jù)直接發(fā)送到共享的磁帶上,不必再經(jīng)過局域網(wǎng)鏈路。服務(wù)器到共享存儲設(shè)備的大量數(shù)據(jù)傳輸是通過存儲區(qū)域網(wǎng)進(jìn)行的,局域網(wǎng)只承擔(dān)各服務(wù)器之間的通信(而不是數(shù)據(jù)傳輸)任務(wù)。這種分工使得存儲設(shè)備、服務(wù)器和局域網(wǎng)資源得到更有效的利用,從而使存儲區(qū)域網(wǎng)成為速度更快、擴(kuò)展性和可靠性更好的備份和恢復(fù)解決方案。
(4)脫服務(wù)器備份
基于存儲區(qū)域網(wǎng)結(jié)構(gòu)的網(wǎng)絡(luò)備份的另一種方式是脫服務(wù)器備份,其模型如圖1-14所示。存儲區(qū)域網(wǎng)上獨(dú)立的備份管理系統(tǒng)把應(yīng)用服務(wù)器的備份工作接管過來,所以這種備份方式也稱為第三方備份。采用這種方式,數(shù)據(jù)在存儲設(shè)備之間直接進(jìn)行傳輸(如從磁盤到磁帶機(jī)),無須通過主服務(wù)器。獨(dú)立于服務(wù)器的備份和恢復(fù)方案可顯著減少主機(jī)的CPU占用時(shí)間,被釋放的CPU資源用于其他應(yīng)用,可提高操作系統(tǒng)效率,幫助企業(yè)完成更多的工作。但是,這項(xiàng)技術(shù)目前仍在發(fā)展完善階段,需要進(jìn)一步同操作系統(tǒng),數(shù)據(jù)庫及應(yīng)用程序相結(jié)合,以支持應(yīng)用級的備份和恢復(fù)。
2.文件級備份和塊級備份
按照基本單元來分,可分為基于文件的備份(File-based Backup)和基于數(shù)據(jù)塊的備份(Block-based Backup)。
在文件級備份下,備份軟件使用服務(wù)器操作系統(tǒng)和文件系統(tǒng)來備份文件。它的一個(gè)優(yōu)點(diǎn)就是可以很容易恢復(fù)某個(gè)或某些特定的文件。另一個(gè)優(yōu)勢在于在進(jìn)行備份的時(shí)候,操作系統(tǒng)和應(yīng)用程序可以繼續(xù)訪問文件。這種方式也有一些不足之處。和塊級備份相比,文件級備份所需要的時(shí)間更長。如果備份大量的小文件,操作系統(tǒng)和文件及目錄元數(shù)據(jù)訪問的開銷相當(dāng)高。同時(shí)“打開文件”的備份也是一個(gè)需要解決的問題。

圖1-13 脫局域網(wǎng)備份模型

圖1-14 脫服務(wù)器備份模型
塊級備份,也稱為映像級備份(Image-Level Backup)。塊級備份完全繞過文件和文件系統(tǒng),將數(shù)據(jù)作為裸磁盤塊,從磁盤上直接讀取數(shù)據(jù)。塊級備份應(yīng)用程序并不關(guān)心有多少文件,更不深入到文件內(nèi)部。它按塊在磁盤上的次序讀取,而不是它們在文件中的次序,所以不會因?yàn)樽x取有大量分片的文件數(shù)據(jù)時(shí)因?qū)さ蓝鴮?dǎo)致性能的下降。塊級備份通常有內(nèi)建的即時(shí)快照支持,因此可以從根本上解決“打開”文件問題。它的過程通常是:通過執(zhí)行特殊的操作將運(yùn)行著的應(yīng)用程序和它們在服務(wù)器內(nèi)存中的數(shù)據(jù)進(jìn)入一致狀態(tài),沖刷到磁盤,然后做一個(gè)快照,備份過程從快照而不是實(shí)際卷上讀取改變的數(shù)據(jù)塊,備份完成后刪除快照。
3.在線備份、離線備份和近線備份
按照保存方式,分為在線備份(Online Backup)、離線備份(Offline Backup)和近線備份(Near-line Backup)。
在線備份指的是實(shí)時(shí)性訪問數(shù)據(jù)的磁盤驅(qū)動器或磁盤類陣列;在線備份是直接可用的數(shù)據(jù)備份。一般,進(jìn)行在線備份成本很高,需要很多的在線存儲。因此,在線備份需要和離線備份以及近線備份結(jié)合使用,構(gòu)成分層次的三線備份。實(shí)際上,最新的備份數(shù)據(jù)是在線保存的,而過期的數(shù)據(jù)則進(jìn)行離線存儲。
離線備份需人工介入,通常保存在磁帶或光盤中。在備份完成后,磁帶或者光盤從磁帶庫或者光盤驅(qū)動器中取出,集中保存起來。離線備份可以防止數(shù)據(jù)被誤修改,或者物理損壞,但是也只有將磁帶或光盤再放入到磁帶庫或光盤驅(qū)動器中之后,才能被訪問。
近線備份則是介于兩者之間,指的是不須人工介入。和離線備份相比較,近線備份也是保存在磁帶或者光盤中,但其不同之處在于,磁帶或者光盤還保留在磁帶庫或光盤驅(qū)動器中。在有恢復(fù)需要時(shí),磁帶或光盤立即可用。因此,恢復(fù)執(zhí)行起來更為迅速,根本無須手工操作磁帶。
這種方式避免了常規(guī)的磁帶更換,資源庫容量足夠大,可以保存一段相當(dāng)長時(shí)間的備份。但近線備份比離線備份更不安全,因?yàn)椴荒鼙U蠠o意識地修改。是由于磁帶庫的費(fèi)用,近線備份較離線備份更為昂貴。
由于硬盤的價(jià)格越來越便宜,容量卻越來越大,再加上硬盤速度快的特點(diǎn),大大降低了近線存儲的成本,也同時(shí)降低了近線存儲應(yīng)用的門檻,從磁盤到磁盤的數(shù)據(jù)備份將有更大的增長空間。
4.冷備份和熱備份
按照備份過程和系統(tǒng)運(yùn)行的關(guān)系則分為冷備份(Cold Backup)和熱備份(Hot Backup)。
冷備份在執(zhí)行操作時(shí),服務(wù)器將不接受來自用戶或應(yīng)用對數(shù)據(jù)的更新。這樣,當(dāng)備份復(fù)制正在進(jìn)行時(shí),并發(fā)更新的問題就完全被杜絕了。冷備份能很好地工作,經(jīng)常用于數(shù)據(jù)庫備份。當(dāng)然,冷備份也存在問題,即在備份期間,服務(wù)器不可以接受任何更新操作。假如冷備份需要運(yùn)行6小時(shí)到8小時(shí),那么,要使應(yīng)用服務(wù)器做到全天候的可用性就成為一個(gè)不可能的事情。
熱備份是在用戶和應(yīng)用正在更新數(shù)據(jù)時(shí),系統(tǒng)也可以進(jìn)行備份。對于熱備份,存在完整性問題,每一個(gè)文件或數(shù)據(jù)庫實(shí)體都需要作為一個(gè)完整的、一致的版本進(jìn)行備份。最簡單的方案就是完全忽略這些問題,并希望在后來的恢復(fù)過程中不需要這個(gè)備份數(shù)據(jù)。事實(shí)上不能這樣做,其原因是:假如你以后不想恢復(fù)數(shù)據(jù),又何必為備份而費(fèi)神呢?另一種做法是當(dāng)備份正在運(yùn)行時(shí),不要備份任何正由其他應(yīng)用使用的文件,這樣,當(dāng)一個(gè)應(yīng)用正在更新數(shù)據(jù)時(shí),備份一個(gè)文件也不會產(chǎn)生不一致的危險(xiǎn)。但是,有一些重要的數(shù)據(jù)文件總是處于打開狀態(tài),如果使用這種方法,它們將永遠(yuǎn)得不到備份。此外備份系統(tǒng)應(yīng)盡量使用文件的單獨(dú)寫/修改權(quán)限,保證在該文件備份期間應(yīng)用不能對它進(jìn)行更新。
1.2.2 快照技術(shù)
數(shù)據(jù)必須持續(xù)有效,因備份而宕機(jī)是無法接受的。在線或活動的備份系統(tǒng)允許用戶在備份過程中繼續(xù)訪問文件,雖然可以提供更高的可用性,但是引入了一致性問題。圖1-15說明了在這種熱備份中是如何產(chǎn)生數(shù)據(jù)不一致問題的。

圖1-15 備份過程中可能導(dǎo)致的數(shù)據(jù)不一致問題
剛開始時(shí)文件包含了兩個(gè)數(shù)據(jù)塊1和2,這時(shí)備份程序開始執(zhí)行,復(fù)制了數(shù)據(jù)塊1,然而在這一時(shí)刻,應(yīng)用程序?qū)ξ募?nèi)容進(jìn)行修改,由于操作系統(tǒng)調(diào)度的關(guān)系,數(shù)據(jù)塊被覆寫為1′和2′,接著備份程序又獲得執(zhí)行權(quán),繼續(xù)復(fù)制第二個(gè)數(shù)據(jù)塊,即2′,后結(jié)束。最終備份下來的數(shù)據(jù)塊內(nèi)容為1和2′,既不同于文件修改之前的1和2,也不同于文件修改之后的1′和2′。
為了保證備份的一致性,可以采取三種方法。
(1)在備份過程中禁止應(yīng)用程序訪問磁盤。在早期PC計(jì)算的年代,這時(shí)最常使用的備份方式,但如今,基于下列兩個(gè)事實(shí),這種備份方案并不現(xiàn)實(shí):
? 數(shù)據(jù)24×7有效稱為當(dāng)今企業(yè)業(yè)務(wù)連續(xù)的一個(gè)必備因素:用戶需要在任意時(shí)間訪問數(shù)據(jù),企業(yè)不能承擔(dān)應(yīng)用程序離線或者數(shù)據(jù)不一致而產(chǎn)生的可能后果;
? 數(shù)據(jù)的爆炸性增長以及備份窗口的不斷減小使得永遠(yuǎn)沒有足夠的時(shí)間用于備份。而備份需要在任意時(shí)間發(fā)生,以確保所有數(shù)據(jù)都能得到備份。
(2)在有應(yīng)用程序訪問磁盤的情況下備份數(shù)據(jù),但是跳過所有打開文件。顯然,在備份過程中依然要運(yùn)行的應(yīng)用程序是重要的,這樣做就意味著這些應(yīng)用程序用到的“重要”數(shù)據(jù)沒辦法被備份下來。
(3)區(qū)別對待由備份應(yīng)用程序發(fā)起的I/O以及其他應(yīng)用程序發(fā)起的I/O。比如在存儲子系統(tǒng)中使用“快照”技術(shù),可以解決大規(guī)模數(shù)據(jù)復(fù)制造成的長停機(jī)時(shí)間問題。
存儲網(wǎng)絡(luò)工業(yè)協(xié)會(SNIA)對快照的定義為:快照(Snapshot)為一個(gè)數(shù)據(jù)對象產(chǎn)生完全可用的副本,它包含對該數(shù)據(jù)對象在某一時(shí)間點(diǎn)的映像,快照在快照時(shí)間點(diǎn)對數(shù)據(jù)對象進(jìn)行邏輯復(fù)制操作,產(chǎn)生數(shù)據(jù)對象在該時(shí)間點(diǎn)的一致性數(shù)據(jù)副本,但實(shí)際的部分或全部物理復(fù)制過程可能在復(fù)制時(shí)間點(diǎn)之外的某些時(shí)間進(jìn)行。快照可以在非常短的時(shí)間內(nèi)完成數(shù)據(jù)對象邏輯副本的創(chuàng)建,其數(shù)量級通常為幾秒,因此也稱為零時(shí)間復(fù)制。快照技術(shù)可以最大限度減小復(fù)制操作對上層應(yīng)用的影響,同時(shí)保證復(fù)制操作語義的原子性。
快照技術(shù)按照實(shí)現(xiàn)方式:包括寫前復(fù)制、寫時(shí)轉(zhuǎn)向和拆分鏡像等。
1.寫前復(fù)制
寫前復(fù)制(Copy on Write),精確地說,應(yīng)稱為首寫復(fù)制(Copy on First Write),指的是在第一次對源卷進(jìn)行寫操作之前,將源卷中對應(yīng)的數(shù)據(jù)塊復(fù)制到快照卷中,而后續(xù)對源卷中該數(shù)據(jù)塊的寫操作可以直接進(jìn)行。
圖1-16說明了寫前復(fù)制是如何工作的。在圖中,用表示源卷的初始內(nèi)容,
表示快照卷的初始內(nèi)容,
表示對源卷的第一次修改,
表示對源卷的后續(xù)修改,
表示對可寫快照卷的第一次修改,
表示對可寫快照卷的后續(xù)修改。

圖1-16 創(chuàng)建快照
寫前復(fù)制實(shí)現(xiàn)方案是從創(chuàng)建快照開始的。創(chuàng)建快照為源卷的快照卷分配空間??煺站砜臻g不必等同于源卷,實(shí)際上,快照卷的空間選擇取決于源卷的大小、數(shù)據(jù)更新的頻率以及該快照計(jì)劃保存的時(shí)間,可為源卷空間的5%~110%左右。當(dāng)快照卷空間用光之后,快照卷就失效了。在創(chuàng)建快照的同時(shí),還需要一個(gè)長度和快照卷容量成比例的快照映射表,其中保存源卷數(shù)據(jù)塊和快照卷數(shù)據(jù)塊之間的映射關(guān)系。
一旦創(chuàng)建好快照,即可對源卷及其快照卷進(jìn)行讀/寫操作,下面我們將依次分析每個(gè)操作的過程。
在寫源卷前,首先查找快照映射表,這時(shí)可能出現(xiàn)兩種情況:① 未命中,即快照映射表中沒有和源卷中待寫的數(shù)據(jù)塊相對應(yīng)的記錄;② 命中,即快照映射表中存在和源卷中待寫的數(shù)據(jù)塊相對應(yīng)的記錄,如圖1-17所示。
后續(xù)寫卷的情形如圖1-18所示。這是因?yàn)槊锌偸浅霈F(xiàn)在首次寫該數(shù)據(jù)塊時(shí)。在未命中的情況下,操作將分割為順序的三個(gè)原子操作:將該數(shù)據(jù)塊(9)的內(nèi)容從源卷復(fù)制到快照卷的某個(gè)數(shù)據(jù)塊(5)中;在快照映射表中追加一條記錄,給出源卷中的數(shù)據(jù)塊和對應(yīng)的快照卷中的數(shù)據(jù)塊;在上述兩步完成之后,即可將新內(nèi)容寫到源卷的數(shù)據(jù)塊中。
如果查找快照映射表時(shí)命中,則表明源卷中該數(shù)據(jù)塊在做快照時(shí)的數(shù)據(jù)已經(jīng)保存到快照中,我們可以直接將新的內(nèi)容寫到源卷中。
在寫前復(fù)制方案中,讀源卷操作和讀取一個(gè)普通的設(shè)備沒有任何區(qū)別,只需要從源卷的對應(yīng)數(shù)據(jù)塊中將內(nèi)容讀出即可,無論這些內(nèi)容在創(chuàng)建快照后是否有被修改或者是否被多次修改,如圖1-19所示。

圖1-17 首次寫源卷

圖1-18 后續(xù)寫源卷

圖1-19 讀源卷
讀取快照卷的操作一般用于獲取在快照創(chuàng)建時(shí)刻的“數(shù)據(jù)映像”,它也涉及快照映射表的查找以及命中和未命中兩種可能。
讀快照卷如果未命中(如圖1-20所示),表明“數(shù)據(jù)映像”在這個(gè)數(shù)據(jù)塊的值在創(chuàng)建快照以后,并沒有修改過,因此從源卷中直接讀取即可。

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

圖1-21 讀快照卷——命中
將源卷恢復(fù)到快照創(chuàng)建時(shí)的狀態(tài),使得源卷中的數(shù)據(jù)和創(chuàng)建快照時(shí)的數(shù)據(jù)完全一致,這種操作被稱為“回滾(rollback)”(如圖1-22所示)。數(shù)據(jù)回滾的主要應(yīng)用是在人工誤操作,或病毒入侵等破壞了源卷內(nèi)容的情況下,恢復(fù)到之前完好的狀態(tài)。
借助于快照映射表,很容易實(shí)現(xiàn)快照卷的回滾。一般來說,執(zhí)行快照恢復(fù)操作必然導(dǎo)致在這個(gè)快照之后創(chuàng)建的快照失效。甚至,在有些比較簡單的實(shí)現(xiàn)方案中,一旦源卷利用某一個(gè)快照卷進(jìn)行回滾,則為這個(gè)源卷做的所有快照卷都無效了。

圖1-22 快照回滾
某些系統(tǒng)支持可寫快照,并且為寫快照使用另一個(gè)快照映射表。也就是說,在第一次對可寫快照進(jìn)行寫操作之前,將可寫快照卷中的內(nèi)容復(fù)制到快照卷中,并在這個(gè)快照映射表中記錄可選快照卷的數(shù)據(jù)塊和快照卷的數(shù)據(jù)塊之間的關(guān)系,之后才將新的內(nèi)容更新到可寫快照卷。
這種情況下,快照中有兩種修改:由于修改源卷而復(fù)制到快照中的數(shù)據(jù),以及對可寫快照卷修改的數(shù)據(jù)。回滾和前面有相同的含義,即只恢復(fù)由于對源卷進(jìn)行修改而保存的數(shù)據(jù),直接對快照卷所做的修改不會傳送到源卷中。這時(shí),還可以引入一種“前滾(roll forward)”的技術(shù),整個(gè)快照卷被恢復(fù)成源卷。也就是說,除了對源卷進(jìn)行修改而保存的數(shù)據(jù)塊也會應(yīng)用到源卷,直接對可寫快照卷所做的修改也將被應(yīng)用到源卷。在前滾后,快照卷和源卷的內(nèi)容完全一致,回滾和前滾的含義如圖1-23所示。

圖1-23 回滾和前滾
回滾和前滾的作用在下面的應(yīng)用也會顯得特別有用,那就是測試新軟件。在安裝新的軟件包之前,為目標(biāo)卷創(chuàng)建一個(gè)可寫的快照。然后將軟件安裝到快照卷,并在快照卷上測試和驗(yàn)證軟件。如果測試發(fā)現(xiàn)問題,可以簡單地刪除快照,而不會影響到源卷。如果測試成功,可以回滾快照卷到源卷,在其上正式安裝軟件,也可以直接前滾到軟件已成功安裝的快照卷。
2.寫時(shí)轉(zhuǎn)向
寫時(shí)轉(zhuǎn)向技術(shù)和寫前復(fù)制技術(shù)類似,對源卷的寫操作被重定向到另一個(gè)位置。使用寫時(shí)轉(zhuǎn)向技術(shù)的典型產(chǎn)品是WAFL(Write Anywhere File Layout)文件系統(tǒng),它使用了和很多傳統(tǒng)UNIX風(fēng)格文件系統(tǒng)相同的基本數(shù)據(jù)結(jié)構(gòu)。每個(gè)文件用一個(gè)inode來描述,其中包含了這個(gè)文件的元數(shù)據(jù)以及指向數(shù)據(jù)或間接塊的指針。對于小文件,inode直接指向數(shù)據(jù)塊。對于大文件,inode指向間接塊的樹。
這個(gè)樹發(fā)源于根inode,從它開始,沿著樹向下遍歷,找到任何數(shù)據(jù)和元數(shù)據(jù)。換句話說,只要能找到根inode,無所謂任何其他塊被分配在磁盤上哪個(gè)地方,這就是WAFL名字的來源——它的文件系統(tǒng)布局允許將數(shù)據(jù)寫到任何位置。
在寫一個(gè)塊到磁盤時(shí)(數(shù)據(jù)或元數(shù)據(jù)),WAFL從不覆蓋它的當(dāng)前版本。相反,塊的新值被寫到磁盤上的未使用位置。因此,每次WAFL寫塊時(shí),它必須同時(shí)更新指向該塊的老位置的任何塊(可能是inode或間接塊)。這些更新遞歸,生成了一條塊更新鏈,沿著塊向上一直到根inode。
理解WAFL文件系統(tǒng)是一棵以根inode為根的塊樹是理解快照的關(guān)鍵。圖1-24顯示了WAFL是如何創(chuàng)建新快照的,它僅僅簡單地創(chuàng)建了根inode的一個(gè)副本,它與原始根inode有完全相同的內(nèi)容。這個(gè)復(fù)制的根inode代表快照文件系統(tǒng)的樹根,而原始根inode作為活動文件系統(tǒng)的樹根。通過只復(fù)制根inode,WAFL可以很快速,并且以最少磁盤消耗地創(chuàng)建快照。實(shí)際上,一個(gè)全新的文件系統(tǒng)快照不會消耗磁盤空間,除了用于快照根inode本身的磁盤空間以外。

圖1-24 寫時(shí)轉(zhuǎn)向
在活動文件系統(tǒng)的數(shù)據(jù)塊被修改時(shí),它的內(nèi)容被寫到新的位置,數(shù)據(jù)塊的父親必須被修改以指向它的新位置。反過來,父親的父親,也需要被修改以指向這個(gè)父親的新位置,依次類推,一直向上到達(dá)樹根。圖1-24中顯示了在用戶修改了數(shù)據(jù)塊A時(shí)的情況。WAFL寫新數(shù)據(jù)到磁盤上的塊A',同時(shí)改變活動文件系統(tǒng)指向這個(gè)新的數(shù)據(jù)塊??煺瘴募到y(tǒng)仍然指向原始的數(shù)據(jù)塊A,在磁盤上保持不變。
寫時(shí)轉(zhuǎn)向的優(yōu)勢在于只有一個(gè)寫操作發(fā)生(利用寫前復(fù)制技術(shù),要執(zhí)行兩個(gè)寫操作:一次將原始數(shù)據(jù)復(fù)制到快照卷,另一次將新數(shù)據(jù)復(fù)制到源卷)??墒?,使用寫時(shí)轉(zhuǎn)向,把生產(chǎn)文件系統(tǒng)的數(shù)據(jù)和快照的數(shù)據(jù)都放在一個(gè)卷上了,彼此犬牙交錯(cuò),因此,在快照被刪除時(shí),來自快照文件系統(tǒng)的數(shù)據(jù)必須被調(diào)整回到原始文件系統(tǒng)。此外,在創(chuàng)建了多個(gè)快照時(shí),對原始數(shù)據(jù)的訪問,對快照和源卷中數(shù)據(jù)的跟蹤,以及在快照刪除時(shí)的調(diào)整更為復(fù)雜。依賴于原始數(shù)據(jù)副本和原始數(shù)據(jù)集的快照很快就會變得非常脆弱。
3.拆分鏡像
拆分鏡像快照技術(shù)在快照時(shí)間點(diǎn)到來之前,首先要為源數(shù)據(jù)卷創(chuàng)建并維護(hù)一個(gè)完整的物理鏡像卷,這一過程與標(biāo)準(zhǔn)的RAID1相似:同一數(shù)據(jù)的兩個(gè)副本分別保存在由源數(shù)據(jù)卷和鏡像卷組成的鏡像對上。在快照時(shí)間點(diǎn)到來時(shí),鏡像操作被停止,鏡像卷轉(zhuǎn)化為快照卷,獲得一份數(shù)據(jù)快照??煺站碓谕瓿蓴?shù)據(jù)備份等應(yīng)用后,將與源數(shù)據(jù)卷重新同步,重新成為鏡像卷。對于要同時(shí)保留多個(gè)時(shí)間點(diǎn)快照的源數(shù)據(jù)卷,則必須預(yù)先為其創(chuàng)建多個(gè)鏡像卷,拆分鏡像備份過程如圖1-25所示。

圖1-25 拆分鏡像備份過程
鏡像分裂快照雖然能夠在最短時(shí)間內(nèi)生成完整的物理副本,但該技術(shù)缺乏靈活性,需要預(yù)先分配存儲資源,而且快照時(shí)間點(diǎn)前的鏡像操作將影響系統(tǒng)性能。
拆分鏡像快照的優(yōu)點(diǎn)為:在快照命令發(fā)出之后立即就能得到一個(gè)完整的物理副本,不再需要額外的復(fù)制操作??煺詹僮鞯臅r(shí)間非常短,僅僅是斷開鏡像卷對所需的時(shí)間,通常只有幾毫秒,這樣小的“復(fù)制窗口”不會對上層應(yīng)用造成影響。
但是拆分鏡像快照也存在一些缺點(diǎn):首先,這種快照技術(shù)缺乏靈活性,無法在任意時(shí)刻為任意的數(shù)據(jù)卷建立快照;如果源數(shù)據(jù)卷沒有預(yù)先創(chuàng)建鏡像卷,則無法建立快照;當(dāng)一個(gè)鏡像卷正處于重新同步狀態(tài)時(shí),也無法用于建立快照。其次,預(yù)先創(chuàng)建鏡像卷占用了大量的存儲資源,并極有可能造成資源的浪費(fèi)。最后,快照時(shí)間點(diǎn)之前持續(xù)的鏡像操作將會增加系統(tǒng)的開銷,尤其當(dāng)一個(gè)源數(shù)據(jù)卷同時(shí)維持多個(gè)鏡像卷時(shí)。
EMC的TimeFinder是使用拆分鏡像實(shí)現(xiàn)方案的一個(gè)典型示例。TimeFinder采用了硬件和軟件相結(jié)合的實(shí)現(xiàn)思路,并引入了一種專門配置的設(shè)備類型,稱為業(yè)務(wù)持續(xù)卷(Business Continuance Volume,BCV)。和標(biāo)準(zhǔn)的主存儲設(shè)備一樣,每個(gè)業(yè)務(wù)持續(xù)卷可以有自己的設(shè)備地址,并可以配置成一個(gè)獨(dú)立的設(shè)備,并通過服務(wù)器來訪問。業(yè)務(wù)持續(xù)卷也可以和主存儲設(shè)備進(jìn)行綁定,構(gòu)成BCV對(BCV Pair),實(shí)現(xiàn)同步、恢復(fù)等目的。在綁定狀態(tài)下,業(yè)務(wù)持續(xù)卷不能被服務(wù)器訪問。
典型的BCV狀態(tài)包括創(chuàng)建、同步、分裂、重建、恢復(fù)、增量恢復(fù)。
? 創(chuàng)建:將業(yè)務(wù)持續(xù)卷綁定到主存儲設(shè)備,作為其一個(gè)鏡像設(shè)備,構(gòu)成BCV對。這時(shí)BCV設(shè)備中不包含任何有效數(shù)據(jù),并且BCV設(shè)備被置為離線狀態(tài),不能被服務(wù)器訪問。
? 同步:在創(chuàng)建BCV對之后,需要將主存儲設(shè)備的內(nèi)容同步到BCV設(shè)備上。可以通過查詢操作了解同步的狀態(tài)。在同步完成之后,BCV設(shè)備和主存儲設(shè)備的內(nèi)容相同。
? 分裂:分裂BCV對將解除業(yè)務(wù)持續(xù)卷和主存儲設(shè)備的綁定。這時(shí),業(yè)務(wù)持續(xù)卷重新賦予一個(gè)獨(dú)立、有效的設(shè)備地址,服務(wù)器可以通過這個(gè)地址來訪問之,而主存儲設(shè)備不會受到任何影響。業(yè)務(wù)持續(xù)卷的內(nèi)容是主存儲設(shè)備在分裂命令執(zhí)行時(shí)刻的即時(shí)復(fù)制。
? 重建:在重建操作中,業(yè)務(wù)持續(xù)卷和它最初的主存儲設(shè)備被重新綁定到一起,構(gòu)成BCV對。這個(gè)操作將在拆分該BCV對后對主存儲設(shè)備所做的修改更新到業(yè)務(wù)持續(xù)卷上,并丟棄對BCV卷所做的修改。這樣可以使得BCV對快速達(dá)到同步狀態(tài)。
? 恢復(fù):恢復(fù)操作將業(yè)務(wù)持續(xù)卷綁定到主存儲設(shè)備,構(gòu)成BCV對,將業(yè)務(wù)持續(xù)卷的內(nèi)容復(fù)制到主存儲設(shè)備中。在恢復(fù)完成之后,主存儲設(shè)備和業(yè)務(wù)持續(xù)卷設(shè)備的內(nèi)容相同。
? 增量恢復(fù):在增量恢復(fù)操作中,業(yè)務(wù)持續(xù)卷和它最初的主存儲設(shè)備被重新綁定到一起,構(gòu)成BCV對。和恢復(fù)操作不同的是,這個(gè)操作只是將對BCV卷所作的修改更新到主存儲設(shè)備上,并丟棄在拆分該BCV對后對主存儲設(shè)備所作的修改。如果BCV卷沒有修改,則這個(gè)操作和恢復(fù)操作相同,將主存儲設(shè)備回滾到過去的狀態(tài)。
需要注意的是,重建BCV對和增量恢復(fù)BCV卷都需要將對主存儲設(shè)備或業(yè)務(wù)持續(xù)卷的寫操作記錄下來。如果寫操作沒有被記錄,或者記錄寫的空間耗盡,那么必須復(fù)制整個(gè)映像以實(shí)現(xiàn)重新同步。
4.快照一致性
在存儲網(wǎng)絡(luò)環(huán)境下,需要面對快照的一致性問題。存儲空間被分配給應(yīng)用服務(wù)器,應(yīng)用程序?qū)?shù)據(jù)寫到存儲設(shè)備上。如果在對存儲設(shè)備執(zhí)行數(shù)據(jù)塊級別的快照時(shí),應(yīng)用程序數(shù)據(jù)可能處于兩個(gè)“一致性”狀態(tài)的中間,其結(jié)果是產(chǎn)生了一個(gè)“數(shù)據(jù)不一致”的快照。這種情況也常常出現(xiàn)在應(yīng)用服務(wù)器的操作系統(tǒng)支持緩存的時(shí)候。即使在同一個(gè)系統(tǒng)中,如果不采取這種協(xié)調(diào)機(jī)制,底層執(zhí)行快照操作也可能產(chǎn)生對上層應(yīng)用來說是“不一致”的數(shù)據(jù)。例如,如果文件系統(tǒng)不在一致狀態(tài),這時(shí)在邏輯卷級進(jìn)行快照會出現(xiàn)問題。
因此,在做快照之前,應(yīng)用程序必須將所有在緩存中的數(shù)據(jù)沖刷到磁盤。不同的系統(tǒng)采用不同的方法來解決這個(gè)問題,圖1-26闡述了其中的一種。在應(yīng)用服務(wù)器配有一個(gè)快照代理,在快照執(zhí)行進(jìn)程需要對存儲設(shè)備作快照時(shí),首先發(fā)送一個(gè)“準(zhǔn)備快照”的通知給快照代理??煺沾斫邮盏胶螅驊?yīng)用程序緩存管理發(fā)送“停止寫并刷新緩存”的消息,然后在應(yīng)用服務(wù)器上的緩存將會被沖刷到存儲設(shè)備。最終,快照代理從應(yīng)用程序緩存管理收到“緩存已刷新”的回復(fù),進(jìn)而向快照執(zhí)行進(jìn)程發(fā)送消息,報(bào)告“快照準(zhǔn)備完畢”。

圖1-26 做快照時(shí)刷新應(yīng)用程序緩存
1.2.3 連續(xù)數(shù)據(jù)保護(hù)技術(shù)
連續(xù)數(shù)據(jù)保護(hù)(Continuous Data Protection,CDP)是一種連續(xù)捕獲和保存數(shù)據(jù)變化,將變化后的數(shù)據(jù)獨(dú)立于原始數(shù)據(jù)進(jìn)行保存,以便在必要時(shí)將數(shù)據(jù)恢復(fù)到之前的任意時(shí)間點(diǎn)的方法。根據(jù)定義,所有連續(xù)數(shù)據(jù)快照解決方案都應(yīng)該具備以下幾個(gè)基本的特性:
? 數(shù)據(jù)的改變受到連續(xù)的捕獲與跟蹤;
? 所有的數(shù)據(jù)改變都存儲在一個(gè)與主存儲地點(diǎn)不同的獨(dú)立地點(diǎn)中;
? 恢復(fù)點(diǎn)目標(biāo)是任意的,而且不需要在實(shí)際恢復(fù)之前事先定義。
連續(xù)數(shù)據(jù)快照可應(yīng)用于一個(gè)實(shí)時(shí)的數(shù)據(jù)備份系統(tǒng),提供更快的數(shù)據(jù)檢索、更強(qiáng)的數(shù)據(jù)保護(hù)和更高的業(yè)務(wù)連續(xù)性能力。它的關(guān)鍵是將每一個(gè)應(yīng)用數(shù)據(jù)的變化加上時(shí)間索引,也就是說,“快照”的動作在每個(gè)時(shí)間點(diǎn)上進(jìn)行。因?yàn)樗袛?shù)據(jù)變化都被實(shí)時(shí)地記錄下來,當(dāng)出現(xiàn)數(shù)據(jù)丟失、數(shù)據(jù)損壞、或者安全問題時(shí),就可能恢復(fù)到最近的完好數(shù)據(jù)。連續(xù)數(shù)據(jù)保護(hù)范例如圖1-27所示。

圖1-27 連續(xù)數(shù)據(jù)保護(hù)范例
在圖1-27中,有五個(gè)數(shù)據(jù)塊,其初始內(nèi)容為A、B、C、D、E。在3:35:50(三時(shí)三十五分五十秒),第二個(gè)數(shù)據(jù)塊和第四個(gè)數(shù)據(jù)塊的內(nèi)容被修改為X和Y,其修改前的內(nèi)容被記錄在快照中,連同修改的時(shí)間戳。然后在3:35:51,第一個(gè)數(shù)據(jù)塊和第二個(gè)數(shù)據(jù)塊的內(nèi)容被修改為2和6,其修改前的內(nèi)容以及時(shí)間戳被記錄在快照中。依次類推,在3:35:55秒,第四個(gè)數(shù)據(jù)塊和第五個(gè)數(shù)據(jù)塊的內(nèi)容被修改,其修改前的內(nèi)容h、7以及時(shí)間戳被記錄在快照中。
可以看到,在最后一次修改中,新的內(nèi)容被標(biāo)記為,這是一次不成功的修改,它可能是人工誤操作或者病毒入侵的結(jié)果,直接導(dǎo)致了業(yè)務(wù)數(shù)據(jù)內(nèi)容被破壞。
恢復(fù)過程是一個(gè)逆過程,例如要恢復(fù)3:35:54的內(nèi)容,從快照中找到對應(yīng)的修改,即第四塊的內(nèi)容h和第五塊的內(nèi)容7,將它們導(dǎo)回到3:35:55的數(shù)據(jù)塊,即覆蓋數(shù)據(jù)塊中的錯(cuò)誤內(nèi)容。同樣,以3:35:54的數(shù)據(jù)塊內(nèi)容為基礎(chǔ),根據(jù)快照中3:35:53的修改,可以得到3:35:53時(shí)刻的數(shù)據(jù)。依次類推,最終可以恢復(fù)出所有五個(gè)數(shù)據(jù)塊的初始內(nèi)容集。
也可以直接恢復(fù)某個(gè)時(shí)間點(diǎn)的數(shù)據(jù)。假設(shè)當(dāng)前時(shí)間點(diǎn)為3:35:55,要求恢復(fù)到時(shí)間點(diǎn)3:35:52。遍歷快照,發(fā)現(xiàn)第一個(gè)數(shù)據(jù)塊在此期間,只有過一次修改,發(fā)生在3:35:53,修改之前的內(nèi)容為2,用它覆寫內(nèi)容集中的當(dāng)前值t。同樣第四個(gè)數(shù)據(jù)塊的內(nèi)容在3:35:54修改時(shí)保存的值h覆寫內(nèi)容集中的當(dāng)前值。對于第二個(gè)和第三個(gè)數(shù)據(jù)塊,沒有被修改過,保存當(dāng)前的內(nèi)容不變。最關(guān)鍵的是第五個(gè)數(shù)據(jù)塊,它有兩次修改,分別發(fā)生在3:35:52和3:35:54,取最早一次的修改,或者說離恢復(fù)點(diǎn)最近的修改,將修改時(shí)保存在快照中的數(shù)據(jù)(為E)覆寫內(nèi)容集中的當(dāng)前值。最終所有數(shù)據(jù)塊處理完畢,則3:35:52時(shí)間點(diǎn)的數(shù)據(jù)也就被正確地恢復(fù)出來了。
Linux CDP是內(nèi)核中基于塊的連續(xù)數(shù)據(jù)保護(hù)模塊,這個(gè)模塊在數(shù)據(jù)塊級別提供連續(xù)數(shù)據(jù)保護(hù)能力。連續(xù)數(shù)據(jù)保護(hù)是一種備份和恢復(fù)技術(shù),它持續(xù)地捕獲所有I/O請求,并且為這些請求打上時(shí)間戳標(biāo)志。它將數(shù)據(jù)變化以及時(shí)間戳保存下來,以便恢復(fù)到過去的任意時(shí)刻。因此,這個(gè)模塊支持?jǐn)?shù)據(jù)的任意時(shí)刻映像。在Linux CDP實(shí)現(xiàn)中,涉及三個(gè)設(shè)備:主機(jī)磁盤(Host Disk)設(shè)備、CDP倉庫(Repository)設(shè)備和CDP元數(shù)據(jù)(Metadata)設(shè)備。
對主機(jī)磁盤設(shè)備數(shù)據(jù)塊在各個(gè)時(shí)刻所做的寫操作都被記錄下來,被順序保存到CDP倉庫設(shè)備中,同時(shí)對應(yīng)的元數(shù)據(jù)也被保存在CDP元數(shù)據(jù)設(shè)備中。元數(shù)據(jù)包括以下信息:數(shù)據(jù)塊被寫入主機(jī)磁盤設(shè)備的時(shí)間、數(shù)據(jù)塊的以字節(jié)為單位的長度、倉庫設(shè)備中對應(yīng)數(shù)據(jù)塊的起始扇區(qū)編號,以及數(shù)據(jù)塊在主機(jī)磁盤設(shè)備中的起始扇區(qū)編號。
對主機(jī)磁盤設(shè)備的寫請求被分解為三個(gè)過程:
? 將原始數(shù)據(jù)塊的內(nèi)容寫到CDP倉庫設(shè)備的快照數(shù)據(jù)塊中;
? 將元數(shù)據(jù)(原始數(shù)據(jù)塊的內(nèi)容、快照數(shù)據(jù)塊的編號以及寫請求時(shí)間)寫到CDP元數(shù)據(jù)設(shè)備中;
? 將更新的內(nèi)容寫到主機(jī)磁盤設(shè)備上的原始數(shù)據(jù)塊中。
恢復(fù)過程是用戶空間通過ioctl來執(zhí)行的,調(diào)用時(shí)指定要恢復(fù)的時(shí)間點(diǎn):
? 順序讀取CDP元數(shù)據(jù)設(shè)備的所有扇區(qū),構(gòu)造一個(gè)從主機(jī)磁盤設(shè)備數(shù)據(jù)塊到CDP倉庫設(shè)備的(在這個(gè)時(shí)間點(diǎn)之前)更新數(shù)據(jù)塊的映射,其結(jié)果保存在一個(gè)映射鏈表中;
? 根據(jù)映射鏈表從CDP倉庫設(shè)備中讀取更新的數(shù)據(jù)塊,構(gòu)造一個(gè)數(shù)據(jù)更新鏈表;
? 將數(shù)據(jù)更新鏈表中的數(shù)據(jù)塊都恢復(fù)到主機(jī)磁盤設(shè)備中。
當(dāng)然上面只是關(guān)于CDP技術(shù)原理的一個(gè)闡述,實(shí)際上CDP產(chǎn)品要解決很多的問題:如何節(jié)省保存數(shù)據(jù)修改的空間、如何提升寫及恢復(fù)的性能,以及如何向用戶提供更友好的使用界面和部署體驗(yàn)等。市場上有很多成熟的CDP產(chǎn)品。從基本單元上講,有的是基于塊級的CDP產(chǎn)品,有的是基于文件級的,它們的基本原理都是“寫前復(fù)制+時(shí)間戳”,只不過一個(gè)是在塊級的復(fù)制,一個(gè)是在文件級的復(fù)制。從數(shù)據(jù)路徑上看,一類是“帶外(Out of Bound)”產(chǎn)品,即快照的產(chǎn)生獨(dú)立于業(yè)務(wù)操作請求,另一類則是“帶內(nèi)(Inband)”的產(chǎn)品,帶內(nèi)CDP產(chǎn)品對主機(jī)透明,但會影響存儲的輸入、輸出性能;而帶外CDP產(chǎn)品則需要在主機(jī)上安裝代理或者其他的設(shè)置,容易同應(yīng)用更緊密地結(jié)合。此外,從表現(xiàn)形式來看,有些CDP產(chǎn)品是純軟件,被安裝在主機(jī)上運(yùn)行,而另一類則為硬件產(chǎn)品(存儲設(shè)備)。
1.2.4 RAID技術(shù)
1988年6月,在ACM的一個(gè)國際會議上,美國加州大學(xué)伯克利分校的Patterson、Gibson和Katz發(fā)表了一篇文章,最先提出RAID的概念。RAID的本意是“廉價(jià)磁盤冗余陣列”。當(dāng)時(shí)高端計(jì)算機(jī)系統(tǒng)采用的都是昂貴的單個(gè)大容量磁盤,但是伯克利的學(xué)者們認(rèn)為應(yīng)該可以用小的廉價(jià)磁盤組成的陣列來代替。
在這之后,RAID技術(shù)獲得了迅速發(fā)展。隨著應(yīng)用的普及,RAID開始進(jìn)入了企業(yè)級市場,因此RAID咨詢委員會(RAID Advisory Board)將RAID中的字母I從Inexpensive改成Independent,RAID就成為“獨(dú)立冗余磁盤陣列”的簡稱。
使用RAID的目的在于:
? 將若干個(gè)磁盤組成一個(gè)大的邏輯磁盤來使用,提高單個(gè)邏輯盤的容量;
? 在處理I/O請求時(shí)對磁盤進(jìn)行并發(fā)訪問,實(shí)現(xiàn)高的吞吐率;
? 對磁盤上的數(shù)據(jù)實(shí)行冗余存放,實(shí)現(xiàn)容錯(cuò)功能;
? 相對于達(dá)到同樣容量的吞吐率的單個(gè)磁盤,價(jià)格低廉。
根據(jù)RAID對磁盤的組織方式的不同,RAID分為不同的級別。最初提出5種基本RAID級別是RAID1/ RAID2/RAID3/RAID4/RAID5,后來,添加兩種不提供冗余的Linear RAID和RAID0,以及支持雙磁盤容錯(cuò)的RAID6,此外,一些廠商也將不同級別的RAID組合起來,提升性能和可靠性,形成了各種組合RAID。這些分類方法和術(shù)語已被廣泛接受,也為本文所沿用。
1.條帶化模型
在傳統(tǒng)的數(shù)據(jù)存儲方案中,每個(gè)磁盤獨(dú)立編址,而RAID對所有成員磁盤統(tǒng)一編址,并采取了一種特殊的“條帶化(Striping)”方案。每個(gè)成員磁盤的存儲空間被劃分為相等大小的“條帶(Stripe)”,每一個(gè)這樣的條帶都被稱為“條帶單元(Stripe Unit)”,同時(shí),寫到RAID中的數(shù)據(jù)信息也被分為若干個(gè)相等大小的“條帶”。這些邏輯上連續(xù)的數(shù)據(jù)信息條帶依照一定的映射方式交叉存儲到不同物理磁盤的存儲空間條帶中。條帶化模型的圖示如圖1-28所示。

圖1-28 條帶化模型
條帶大致分為兩種:細(xì)粒度條帶和粗粒度條帶。在細(xì)粒度條帶中,條帶單元的尺寸很小,通常為1位或者是1字節(jié),任何I/O請求都需要訪問陣列中的所有磁盤,雖然可以獲得很高的數(shù)據(jù)傳輸率,但在同一時(shí)刻只能為一個(gè)I/O請求服務(wù)。而采用粗粒度條帶的磁盤陣列,條帶單元較大,以扇區(qū)或者塊為單位,小的I/O請求只訪問一部分磁盤,大的I/O請求才訪問所有的磁盤,因此既能為小請求提供并行服務(wù),同時(shí)也能夠?yàn)榇笳埱筇峁﹤鬏斔俾省?/p>
條帶單元可以用來存儲不同的信息:如果存儲的是用戶數(shù)據(jù),稱為“數(shù)據(jù)單元(Data Unit)”;如果用來存儲冗余校驗(yàn)數(shù)據(jù),稱為“校驗(yàn)單元(Parity Unit)”。數(shù)據(jù)單元和校驗(yàn)單元統(tǒng)稱“信息單元(Information Unit)”,這是和閑置不用的條帶單元,即“備用單元(Spare Unit)”相對應(yīng)的。而備用單元是準(zhǔn)備在信息單元故障時(shí),用來保存信息單元的數(shù)據(jù)的。
在包含了容錯(cuò)機(jī)制的RAID中,若干個(gè)數(shù)據(jù)單元以及由這些數(shù)據(jù)單元通過校驗(yàn)計(jì)算得到的一個(gè)或若干個(gè)校驗(yàn)單元所組成的集合,稱為“校驗(yàn)組(Parity Group)”。校驗(yàn)組是基于校驗(yàn)計(jì)算角度提出的概念,某些RAID的校驗(yàn)組中包含多個(gè)數(shù)據(jù)單元和一個(gè)校驗(yàn)單元,而另一些RAID的校驗(yàn)組可能包含多個(gè)數(shù)據(jù)單元和多個(gè)校驗(yàn)單元。
計(jì)算校驗(yàn)單元的算法可以是簡單的異或算法,也可能是如Hamming或者Reed-Solomon的編碼算法。校驗(yàn)單元在磁盤陣列中的散布方式可分為兩類:一類是集中于一個(gè)或若干個(gè)校驗(yàn)盤;另一類是均勻分布到不同的磁盤上。數(shù)據(jù)單元、校驗(yàn)單元和備用單元的不同散布方式,構(gòu)成了RAID的特殊物理布局。
對RAID物理布局的分析通常以“校驗(yàn)條帶(Parity Stripe)”為基礎(chǔ)。校驗(yàn)條帶是從容錯(cuò)角度提出的概念,是指能夠?qū)崿F(xiàn)某種容錯(cuò)能力的若干個(gè)條帶單元的集合。換句話說,校驗(yàn)條帶是最小的自保護(hù)的條帶單元集合。假設(shè)容許k個(gè)故障,則條帶中丟失任何k個(gè)單元均可由其他單元恢復(fù)。在傳統(tǒng)的容單磁盤錯(cuò)的陣列中,校驗(yàn)條帶和校驗(yàn)組是一致的。而在容多個(gè)并發(fā)磁盤錯(cuò)的陣列中,校驗(yàn)條帶根據(jù)編碼方式的不同,有可能包含多個(gè)校驗(yàn)組。
本節(jié)介紹幾種基本的RAID級別,包括Linear RAID、RAID0、RAID1、RAID2、RAID3、RAID4、RAID5和RAID6。對于每種RAID,我們將從容量、性能和容錯(cuò)方面進(jìn)行闡述。本節(jié)中的存儲空間利用率(或稱存儲效率)為所有數(shù)據(jù)磁盤(不包含校驗(yàn)磁盤)有效容量對所有磁盤(包含校驗(yàn)磁盤)有效容量的比率。
2.線性RAID
線性RAID將多個(gè)物理磁盤順序串聯(lián)成一個(gè)邏輯磁盤。在寫線性RAID時(shí),首先寫第一個(gè)磁盤,寫滿后接著寫第二個(gè)磁盤,依次類推。因此線性RAID稱為“線性”(Linear)或“追加”(Appended)模式。
線性RAID由至少一個(gè)成員磁盤組成,組成線性RAID的磁盤并不需要有相同的容量,線性RAID的容量為所有成員磁盤的容量之和,存儲空間利用率為100%。
在線性RAID中,對單個(gè)讀/寫而言,性能并沒有改進(jìn),它完全決定于對應(yīng)成員磁盤的讀/寫性能。但是,如果同時(shí)有多個(gè)用戶在使用線性RAID設(shè)備,并且碰巧第一個(gè)用戶在訪問第一個(gè)成員磁盤上的數(shù)據(jù),而第二個(gè)用戶在訪問第二個(gè)成員磁盤上的數(shù)據(jù),這時(shí)性能就“提高”了。
線性RAID不提供數(shù)據(jù)冗余。如果一個(gè)成員磁盤故障,則將損失其上的所有數(shù)據(jù)??墒且灿锌赡芑謴?fù)線性RAID上的某些數(shù)據(jù),因?yàn)閷ξ募到y(tǒng)而言,只是出了一個(gè)大的數(shù)據(jù)“漏洞”,在該“漏洞”影響范圍之外的數(shù)據(jù)還是可以恢復(fù)的。
3.RAID0
從RAID0開始,采用了“條帶化”的思想。寫到邏輯陣列的數(shù)據(jù)被分成多個(gè)條帶,依次被重定位到各個(gè)物理磁盤上,當(dāng)最后一個(gè)磁盤寫好之后,又從第一個(gè)磁盤開始順序?qū)?。因此RAID0也稱為“條帶”(Striped)模式。布局如圖1-29所示。
RAID0由至少兩個(gè)成員磁盤組成,各個(gè)磁盤理論上并不一定具有相同的存儲容量,RAID0的容量為所有成員磁盤的容量之和,存儲空間利用率為100%。
通過在各成員磁盤之間并行讀/寫,RAID0極大地提高了I/O性能。如果不考慮控制器和總線帶寬的因素,則由n個(gè)相同磁盤構(gòu)成的RAID0能提供幾乎n倍的讀/寫性能。
RAID0不提供數(shù)據(jù)冗余。只要其中一個(gè)磁盤出了問題,那么整個(gè)陣列的數(shù)據(jù)都會不保了。因?yàn)閷ξ募到y(tǒng)而言,這時(shí)出現(xiàn)了大量小的數(shù)據(jù)“漏洞”,其影響甚大,足以使得整個(gè)陣列崩潰。從這一點(diǎn)來說,要比線性RAID更嚴(yán)重。
4.RAID1
從技術(shù)上講,線性RAID和RAID0都不是RAID,因?yàn)镽AID代表“廉價(jià)(獨(dú)立)磁盤冗余陣列”,而線性RAID和RAID0都不提供任何類型的數(shù)據(jù)冗余。第一種傳統(tǒng)意義上(提供數(shù)據(jù)冗余)的RAID是RAID1,寫到RAID1的數(shù)據(jù)被分成多個(gè)條帶,這些條帶同時(shí)寫到組成的所有成員磁盤中。RAID1成員磁盤互為鏡像,因此RAID1稱為“鏡像”(Mirror)模式,布局如圖1-30所示。

圖1-29 RAID0布局

圖1-30 RAID1布局
RAID1至少由兩個(gè)成員磁盤組成。組成RAID1的成員磁盤應(yīng)該具有相同的容量,否則其容量決定于容量最小的成員磁盤。對于由n個(gè)相同容量的成員磁盤組成的RAID1,其容量等于單個(gè)成員磁盤的容量,存儲空間利用率為。
隨著成員磁盤的增加,對RAID1的寫操作性能下降,因?yàn)槊總€(gè)寫操作需要等待對所有成員磁盤的寫操作執(zhí)行成功。但是,由于可以從成員磁盤上并行讀取數(shù)據(jù),RAID1的讀操作性能顯著提升。事實(shí)上,大多數(shù)實(shí)現(xiàn)是采用負(fù)載均衡技術(shù)來優(yōu)化RAID1讀操作性能的。
RAID1提供數(shù)據(jù)冗余。因?yàn)槊總€(gè)成員磁盤都保存了數(shù)據(jù)的一個(gè)副本,因此只要有一個(gè)成員磁盤正常,數(shù)據(jù)就得以保存。也就是說,由n個(gè)成員磁盤組成的RAID1可以容許n-1個(gè)成員磁盤同時(shí)故障。
同其他提供輸入冗余的RAID級別一樣,RAID1分為三種狀態(tài):正常狀態(tài)、降級狀態(tài)和同步狀態(tài)。圖1-31反映了在正常狀態(tài)和降級狀態(tài)下的讀/寫情況。

圖1-31 RAID1在正常和降級狀態(tài)下的讀/寫操作
5.RAID2
RAID2系統(tǒng)將數(shù)據(jù)按照位或者字節(jié)進(jìn)行分割,并寫到陣列中的數(shù)據(jù)磁盤中,同時(shí)根據(jù)Hamming算法計(jì)算糾錯(cuò)碼保存在其他磁盤中,因此,RAID2也稱為“采用位(字節(jié))交叉訪問及Hamming碼校驗(yàn)”的模式,布局如圖1-32所示。

圖1-32 RAID2布局
在RAID2中,所有數(shù)據(jù)磁盤和校驗(yàn)磁盤應(yīng)該具有相同的容量。校驗(yàn)磁盤的數(shù)目正比于以2為底、磁盤總數(shù)的LOG值,隨著數(shù)據(jù)磁盤數(shù)目的增長,存儲效率也得到提升。
RAID2提供數(shù)據(jù)冗余。使用多個(gè)校驗(yàn)磁盤的目的是定位故障磁盤,一旦定位好,只需要一個(gè)校驗(yàn)磁盤即可恢復(fù)故障磁盤中的數(shù)據(jù)。RAID2主要在RAID早期使用。如今的磁盤包含精確電路實(shí)現(xiàn)錯(cuò)誤檢測和糾正,并且定義復(fù)雜的協(xié)議和外部進(jìn)行通信,陣列控制器可以從磁盤的狀態(tài)信息,或者它們是否遵照通信協(xié)議直接識別出故障磁盤。這樣,就沒有必要通過額外的冗余磁盤來檢測故障磁盤,因此RAID2幾乎不再實(shí)際使用了。
6.RAID3
在RAID2,去掉多余的校驗(yàn)磁盤,這種改進(jìn)的結(jié)果就是RAID3。RAID3系統(tǒng)將數(shù)據(jù)按照位或者字節(jié)進(jìn)行分割,寫到陣列的數(shù)據(jù)磁盤中,同時(shí)將對應(yīng)的奇偶校驗(yàn)值寫入專門的校驗(yàn)磁盤。RAID3被稱為“采用位(字節(jié))交叉訪問及專用奇偶校驗(yàn)磁盤”的模式,布局如圖1-33所示。

圖1-33 RAID3布局
組成RAID3的數(shù)據(jù)磁盤和校驗(yàn)磁盤應(yīng)該具有相同的容量。對于由n個(gè)相同容量的成員磁盤組成的RAID3,其容量等于n-1個(gè)成員磁盤的容量,存儲空間利用率為。
由于RAID3中條帶劃分較小,使得每個(gè)讀請求訪問所有的數(shù)據(jù)磁盤,每個(gè)寫請求訪問所有的數(shù)據(jù)磁盤以及校驗(yàn)磁盤。RAID3經(jīng)常處于磁頭同步狀態(tài)以減少等待時(shí)間,RAID3適于單一大文件以高數(shù)據(jù)率進(jìn)行讀/寫的應(yīng)用,對于多用戶并發(fā)發(fā)起眾多互不相關(guān)磁盤操作的應(yīng)用則不適宜。
RAID3實(shí)現(xiàn)了單盤容錯(cuò)冗余。當(dāng)一個(gè)硬盤發(fā)生故障,除故障盤外,寫操作將繼續(xù)對數(shù)據(jù)盤和校驗(yàn)盤進(jìn)行操作,而讀操作是通過對剩余數(shù)據(jù)盤和校驗(yàn)盤的異或計(jì)算重構(gòu)故障盤上應(yīng)有的數(shù)據(jù)來進(jìn)行的。圖1-34反映了在正常狀態(tài)和降級狀態(tài)下的讀/寫情況。

圖1-34 RAID3在正常和降級狀態(tài)下的讀/寫操作
7.RAID4
與RAID3相似,區(qū)別是:RAID3是按位或字節(jié)交叉存取,而RAID4是按塊(扇區(qū))存取,因此RAID4被稱為“采用塊交叉訪問和專用奇偶校驗(yàn)磁盤”的模式,布局如圖1-35所示。
同RAID3一樣,組成RAID4的數(shù)據(jù)磁盤和校驗(yàn)磁盤應(yīng)該具有相同的容量。對于由n個(gè)相同容量的成員磁盤組成的RAID4,其容量等于n-1個(gè)成員磁盤的容量,存儲空間利用率為。

圖1-35 RAID4布局
RAID4中的每一個(gè)數(shù)據(jù)盤都可以同時(shí)滿足一個(gè)單獨(dú)用戶的請求,無須像RAID3那樣,哪怕每一次小I/O操作也要涉及全組。正常情況下,讀操作只涉及數(shù)據(jù)盤,而寫操作涉及一個(gè)數(shù)據(jù)盤和一個(gè)校驗(yàn)盤。但是,對于隨機(jī)分散的小數(shù)據(jù)量I/O,固定的校驗(yàn)盤又成為I/O瓶頸,每次寫都要對校驗(yàn)盤操作,所以發(fā)生爭用校驗(yàn)盤的問題。
RAID4實(shí)現(xiàn)了單盤容錯(cuò),在正常狀態(tài)和降級狀態(tài)下的讀/寫操作過程,和后面要介紹的RAID5類似。
假設(shè)數(shù)據(jù)單元標(biāo)號為chunk_number,RAID磁盤數(shù)為raid_disks,數(shù)據(jù)盤數(shù)為data_disks,所在條帶編號為stripe=chunk_number/data_disks。
然后計(jì)算在條帶內(nèi)的數(shù)據(jù)磁盤和校驗(yàn)磁盤編號。對于RAID4,校驗(yàn)盤編號為data_disks,數(shù)據(jù)盤編號為chunk_number%data_disks。
8.RAID5
RAID5與RAID4類似,但與RAID4擁有獨(dú)立校驗(yàn)磁盤不同,RAID5是在陣列中所有磁盤上存儲校驗(yàn)信息。RAID5的主要優(yōu)勢在于它可以防止校驗(yàn)磁盤本身成為讀/寫瓶頸。因此RAID5也被稱為“采用塊交叉訪問及校驗(yàn)信息均勻分布”的模式,布局如圖1-36所示。

圖1-36 RAID5布局
因?yàn)樾r?yàn)磁盤中只包含校驗(yàn)信息,而不包含數(shù)據(jù),校驗(yàn)磁盤不參與讀過程,使得讀性能比將數(shù)據(jù)和校驗(yàn)分布到所有磁盤上的冗余方案稍低。
假設(shè)有n個(gè)數(shù)據(jù)磁盤D0、D1、…、Dn-1,計(jì)算:
P是通常的XOR校驗(yàn)。
如果任意一個(gè)磁盤損壞,可以通過XOR校驗(yàn)從其他磁盤恢復(fù)這個(gè)失效的磁盤,即有
校驗(yàn)分布算法
RAID5的校驗(yàn)分布算法有:向左非對稱、向右非對稱、向左對稱和向右對稱,如圖1-37所示?;旧?,左/右是指校驗(yàn)信息如何分布,而對稱/非對稱是指數(shù)據(jù)如何分布。“左”算法中,校驗(yàn)從最后一個(gè)磁盤開始,每一個(gè)條帶將校驗(yàn)向靠近第一個(gè)磁盤的方向移動一個(gè)磁盤的位置(必要時(shí)重繞)。而“右”算法則相反,其校驗(yàn)從第一個(gè)磁盤開始,每一個(gè)條帶將校驗(yàn)向靠近最后一個(gè)磁盤的方向移動一個(gè)磁盤的位置(必要時(shí)重繞)?!胺菍ΨQ”算法將給定條帶的數(shù)據(jù)塊按簡單的順序方式放置,必要時(shí)跳過條帶,并且總是從第一個(gè)磁盤上的第一個(gè)條帶的數(shù)據(jù)塊開始。與之不同的是,“對稱”算法并不是將條帶的第一個(gè)塊放在第一個(gè)磁盤上,而是連續(xù)將數(shù)據(jù)塊按順序磁盤序列的方式分布,只是在必要時(shí)重繞回第一個(gè)磁盤。因此對稱算法對于大量順序讀操作有更好的性能,例如,因?yàn)閷?shí)際讀磁盤是均勻跨多個(gè)磁盤的。

圖1-37 RAID5校驗(yàn)分布算法
讀/寫操作
RAID5在正常和降級狀態(tài)下的讀操作,如圖1-38所示。

圖1-38 RAID5在正常和降級狀態(tài)下的讀操作
正常讀:如果要讀取的磁盤正常(不管是否有一個(gè)其他磁盤發(fā)生故障),我們直接從包含數(shù)據(jù)的條帶中讀取。
降級讀:如果要讀取的磁盤故障,而其他磁盤均正常,則從陣列中除故障磁盤之外的所有磁盤上讀取對應(yīng)條帶的數(shù)據(jù),進(jìn)行異或,即為故障磁盤上要讀取的數(shù)據(jù)。
在正常情況下,RAID5的寫操作分為三種類型,如圖1-39所示。

圖1-39 RAID5在正常狀態(tài)下的寫操作
? 整條寫(Full-stripe Write):整條寫需要修改奇偶校驗(yàn)群組中所有的條帶單元,因此新的奇偶校驗(yàn)值可以根據(jù)所有新的條帶數(shù)據(jù)計(jì)算得到。例如,在圖1-39中,同時(shí)寫條帶0、條帶1、條帶2和條帶3將導(dǎo)致完整條帶寫,直接根據(jù)這些條帶計(jì)算奇偶校驗(yàn)值,不需要額外的讀/寫操作。因此,整條寫是最有效的寫類型。
? 重構(gòu)寫(Reconstruct Write):在正常情況下,如果要寫入的磁盤數(shù)目超過陣列磁盤數(shù)目的一半,采取重構(gòu)寫方式。在重構(gòu)寫中,從不需要修改的條帶上讀取數(shù)據(jù),再和需要修改的條帶上的新數(shù)據(jù)計(jì)算奇偶校驗(yàn)值,并將新的條帶數(shù)據(jù)和新的奇偶校驗(yàn)值一并寫入。例如,在圖1-39中,同時(shí)寫條帶0、條帶1、條帶2將導(dǎo)致重構(gòu)寫。磁盤陣列軟件將首先讀取條帶3的數(shù)據(jù),再和條帶0、1、2的新數(shù)據(jù)一起計(jì)算校驗(yàn)值。顯然,重構(gòu)寫要涉及更多的I/O操作,因此效率比整條寫低。
? 讀改寫(Read-Modify Write):在正常情況下,如果要寫入的磁盤數(shù)目不足陣列磁盤數(shù)目的一半,采取讀改寫方式。讀改寫過程如下:(1)從需要修改的條帶上讀取舊的數(shù)據(jù);(2)從條帶上讀取舊的奇偶校驗(yàn)值;(3)根據(jù)舊數(shù)據(jù)、舊奇偶校驗(yàn)值和需要修改的條帶上的新數(shù)據(jù)計(jì)算新的奇偶校驗(yàn)值;(4)寫入新的數(shù)據(jù)和新的奇偶校驗(yàn)值。這個(gè)過程中包含讀取、修改、寫入的一個(gè)循環(huán)周期,因此稱為讀改寫。例如,在圖1-39中,寫條帶0將產(chǎn)生讀改寫:磁盤陣列軟件首先讀取條帶0以及校驗(yàn)0~3的舊值,再和條帶0的新值一道計(jì)算新的奇偶校驗(yàn)值。讀改寫要讀取舊的數(shù)據(jù)和舊的奇偶校驗(yàn)值,故效率比整條寫低。
在有的文獻(xiàn)中,將讀改寫也稱為小寫(Small Write),而將重構(gòu)寫稱為大寫(Large Write)。在這里,大和小表示I/O請求數(shù)相對于在奇偶校驗(yàn)組中條帶單元的多少。正常情況進(jìn)行非整條寫時(shí),讀改寫和重改寫是兩種可能的方案,系統(tǒng)會根據(jù)實(shí)際情況,選擇合適的方法,使得I/O總數(shù)目達(dá)到最小。
如圖1-40所示,在降級情況下,如果要寫入的數(shù)據(jù)磁盤出現(xiàn)故障,可采用類似于重構(gòu)寫的方式,從其他磁盤上讀取對應(yīng)條帶的數(shù)據(jù)和舊的校驗(yàn)值,并計(jì)算新的校驗(yàn)值,寫入校驗(yàn)盤中。唯一不同之處在于:故障磁盤略過不寫。

圖1-40 RAID5在降級狀態(tài)下的寫操作
在某個(gè)非目標(biāo)盤的數(shù)據(jù)磁盤故障情況下,總是采用讀改寫的方式,從要寫入的磁盤和校驗(yàn)盤上讀取舊的數(shù)據(jù),和新的磁盤數(shù)據(jù)進(jìn)行異或,計(jì)算新的校驗(yàn)值,然后寫入新的數(shù)據(jù)和新的校驗(yàn)值。
如果校驗(yàn)盤損壞,我們直接寫入要修改的磁盤。
9.RAID6
傳統(tǒng)的單一奇偶校驗(yàn)RAID技術(shù),能為單個(gè)故障磁盤驅(qū)動器提供保護(hù)。需要警告的是,它無法恢復(fù)兩個(gè)磁盤同時(shí)故障的情況,并且在重構(gòu)故障磁盤時(shí)也必須確保不發(fā)生其他磁盤故障,如果出現(xiàn)上面任何一種事件,那么保留在RAID陣列中的部分或所有數(shù)據(jù)就可能會丟失。應(yīng)用需要更高一級的RAID數(shù)據(jù)保護(hù),RAID6便應(yīng)運(yùn)而生。
RAID6提供雙磁盤冗余,即陣列中的兩個(gè)磁盤失效時(shí),陣列仍然能夠繼續(xù)工作。根據(jù)所應(yīng)用的計(jì)算方法以及計(jì)算對象的不同,可以將RAID6的實(shí)現(xiàn)分為兩大類:一維冗余(One Dimensional Redundancy)和二維冗余(Two Dimensional Redundancy)。在一維冗余中,對相同的數(shù)據(jù)單元集采用兩種不同的校驗(yàn)計(jì)算方法,當(dāng)出現(xiàn)兩個(gè)磁盤故障時(shí),這兩種計(jì)算方法可以保證從現(xiàn)存信息中解出具有兩個(gè)未知數(shù)的方程式,從而恢復(fù)故障磁盤中的信息。而在二維冗余中,只采用一種校驗(yàn)計(jì)算方法,但是應(yīng)用到不同的數(shù)據(jù)單元集合上,靈活地設(shè)計(jì)方程式組,并能夠從中求解具有最多兩個(gè)未知數(shù)。
(1)RAID 6的一維冗余
Iceberg RAID、HP RAID ADG和Linux RAID6采用一維冗余技術(shù)。通常用P和Q來表示一維冗余中的校驗(yàn)數(shù)據(jù)計(jì)算方法,因此一維冗余也被稱為P+Q方法。RAID6的P+Q方案如圖1-41所示。

圖1-41 RAID6的P+Q方案
假設(shè)有n個(gè)數(shù)據(jù)單元D0、D1、…、Dn-1,P可以采用通常的XOR校驗(yàn)計(jì)算,而Q則采用Reed Solomon編碼形式的校驗(yàn),則有:
其中g(shù)是域生成子(使用g={02})。
如果任意一個(gè)磁盤損壞,通過P校驗(yàn)從其他磁盤恢復(fù)這個(gè)失效的磁盤,這和RAID5的原理相同。
如果損失的是校驗(yàn)數(shù)據(jù),只需根據(jù)上述公式重新計(jì)算即可。
如果損失的是數(shù)據(jù)和Q校驗(yàn)值,可以通過P校驗(yàn)先計(jì)算出數(shù)據(jù),然后再根據(jù)公式2計(jì)算得到Q校驗(yàn)值。
如果損失的是數(shù)據(jù)和P校驗(yàn)值,可以通過Reed Solomon編碼形式的Q校驗(yàn)先計(jì)算出數(shù)據(jù),然后再根據(jù)公式1計(jì)算得到P校驗(yàn)值。假設(shè)丟失的是數(shù)據(jù)單元,具體計(jì)算過程是:
假設(shè),根據(jù)公式2計(jì)算
;
從,計(jì)算得到
。
如果損失的是兩個(gè)數(shù)據(jù)值,例如條帶和
,將這些值設(shè)置為0,根據(jù)公式①和②計(jì)算
和
,注意到:
根據(jù)上述方程式計(jì)算得到和
。
(2)RAID 6的二維冗余
二維冗余基于這樣一個(gè)概念:陣列可以邏輯地以矩陣的行和列安排。因此,數(shù)據(jù)的排列以行和列來表示,校驗(yàn)數(shù)據(jù)可作為陣列空間的正交矢量來計(jì)算。為了實(shí)現(xiàn)這個(gè)方法,每一個(gè)數(shù)據(jù)分塊都屬于兩個(gè)正交(分離和獨(dú)立)的條帶,不存在將陣列中任何其他條帶寫入相同校驗(yàn)位置的可能性。
? 2nd-Parity
2nd-Parity方法將數(shù)據(jù)磁盤組織成矩陣,有m個(gè)磁盤用于水平方向n個(gè)數(shù)據(jù)磁盤的校驗(yàn)計(jì)算,n個(gè)磁盤用于垂直方向m個(gè)數(shù)據(jù)磁盤的校驗(yàn)計(jì)算。
校驗(yàn)計(jì)算方程式組如下:
如果同一行的兩個(gè)磁盤出現(xiàn)故障,可以通過列校驗(yàn)盤恢復(fù)這兩個(gè)磁盤中的數(shù)據(jù);或者在通過列校驗(yàn)盤恢復(fù)了其中一個(gè)磁盤的數(shù)據(jù)之后,再通過行校驗(yàn)盤恢復(fù)另一個(gè)磁盤中的數(shù)據(jù)。
如果同一列的兩個(gè)磁盤出現(xiàn)故障,可以通過行校驗(yàn)盤恢復(fù)這兩個(gè)磁盤中的數(shù)據(jù);或者在通過行校驗(yàn)盤恢復(fù)了其中一個(gè)磁盤的數(shù)據(jù)之后,再通過列校驗(yàn)盤恢復(fù)另一個(gè)磁盤中的數(shù)據(jù)。
如果出現(xiàn)故障的兩個(gè)磁盤分屬于不同行和不同列,這時(shí)任意選擇行校驗(yàn)盤或列校驗(yàn)盤來分別恢復(fù)這兩個(gè)磁盤中的數(shù)據(jù)。
從另一個(gè)角度來看,這種恢復(fù)的靈活性反映了冗余信息的“冗余性”。實(shí)際上,在這種方案中,冗余率高達(dá),而存儲空間利用率僅為
,因此,矩陣方案并不實(shí)用,更多地是作為一種理論上的闡述。
? EVEN-ODD
在上面的方法中,采用了兩種類型的冗余:水平冗余(Horizontal Redundancy)和垂直冗余(Vertical Redundancy)。另一種巧妙的設(shè)計(jì)是使用水平冗余和對角冗余(Diagonal Redundancy)來設(shè)計(jì)方程式組。在這一部分,采用了正對角冗余;而在后面例子中,采用了反對角冗余方法。讀者可以根據(jù)這一思路采用水平冗余、正對角冗余和反對角冗余設(shè)計(jì)容許三個(gè)磁盤故障的容錯(cuò)方案。
用EVEN-ODD編碼構(gòu)造的雙容錯(cuò)磁盤陣列可看作維矩陣,如圖1-42所示,其中
為素?cái)?shù)。矩陣每一列對應(yīng)一個(gè)磁盤,共
個(gè)磁盤,前
個(gè)磁盤存放數(shù)據(jù)信息,后兩個(gè)磁盤存儲水平校驗(yàn)和對角校驗(yàn)信息,每個(gè)磁盤均含有
個(gè)條帶單元。水平校驗(yàn)計(jì)算如下:

圖1-42 RAID6的EVEN-ODD方案中水平校驗(yàn)計(jì)算
如圖1-43所示,對角校驗(yàn)計(jì)算如下:
其中

圖1-43 RAID6的EVEN-ODD方案中對角校驗(yàn)計(jì)算
對角冗余有兩種可能性:校驗(yàn)位可能為偶數(shù)或奇數(shù)。其奇偶性取決于等式中的S,而S給出了對角、
、...、
的校驗(yàn)值。觀察無窮號(∞)表示的條帶所在的對角線,如果這個(gè)對角有偶數(shù)個(gè)1,那么在計(jì)算對角冗余時(shí)的校驗(yàn)值為0(EVEN);否則,校驗(yàn)值為1(ODD),這就是EVEN-ODD方案的原因。
上面定義的矩陣可以恢復(fù)任意兩列丟失的信息。假設(shè),有兩個(gè)磁盤損壞(磁盤i和磁盤j),其中0≤i<j≤m+1,這里可分為四種情況:
?和
,即兩個(gè)校驗(yàn)磁盤失效,我們可以從上述等式重新計(jì)算校驗(yàn)值;
?而
,一個(gè)數(shù)據(jù)磁盤和水平冗余磁盤損壞,我們可以通過對角校驗(yàn)先計(jì)算出數(shù)據(jù),然后再計(jì)算得到水平冗余校驗(yàn)值。計(jì)算數(shù)據(jù)磁盤i的步驟如下:
其中,我們假設(shè),對于0≤l≤m+1,然后,我們有
,對于所有的0≤k≤m-2
?而
,一個(gè)數(shù)據(jù)磁盤和對角冗余磁盤損壞,我們可以通過水平校驗(yàn)先計(jì)算出數(shù)據(jù),然后再計(jì)算得到對角冗余校驗(yàn)值;
?并且
,兩個(gè)數(shù)據(jù)磁盤損壞,
同樣,對于0≤l≤m+1,假設(shè),我們計(jì)算對角校驗(yàn)值如下:
,即S是水平校驗(yàn)和對角校驗(yàn)數(shù)據(jù)的異或值。
對于0≤u≤m-1,計(jì)算水平Syndrome和對角Syndrome如下:
注意到和
,其中
表示x模m的值。
利用RAID6的EVEN-ODD恢復(fù)兩個(gè)數(shù)據(jù)磁盤故障如圖1-44所示,具體的恢復(fù)思路如下:在最后添加一行條帶并清零()。根據(jù)損壞的磁盤編號i和j(
),計(jì)算得到步長為
。設(shè)置開始恢復(fù)的當(dāng)前指示值s為
,依次恢復(fù)磁盤j和磁盤i對應(yīng)于s的條帶:
,
,隨后根據(jù)步長修改當(dāng)前指示值s,使
。如此循環(huán),直至
時(shí)結(jié)束。

圖1-44 利用RAID6的EVEN-ODD算法恢復(fù)兩個(gè)數(shù)據(jù)磁盤故障
? NetApp Dual DP
如果讀者對理解上面的計(jì)算方法有困難的話,可以通過NetApp Dual DP的一個(gè)具體數(shù)據(jù)恢復(fù)實(shí)例來理解。
從DATAONTAP 6.5版開始,NetApp推出了雙校驗(yàn)RAID,叫做RAID DP(Dual Protection,雙磁盤保護(hù))。本文給出RAID DP的雙磁盤故障恢復(fù)過程,說明RAID DP如何做到既能不間斷地提供數(shù)據(jù)訪問,又能同時(shí)對兩塊故障磁盤上損失的數(shù)據(jù)進(jìn)行重建。
在本質(zhì)上,RAID DP基于傳統(tǒng)的RAID4技術(shù),并采用兩個(gè)固定的校驗(yàn)磁盤:水平校驗(yàn)磁盤和對角校驗(yàn)磁盤。水平校驗(yàn)磁盤對RAID DP中的數(shù)據(jù)磁盤處于同一水平方向條帶的奇偶校驗(yàn)值進(jìn)行存儲,而對角校驗(yàn)磁盤則對RAID DP中的數(shù)據(jù)磁盤和水平校驗(yàn)磁盤在處于對角線方向條帶的奇偶校驗(yàn)值進(jìn)行存儲。通過這兩種奇偶校驗(yàn)條帶,即使RAID DP中有兩個(gè)磁盤發(fā)生故障,也能得到數(shù)據(jù)保護(hù)。
RAID DP的實(shí)現(xiàn)思路類似于EVEN-OLD,只是由于RAID DP將水平校驗(yàn)磁盤納入到對角奇偶校驗(yàn)值的計(jì)算當(dāng)中,因此它將磁盤的條帶劃分為的矩陣(m為素?cái)?shù)),而不是像EVEN-OLD中那樣的
矩陣。
在RAID DP中,仍然使用了傳統(tǒng)的RAID4水平奇偶校驗(yàn)結(jié)構(gòu),并且這種結(jié)構(gòu)已成為RAID DP結(jié)構(gòu)的子集。實(shí)際上,如果是單一磁盤故障,或是從壞數(shù)據(jù)塊中的讀取錯(cuò)誤,或者出現(xiàn)誤碼,那么RAID4的行奇偶校驗(yàn)方法就是進(jìn)行數(shù)據(jù)恢復(fù)的唯一手段,無需采用RAID DP。在這種情況下,RAID DP的對角線奇偶校驗(yàn)組件僅僅是行奇偶校驗(yàn)組件周圍的保護(hù)層。
圖1-45給出了在m為5時(shí)RAID DP的條帶化模型,以及各個(gè)條帶在某時(shí)刻的數(shù)據(jù)“快照”。第一列至第四列對應(yīng)四個(gè)數(shù)據(jù)磁盤,第五列為水平校驗(yàn)磁盤,其數(shù)據(jù)由各行的數(shù)據(jù)磁盤計(jì)算得到,例如第一行為11。第六列為對角校驗(yàn)磁盤,其數(shù)據(jù)由同一對角線上數(shù)據(jù)磁盤和水平校驗(yàn)磁盤計(jì)算得到,例如純灰色對角
=01。
假設(shè)這時(shí)有兩個(gè)數(shù)據(jù)磁盤(磁盤1和磁盤2)損壞,反映在圖1-46中,第一、二列中的所有數(shù)據(jù)都丟失了,用黑色圓圈標(biāo)志。
RAID DP首先會尋找一個(gè)鏈來開始重建。務(wù)必記住,當(dāng)在RAID4下為單一磁盤故障重建數(shù)據(jù)時(shí),只有在丟失的元素不超過一個(gè)時(shí),重建才有可能。記住這一點(diǎn)后,我們可以看到,圖1-46正斜線()表示的條帶所在的對角線上只丟失了五個(gè)塊中的一個(gè)(磁盤2的正斜線條帶),借助于仍然存在的四個(gè)條帶,可以重建丟失塊中的數(shù)據(jù)(
=01)。接下來的圖1-47反映了這個(gè)數(shù)據(jù)被恢復(fù)到備用磁盤上的情況。

圖1-45 RAID6恢復(fù)實(shí)例——正常布局

圖1-46 RAID6恢復(fù)實(shí)例——磁盤故障

圖1-47 RAID6恢復(fù)實(shí)例——第一輪
在恢復(fù)了磁盤2正斜線條帶的數(shù)據(jù)后,我們可以看到第一行所在的水平方向上五個(gè)數(shù)據(jù)有了四個(gè),恢復(fù)過程從對角奇偶校驗(yàn)轉(zhuǎn)換至使用水平奇偶校驗(yàn),即利用第五列水平校驗(yàn)磁盤來恢復(fù)第一行丟失的條帶。圖1-47表明磁盤1純灰色()條帶的數(shù)據(jù)已經(jīng)被恢復(fù)到備用磁盤上(
=11)。
無論是水平奇偶校驗(yàn),還是對角奇偶校驗(yàn),數(shù)據(jù)重建均使用XOR算法。下面的圖1-48依次從對角方向和水平方向恢復(fù)了磁盤2純灰色條帶(=01)和磁盤1純白色(
)條帶(
=01)。

圖1-48 RAID6恢復(fù)實(shí)例——第二輪
這時(shí),似乎問題出現(xiàn)了。與我們前面所注意到的一樣,對角校驗(yàn)磁盤并沒有存儲純白色對角方向的奇偶校驗(yàn)數(shù)據(jù),當(dāng)前鏈中沒有額外的條帶來重建磁盤2的純白色條帶。RAID DP將開始尋找新的鏈以開始重建,這時(shí)找到反斜線()表示的條帶所在的對角線,利用現(xiàn)存的其余四個(gè)條帶恢復(fù)出磁盤1反斜線條帶(
00=01),如圖1-49所示。

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

圖1-50 RAID6恢復(fù)實(shí)例——第四輪

圖1-51 RAID6恢復(fù)實(shí)例——第五輪

圖1-52 RAID6恢復(fù)實(shí)例——回到正常狀態(tài)
同樣,我們可以利用這個(gè)實(shí)例理解RAID DP在損壞一個(gè)數(shù)據(jù)磁盤和水平校驗(yàn)磁盤、一個(gè)數(shù)據(jù)磁盤和對角校驗(yàn)磁盤,以及水平校驗(yàn)磁盤和對角校驗(yàn)磁盤后的數(shù)據(jù)重建過程。
? DH1和DH2
DH1和DH2編碼的對角校驗(yàn)比EVEN-ODD編碼簡單,并且校驗(yàn)信息不再存儲于固定校驗(yàn)磁盤,而是均勻散布于整個(gè)磁盤陣列上,因此,不會因頻繁小寫操作而導(dǎo)致出現(xiàn)校驗(yàn)盤的瓶頸問題。
DH1的校驗(yàn)條帶是的單元矩陣,水平校驗(yàn)存儲于矩陣對角線方向,對角校驗(yàn)信息存儲于水平方向,其方案的圖示如圖1-53所示。
DH2的校驗(yàn)條帶是的單元矩陣,水平校驗(yàn)單元布均勻散布,而用額外的校驗(yàn)磁盤存儲,對角校驗(yàn)仍位于最后一行,矩陣右下角位置多出一個(gè)備用。DH2方案的圖示如圖1-54所示。

圖1-53 RAID6的DH1方案

圖1-54 RAID6的DH2方案
1.2.5 “多路徑”技術(shù)
“多路徑”技術(shù)使用一個(gè)以上的物理路徑來訪問網(wǎng)絡(luò)存儲設(shè)備,并通過容錯(cuò)、I/O流量負(fù)載均衡甚至更細(xì)粒度的I/O調(diào)度策略等方式,為網(wǎng)絡(luò)存儲系統(tǒng)提供更高的可用性和性能優(yōu)勢。
存儲設(shè)備有兩個(gè)I/O控制器,每個(gè)I/O控制器上有兩個(gè)連接主機(jī)的端口。存儲設(shè)備中還有n個(gè)磁盤,并假設(shè)每個(gè)磁盤對應(yīng)一個(gè)LUN。對于存儲設(shè)備中的LUN,可以有幾種不同的多路徑訪問方式。
? Active-Active(A/A):如果對于存儲設(shè)備的同一個(gè)LUN的I/O請求訪問可以同時(shí)在兩個(gè)I/O控制器,或者某一個(gè)控制器的兩個(gè)端口上同時(shí)進(jìn)行,則稱之為Active-Active(A/A)型的存儲設(shè)備。如果Active-Active陣列的某個(gè)路徑故障,I/O只需要路由到另一條路徑,這就保證了對保存在陣列的LUN上的數(shù)據(jù)的連續(xù)訪問。
? Active-Passive(A/P)。如果存儲設(shè)備只在一個(gè)(主)I/O控制器(端口)上接受和執(zhí)行對LUN的I/O請求,但是,它可以被切換,或者失敗接管(Fail Over),到從另一個(gè)(次)I/O控制器(端口)來訪問這個(gè)LUN,則它稱為Active-Passive(A/P)型的存儲設(shè)備。這種切換,稱為LUN失敗接管,或者LUN trespass。
1.通用的“多路徑”硬件配置
圖1-55給出了一些通用的“多路徑”硬件配置。在這些配置中,有一個(gè)服務(wù)器及一個(gè)存儲陣列。服務(wù)器上有兩個(gè)主機(jī)適配器,而存儲陣列也有兩個(gè)控制器,分別含有一個(gè)或兩個(gè)端口。假設(shè)存儲陣列上有三個(gè)磁盤驅(qū)動器,每個(gè)驅(qū)動器之包含唯一的LUN。磁盤陣列都可能是Active-Active(能夠在兩個(gè)端口同時(shí)呈現(xiàn)LUN),或Active-Passive(只能夠在一個(gè)端口,而不是同時(shí)在兩個(gè)端口呈現(xiàn)LUN)。
(1)直接連接的磁盤陣列
盡管在實(shí)際中并不常遇到,最簡單的多路徑硬件配置是直接將每個(gè)端口通過線纜直接連接到服務(wù)器的某個(gè)主機(jī)適配器上的。圖1-55①闡述了這種配置。

圖1-55 “多路徑”硬件配置(從左到右依次為①、②、③、④)
在這樣的配置下,服務(wù)器和存儲陣列之間有兩條路徑,它們是:
HBA1?Controller1
HBA2?Controller2
因?yàn)榇疟P陣列包含3個(gè)LUN,而每個(gè)LUN都可以從兩個(gè)端口訪問。操作系統(tǒng)在探測設(shè)備時(shí),3個(gè)LUN分別會在兩條路徑上被檢測到,一共會發(fā)現(xiàn)6個(gè)LUN。操作系統(tǒng)本質(zhì)上并不是能意識多路徑的,如果沒有安裝多路徑軟件,那么它將為每一個(gè)發(fā)現(xiàn)的LUN注冊一個(gè)“設(shè)備”。最終,操作系統(tǒng)發(fā)現(xiàn)的“設(shè)備”數(shù)為6。也就是說,可通過兩個(gè)路徑訪問的同一個(gè)LUN被當(dāng)成了兩個(gè)“設(shè)備”,這是容易理解的,因?yàn)閷Σ僮飨到y(tǒng)來說,代表“設(shè)備”的僅僅是內(nèi)存中的能夠用來發(fā)送SCSI命令的數(shù)據(jù)結(jié)構(gòu)而已。
(2)一個(gè)網(wǎng)絡(luò)存儲交換機(jī)
更常見的多路徑配置,尤其在大的數(shù)據(jù)中心,使用存儲網(wǎng)絡(luò)來連接服務(wù)器和磁盤陣列,圖1-55②闡述了這種配置。假設(shè)采用“開放區(qū)(Open Zone)”策略,即沒有定義訪問控制,每個(gè)主機(jī)適配器可以通過交換機(jī)連接到磁盤陣列的每個(gè)控制器端口。在服務(wù)器和磁盤陣列之間就有了四條路徑,即:
HBA1?Port1?Port2?Controller1
HBA1?Port1?Port4?Controller2
HBA2?Port3?Port2?Controller1
HBA2?Port3?Port4?Controller2
在這種配置下,操作系統(tǒng)發(fā)現(xiàn)的“設(shè)備”數(shù)是12(3個(gè)LUN在4個(gè)路徑上)。
從可用性的觀點(diǎn)看,這種配置有一些優(yōu)勢,因?yàn)樗嗽诮粨Q機(jī)的主機(jī)一端出現(xiàn)故障時(shí)的失敗接管時(shí)間,但是它卻不會有性能上的改進(jìn),對給定LUN的訪問依然受限于它所呈現(xiàn)的單個(gè)控制器端口的性能。
(3)冗余的存儲網(wǎng)絡(luò)結(jié)構(gòu)
一種通用的(而且是好)存儲網(wǎng)絡(luò)設(shè)計(jì)如圖1-55③的配置,兩個(gè)并行存儲網(wǎng)絡(luò)結(jié)構(gòu)(Fabric)被連接到同一個(gè)存儲陣列和服務(wù)器,但不相互連接。在這樣的配置下,每個(gè)主機(jī)適配器被連接到不同的存儲網(wǎng)絡(luò)結(jié)構(gòu)(為簡便起見,在圖中只用一個(gè)交換機(jī)來表示存儲網(wǎng)絡(luò)結(jié)構(gòu))。類似地,每個(gè)磁盤陣列端口也被連接到不同的存儲網(wǎng)絡(luò)結(jié)構(gòu),因此在服務(wù)器和存儲陣列之間建立了兩條路徑:
HBA1?Port1?Port2?Controller1
HBA2?Port3?Port4?Controller2
操作系統(tǒng)發(fā)現(xiàn)會報(bào)告總共6個(gè)“設(shè)備”(3個(gè)LUN在2條路徑上)。
在圖1-55③的配置下,即使有一個(gè)存儲網(wǎng)絡(luò)完全癱瘓(例如交換機(jī)故障),服務(wù)器依然能夠和所有的LUN通信。
(4)雙端口陣列控制器以及冗余存儲網(wǎng)絡(luò)結(jié)構(gòu)
圖1-55④闡述的配置也有兩個(gè)并行的存儲網(wǎng)絡(luò)結(jié)構(gòu),但不同的是,每個(gè)磁盤陣列控制器都有兩個(gè)端口,并且同時(shí)被連接到兩個(gè)存儲網(wǎng)絡(luò)結(jié)構(gòu)。假設(shè)每個(gè)LUN都可以從兩個(gè)控制器的四個(gè)端口中的任何一個(gè)端口訪問,并且存儲網(wǎng)絡(luò)結(jié)構(gòu)中采用“開放區(qū)”策略,操作系統(tǒng)發(fā)現(xiàn)會在四條路徑上報(bào)告每個(gè)LUN,因?yàn)橐还灿?個(gè)LUN,因此發(fā)現(xiàn)的“設(shè)備”數(shù)是12。服務(wù)器和存儲陣列之間的四條路徑是:
HBA1?Port1?Port2?Port7
HBA1?Port1?Port3?Port9
HBA2?Port4?Port5?Port8
HBA2?Port4?Port6?Port10
這種配置提供了增強(qiáng)的可用性,因?yàn)槟硞€(gè)控制器失效,依然有兩個(gè)存儲網(wǎng)絡(luò)結(jié)構(gòu)可用。類似地,某個(gè)存儲網(wǎng)絡(luò)結(jié)構(gòu)癱瘓,磁盤陣列還是可以使用兩個(gè)控制器的。
2.“多路徑”軟件的實(shí)現(xiàn)層次
“多路徑”軟件的作用就是識別出系統(tǒng)中的多路徑設(shè)備,將它作為一個(gè)設(shè)備來處理,同時(shí)管理這多條路徑,以便實(shí)現(xiàn)I/O流量的負(fù)載均衡,或者在I/O路徑故障時(shí)的切換和恢復(fù)。多路徑軟件通常被部署在服務(wù)器端,可以在三個(gè)層次上實(shí)現(xiàn),如圖1-56所示。

圖1-56 “多路徑”軟件的實(shí)現(xiàn)層次
? HBA驅(qū)動程序:雖然HBA驅(qū)動程序可能通過多條路徑連接到這個(gè)磁盤,但它將每個(gè)磁盤向上層報(bào)告為一個(gè)塊設(shè)備。
? 操作系統(tǒng)內(nèi)核:對于每個(gè)磁盤,HBA報(bào)告為不同的塊設(shè)備,例如/dev/sda和/dev/sdb,操作系統(tǒng)內(nèi)核將這兩個(gè)塊設(shè)備進(jìn)入“歸并”為一個(gè)塊設(shè)備,例如/dev/md0。當(dāng)前,在Linux中,有兩種這樣的實(shí)現(xiàn)方式:基于Software RAID的多路徑技術(shù)和基于Device Mapper的多路徑技術(shù)。
? 應(yīng)用程序:例如HDS HDLM、HP SecurePath、EMC PowerPath、Veritas DMP和IBM RDAC。
實(shí)現(xiàn)多路徑軟件的關(guān)鍵在于磁盤標(biāo)識。即它應(yīng)該能夠識別出從HBA“看到”的塊設(shè)備對應(yīng)著存儲設(shè)備端的哪一個(gè)物理磁盤,進(jìn)而將對應(yīng)同一個(gè)物理磁盤的塊設(shè)備仿真為一個(gè)邏輯塊設(shè)備。磁盤標(biāo)識的方法有兩種:
? SCSI INQUIRY:發(fā)送SCSI INQUIRY命令,從返回的響應(yīng)數(shù)據(jù)判斷對應(yīng)的物理磁盤;
? World Wide Node Name:雖然每個(gè)物理磁盤有兩個(gè)WWPN地址,但只有一個(gè)WWNN地址。因而可以根據(jù)WWNN地址判斷對應(yīng)的物理磁盤是否相同。
1.2.6 虛擬化技術(shù)
計(jì)算機(jī)科學(xué)家David Wheeler有一句名言:“計(jì)算機(jī)科學(xué)中的任何問題,都可以通過加上一層邏輯層來解決?!贝鎯夹g(shù)和存儲產(chǎn)品,都深刻反映了這一思想的應(yīng)用。
虛擬化可以有不同的實(shí)現(xiàn)方式。就存儲虛擬化而言,也有各種分類方式,如圖1-57所示。

圖1-57 存儲虛擬化分類
根據(jù)虛擬化的層次來分,可分為塊級虛擬化和文件級虛擬化。Linux內(nèi)核中的Multi-Disk和Device Mapper技術(shù),就是塊級虛擬化的典型。而文件級虛擬化的例子也比比皆是,例如體現(xiàn)Linux設(shè)計(jì)精髓的“一切都是文件”的思想,塊設(shè)備文件就是將塊設(shè)備當(dāng)成邏輯塊順序排列的文件來看待的。
根據(jù)虛擬化的形式來分,包括聚合虛擬化、拆分虛擬化和仿真虛擬化。聚合虛擬化將多個(gè)存儲資源整合成一個(gè)可尋址的實(shí)體,例如線性RAID;拆分虛擬化將一個(gè)存儲資源拆分成多個(gè)可尋址的實(shí)體,例如分區(qū);仿真虛擬化仿真另一個(gè)產(chǎn)品或功能,例如虛擬磁帶庫(Virtual Tape Library,簡記為VTL)。
根據(jù)虛擬化的實(shí)現(xiàn)方式,包括帶內(nèi)虛擬化和帶外虛擬化。如果虛擬化實(shí)現(xiàn)位于應(yīng)用服務(wù)器和存儲設(shè)備的數(shù)據(jù)通道中間,稱為帶內(nèi)虛擬化;如果虛擬化實(shí)現(xiàn)位于數(shù)據(jù)通道之外,僅僅向應(yīng)用服務(wù)器傳送一些控制信息,來完成物理設(shè)備和邏輯卷之間的映射,被稱為帶外虛擬化。
根據(jù)虛擬化的位置來分,又包括基于服務(wù)器的虛擬化、基于網(wǎng)絡(luò)的虛擬化和基于存儲子系統(tǒng)的虛擬化。
盡管虛擬化的概念已經(jīng)提出了很長一段時(shí)間,最近在最大化硬件利用率、降低硬件成本、減少電能消耗以及簡化系統(tǒng)管理和安全方面的需求導(dǎo)致了在虛擬化部署和虛擬化解決方案數(shù)量上的巨大增長。這最終導(dǎo)致了虛擬化技術(shù)的最新發(fā)展,即虛擬機(jī)的出現(xiàn)。
在傳統(tǒng)的計(jì)算模型中,計(jì)算機(jī)系統(tǒng)只運(yùn)行一個(gè)操作系統(tǒng),這個(gè)操作系統(tǒng)控制所有的硬件平臺資源。而對于虛擬機(jī)系統(tǒng),多個(gè)可能不同的操作系統(tǒng)(被稱為來賓操作系統(tǒng))實(shí)例并發(fā)地運(yùn)行在一個(gè)物理計(jì)算機(jī)系統(tǒng)上,它們共享宿主計(jì)算機(jī)系統(tǒng)的物理資源。
虛擬機(jī)最關(guān)鍵的部分是虛擬機(jī)監(jiān)視器(Virtual Machine Monitor,VMM)。虛擬機(jī)監(jiān)視器作為虛擬的來賓操作系統(tǒng)和真實(shí)的平臺硬件之間的一層抽象,它的主要角色是仲裁對底層硬件主機(jī)平臺資源的訪問以便多個(gè)來賓操作系統(tǒng)共享這些資源。在某些情況下,虛擬機(jī)監(jiān)視器本身就是一個(gè)操作系統(tǒng)(被稱為宿主操作系統(tǒng)),例如Xen;其他時(shí)候,它也可能是宿主操作系統(tǒng)上的一個(gè)用戶級軟件,例如VMware。虛擬機(jī)的來賓操作系統(tǒng)是相互隔離的操作系統(tǒng),將底層硬件平臺視為它自己所有。但實(shí)際上,是虛擬機(jī)監(jiān)視器為它們提供了這種幻像。
虛擬機(jī)技術(shù)對存儲技術(shù)的發(fā)展也產(chǎn)生著重要的影響,例如就前面的備份技術(shù)而言,在虛擬機(jī)環(huán)境下,數(shù)據(jù)備份又有了新的選擇,至少有三個(gè)可能:備份虛擬機(jī)中的文件,或數(shù)據(jù)塊;備份虛擬機(jī)文件;或者備份虛擬機(jī)文件所在的數(shù)據(jù)塊等。這些不同選擇又會衍生新的技術(shù)課題,產(chǎn)生新的解決方案。
- Ansible Configuration Management
- Big Data Analytics with Hadoop 3
- Mastering Proxmox(Third Edition)
- 計(jì)算機(jī)圖形學(xué)
- 精通Windows Vista必讀
- Java開發(fā)技術(shù)全程指南
- ServiceNow Cookbook
- MicroPython Projects
- 精通Excel VBA
- 西門子S7-200 SMART PLC實(shí)例指導(dǎo)學(xué)與用
- 大數(shù)據(jù)驅(qū)動的機(jī)械裝備智能運(yùn)維理論及應(yīng)用
- 基于Xilinx ISE的FPAG/CPLD設(shè)計(jì)與應(yīng)用
- 液壓機(jī)智能故障診斷方法集成技術(shù)
- Linux系統(tǒng)管理員工具集
- 與人共融機(jī)器人的關(guān)節(jié)力矩測量技術(shù)