天天看點

RAID 分析

一個驅動器陣列就是多個硬碟驅動器的集合。要了解RAID,我們應該再弄清楚幾個基本概念。

.實體驅動器陣列可以被分開或者組合成為一個或者多個邏輯驅動器陣列。

.邏輯驅動器陣列由可以在作業系統中看到的邏輯驅動器組成。

.邏輯驅動器可以是一個硬碟也可以是硬碟中的一個分區。

在一般簡單的RAID應用中,或許這些概念反而可能讓你更胡塗,不過在多層RAID嵌套的高端RAID應用中明白這些概念、厘清這些概念将是非常重要的。

RAID控制器就是在實體和邏輯陣列中管理資料存取的裝置。系統通過它可以檢視到邏輯驅動器,但是不必去直接管理。RAID控制器的功能既可以由硬體也可 以由軟體來實作。硬體RAID一般用于處理大量資料的RAID模式。随着處理器的能力的不斷增強,軟體RAID功能已經成為可能,不過當處理大量資料時 CPU仍然會顯得力不從心。在後文,我們将會讨論什麼樣的應用程式和RAID模式更适于硬體或者軟體RAID。

三、鏡像技術

鏡像就是在兩個或者多個獨立的硬碟驅動器或者驅動器陣列上存放資料的多個拷貝。系統會同時把資料寫在作為鏡像的兩個硬碟上,這就是RAID技術中 備援技術,用來防止資料意外丢失。當其中一個硬碟或者RAID出現問題,系統可以通路鏡像的硬碟或者RAID來繼續工作,這樣就讓資料修複的時間縮短到了 最短,此時你要做的就是從完好的備份上恢複資料。

下面的示意圖顯示了鏡像如何工作的。當然這隻是一個簡單的示意圖。A、B、C是獨立的文檔。在這個示意圖裡Disk 1和Disk 2指的是硬碟或者磁盤陣列。RAID 控制器将相同的資料同時寫入Disk 1和Disk 2。是以每一個硬碟或者磁盤陣列存儲了相同的資訊。你可以利用延展技術(Striping,後面将詳細解釋,現在你隻需要知道這個技術能提升性能)加入另 一個level組成更加複雜的RAID陣列。如果你有一個延展陣列,那麼你可以在鏡像這個陣列的同時鏡像另外一個延展陣列,它可以讓RAID變的極為複 雜。

缺點也是顯而易見的,不能并行寫入——是以存儲資料的時候并不能提升速度。不過,在讀取資料的時候鏡像可以提升速度。一個好的RAID控制器可以 讀取鏡像的兩個裝置中的任意一個的資料,當其中一個使用時,另一個空閑的可以響應其它的請求。這就是并行處理——也就是RAID之是以能提升硬碟性能的原 因所在。

RAID 分析

鏡像适用于強調資料安全的解決方案。因為要把相同的資料存為兩份是以就需要更大的存儲空間,當然也需要更多的經費來購置儲存設備。不過對于相當大 的領域内這個花費是值得的。因為資料丢失而去手工回複所需要的時間足夠讓一些公司倒閉了。不過在另外些場合,資料的穩定性要求不是那麼高,就不值得在存儲 裝置上花費兩倍的錢了。鏡像中兩個組成RAID的兩個儲存設備是對等的,究竟下一步操作需要哪一個裝置就需要由parity來決定了。

四、奇偶校驗(Parity)技術

Parity是應用于RAID中的另一種備援技術。這個名詞通常用在偵測校驗通訊錯誤方面,例如Modem、記憶體。 RAID中的Parity類似于記憶體中的技術。舉個例子來說,比如你的一個資料機關有X位數字,那麼你可以使用這X位數字産生一個奇偶校驗位,并且把這個 奇偶校驗位作為這個資料機關的第X+1個位,如果這X+1位中的任何一個丢失,剩下的X位仍能修複這個資料。你可能聽說過奇偶校驗位(parity bit)這個名詞,對于資料來講,這是個額外的資料(但是從安全性上來講不是多餘的)。在RAID中,這個奇偶校驗資料将會大的多。還不明白?

一般的這個額外的奇偶校驗資料由異或邏輯運算(XOR)産生。如果你對異或邏輯運算不清楚。下表講讓你明白:

p q p XOR q

T T T

T F F

F T F

F F T

很簡單“真”“真”異或的結果是真,“假”“假”異或的結果也是真,“真”“假”異或結果是“假”——也就是相同的元素異或結果是“真”,不同元素異或結 果是“假”。你可以把這裡的“真”“假”分别等同于二進制的0、1。異或運算的一個特性就是你把結果和一個初始值進行異或運算,就能得到另一個初始值。如 上表,你可以把(p XOR q)同p或者q進行異或,相應的你會得到q或p。由此你也能看得出來異或運算不需要臨時存儲空間就能交換兩個記憶體空間。

例如:

10101010 XOR 11111111 = 01010101

11111111 XOR 01010101 = 10101010

10101010 XOR 01010101 = 11111111

由任何兩個值都能通過異或運算得到第三個值,這就是異或運算的特性。這個運算可以使用任意多個位元組,是以你可以對整個硬碟的資料進行異或運算。現在你是不 是可以想到你不必把資料存為兩份,而隻要一個硬碟就能保護你的資料了——這個想法基本正确,不過仍然還需要一個額外硬碟。這就是奇偶校驗技術相對于鏡像技 術的優勢。但是在容錯能力不如鏡像技術。奇偶校驗資料不必存儲在單一的實體硬碟上,它可以分布在整個磁盤陣列上,這就是我們常常說的分布式奇偶校驗。另外 在鏡像技術中能實作的Striping技術在奇偶校驗中也能實作。主要的限制就是奇偶校驗技術需要進行大量的運算,對于計算機有着相當高的要求。每一次讀 取、寫入資料都要進行一次奇偶校驗運算,這就必須具備硬體RAID控制器。運用軟體RAID幾乎是不現世的,因為如此大量的運算會讓CPU沒有空更重要的 事情了。還有一個缺點就是恢複資料比鏡像技術複雜。雖然硬體RAID控制器可以自動重建資料,不過比鏡像技術要慢的多。

五、延展(Striping)技術

以上幾節的内容都是讨論的技術都是關于提高資料可靠性的。不過幾次提到了延展這個名詞,但是并沒有詳細的解釋。這一節的内容就是重點的介紹延展技 術的。延展技術通過把資料分布到陣列的所有驅動器上——而延展技術的主要原理是并行處理。假如你在一個單獨的硬碟上有個非常大的檔案,如果要讀取它隻能從 頭到尾的逐一讀取。而Striping技術可以把它分成小塊分别存儲在多個硬碟之上,讀取的時候就可以從多個硬碟裡同時調用。同樣道理當你寫入資料——特 别是大檔案的時候也是這樣的。傳輸性能将能明顯的提高。在一定的範圍内,可以說你的硬碟越多,性能的提高就越明顯。驅動器數目決定了延展帶寬——可以同時 用于資料傳輸的同步延展。不過它們究竟是怎麼工作的呢?

每一部分進入RAID控制器的資料都被分成了更小的部分。在延展技術中分割資料分為兩個層次:一個是位元組層延展(Byte Level Striping),一個是塊層延展(Block Level Striping)。位元組層延展主要用于把資料以位元組為機關分割,并順序存儲在硬碟上。舉個例子:如果一組資料被分割為16位元組,并且要分布在4個硬碟 上,那麼第一個位元組存儲在第一個硬碟上、第二個位元組存儲在第二個硬碟上……而第五個位元組又存到一個硬碟上,如此循環,不過缺點是每次要使用512位元組的空 間。塊層延展以給定大小的尺寸來分割資料,其餘的同位元組層延展是一樣的。這個塊的大小稱為延展容量(stripe size)。延展容量的大小依據不同的RAID實作方式來決定。

延展容量的大小是一個很關鍵的課題。因為沒有固定的大小是最合适的,不同的應用中應該采用不同的尺寸。延展容量對于最終性能的提高或者降低影響很明顯。延 展容量越小,檔案被分割的就越多。傳輸性能将因并行處理能力的提高而提高,但是也會增加檔案存儲的随機性。而使用大的延展容量所取得效果同使用小的延展容 量相反。資料分布和傳輸的性能将會減低,不過檔案存放的随機性也會下降。是以要确定指定多麼大的延展容量隻有根據你經常使用的程式來進行試驗,找出最合适 的尺寸。先從中等大小開始試驗,然後分别增加和減少延展容量,并對結果做出記錄,比較之後就有結果了。

RAID 分析

上面的示意圖是示範延展技術如何工作的。需要存儲的資料分為了6塊(A,B,C,D,E,F),需要分布到兩個硬碟上——如果你要分布到多個硬碟裡按照同樣的規則進行就可以了。如果你需要移動、傳輸資料,控制器将對兩個硬碟同時存取,進而提高了性能。

六、RAID(RAID levels)的基本模式

前面各個小節闡述了關于RAID的幾個基本概念,可以幫助你更好的了解下面的内容。現在我就來介紹一下RAID的标準組成形式(RAID levels)。部分公司自己開發的RAID形式不在此列。這些隻是單一的RAID形式,這些形式可以通過不同的方式組合成結構更複雜、功能更多的的 RAID。後面的小節我還會談到。

RAID 0:

這是最簡單的RAID模式,它僅僅有延展功能而沒有資料備援功能,是以不适于資料穩定性敏感的應用。在各個單一RAID形式中它提供了最快的性 能,也是造價最低的——隻要兩塊硬碟、一個RAID控制器,不需要額外儲存設備就可以了。不會因為要在硬碟上存儲同樣的資料而浪費空間。RAID0因為其 相對低廉的造價和明顯的性能提升在主流市場上已經流行起來。以前多是SCSI接口,對于個人使用者價格仍然不菲,不過随着近來價格更低廉的IDE/ATA解 決方案的實作,已經為很多個人使用者應用了。其實RAID 0(也就是延展技術)其實是通過RAID控制器把多個硬碟當成一個容量更大、速度更快的硬碟來使用,是以最後要聲明的是任何一個硬碟出問題都可能造成整個 陣列的資料丢失。

RAID 1:

RAID 1其實就是鏡像技術的實作。簡單工作原理就是把相同的資料備份存放在兩個驅動器,當一個驅動器出現故障,另一個仍然可以維持系統的正常運轉。當然恢複故障 驅動器也是非常簡單的,隻要把資料完好的備份拷貝到正常的硬碟上就可以了。資料備援的換來的是資料的安全。有的RAID 1通過增加一個RAID控制器來提高容錯能力。是以對于關鍵資料來将,這将是最好的選擇。不過RAID 1對于系統的性能提高很小。它的相對低廉的價格和易用的特點使它已經成為RAID控制器的主流之一。

RAID 2:

利用漢明校驗碼(Hamming code ECC.)實作位元組層延展技術。這個技術類似于奇偶校驗但是并不完全相同。資料以位元組為機關被分割并存儲在硬碟以及ECC槽上——每當在陣列上寫入資料, 利用漢明校驗規則生成的漢明碼就寫在了ECC槽,當從陣列中讀取資料的時候,漢明碼就被用來檢驗資料寫入陣列之後是否被更改過。單位元組的錯誤也能被簡測出 來并且立即修正過來。不過這種模式所需的RAID控制器價格昂貴,是以至今這種應用幾乎沒有。

RAID 3:

利用專門奇偶校驗實作的位元組層延展技術。換句話說,就是應用延展技術将資料分布到陣列的各個驅動器上,同時用專門的驅動器存儲用于校驗的備援信 息。這種形式的優點就是既通過延展技術提高了性能,又利用專門奇偶校驗驅動器容納備援資訊,以保證資料的安全。一般至少需要3塊硬碟:兩塊用于延展,一塊 做為專門奇偶校驗驅動器。不過雖然利用延展技術提高的性能,可以因為奇偶校驗在寫入資料時又抵消了一部分性能——因為校驗資訊同時也需要寫入校驗驅動器。 因為需要進行大量的計算,是以需要硬體RAID控制器,軟體RAID幾乎沒有什麼實際意義。RAID 3因為延展容量小,是以适于經常處理大檔案的應用。

RAID 4:

RAID 4同RAID 3很相似。唯一的差別就是使用塊層延展技術(block level striping),而不是使用的位元組層延展技術(byte level striping)。優點是可以通過更改延展容量大小來适用于不同應用。RAID 4也可以看作是RAID 3和RAID 5的混和——既有RAID 3專門奇偶校驗驅動器,也有RAID 5的塊層延展技術。另外仍然需要硬體RAID控制器。當然專門奇偶校驗驅動器還是會降低一些性能。

RAID 5:

RAID 5使用塊層延展技術和分布式奇偶校驗來實作。它主要針對專門奇偶校驗驅動器所帶來的瓶頸而産生的解決方案。利用分布式奇偶校驗運算法則,把資料和校驗資料 寫在所有的驅動器中。本技術的要旨在于相對于塊資料産生校驗塊(parity blocks)同時存儲于陣列當中——解決了專麼校驗驅動器所帶來的瓶頸問題。不過,校驗資訊是在寫入過程中計算出來的,是以對于寫入性能仍有影響。當一 個硬碟驅動器出現故障,可以從其它的驅動器之中的資料塊分離出校驗資訊進而恢複資料。由于分布式校驗本身屬性,恢複資料會比其它的形式複雜。RAID 5也可以通過更改延展容量的大小來滿足不同應用的需要,另外還需要硬體RAID控制器。RAID 5是目前最流行的RAID應用形式,因為它綜合最好的性能、備援能力、存儲能力為一體。當然價格也是不菲的。

七、複合RAID模式

單一的RAID模式肯定不能使用目前各種應用的需要,為了得到更多的性能,人們将各種RAID模式聯合起來使用。那麼将其中兩種模式用在會有什麼 好處呢?可以得到功能更多、性能更好的RAID模式。一般符合RAID模式需要硬體控制器。因為對于如此複雜的應用軟體RAID控制器顯然是不現實的。 RAID 0在各個單一模式中是速度最快的,是以在符合RAID模式中它也是最常用的。最長常用的符合RAID模式是0+1和1+0。 0+1和1+0是有細微差別的,不過有的公司對這個名詞是不加以區分的——其實它們的主要差別在于容錯能力。這兩種複合RAID模式都至少需要4塊硬碟。

首先讓我們看看RAID 0+1模式。複合使用RAID 0是為了提高磁盤性能,使用RAID 1為了提高容錯性能。假設你有8塊硬碟,将它們4個一組分成兩個陣列——我将其稱為基陣列,每個基陣列用RAID 0模式連接配接。然後你就有了兩個延展模式的基陣列。然後你将這兩個基陣列用RAID 1模式連接配接——也就是讓其中一個基陣列作為另一個的鏡像。如果一個延展模式的基陣列中的硬碟出現故障了,那麼這個延展陣列也将全部癱瘓。不過另一個延展陣 列仍然可以維持系統工作,并且可以利用其來恢複資料。

RAID 1+0是先組合RAID 1陣列,然後把它們組成RAID 0模式。仍然使用剛才的例子:将8塊硬碟分成4組,每組2塊硬碟組成一個基陣列,然後将每個基陣列用RAID 1模式連接配接,也就是讓其中一個硬碟作為另一個的鏡像。然後把這4個RAID 1模式的基陣列用RAID 0模式連接配接。這個模式比RAID 0+1有更好的容錯能力。任意的一個硬碟驅動器出現故障,因為有鏡像驅動器的存在,是以整個陣列将能繼續正常工作。

從理論上講RAID 1+0模式即使每個基陣列都壞一塊硬碟,系統仍然能正常工作,隻有當第五塊出現故障的時候才有出現不可挽回的損失。而RAID 0+1隻要兩個基陣列都有一塊硬碟故障,那麼就無法挽回了。:~(

目前流行的RAID 0+1和1+0模式使用了相對簡單的複合技術就提高了性能和增強了資料備援性。随着硬碟驅動器價格的不斷下降,4塊硬碟的價格也能為個人使用者接受了。不 過,如果你需要鏡像功能的話,你所能使用的硬碟空間将隻有兩塊硬碟空間大小——為了資料的穩定性,你不得不以犧牲50%的空間為代價。企業級應用以及服務 器一般會不惜犧牲磁盤空間換取更高的容錯性。另外還有一些其它的複合RAID模式比如:RAID 0+3、3+0、0+5、5+0、1+5、5+1。這些模式的實作往往需要昂貴的硬體支援。

八、RAID模式的選擇

現在你已經熟悉了不同的RAID組合模式及其配置,還有什麼困擾你?對了,就是如果選擇适合的RAID模式。一般用RAID無非就是為了這幾個目的:資料 備援、容錯性、提高容量、增進性能。資料備援可以用于保護關鍵的資料不丢失,一般用于大型公司、企業,當然如果你有錢,也可以為了保護你的以GB為計數單 位MP3使用它。容錯能力可以帶給存儲系統更好的穩定。

沒RAID通過連接配接多個硬碟可以提供給計算機系統更大的存儲空間。當然根據選擇RAID模式的不同,你得到的最大存儲空間是不同的,比如如果采用鏡像技術,你所需要的空間是要存儲資料的兩倍。

更多的,特别是個人使用者使用RAID技術的目的是為了提高磁盤性能。當然你選擇的RAID模式不同,性能的提高也會各不相同。

九、硬體RAID的實作

首先看一下硬體實作RAID模式的方式:一般使用SCSI或者IDE/ATA作為硬碟同系統的接口。SCSI一般應用于高端伺服器上,雖然性能優良、功能強大可是對于普通使用者來講價格太高。IDE/ATA RAID控制器成本低廉,(不少主機闆已經內建)雖然不能太複雜的應用,性能也比不上SCSI裝置,但是對于家用市場來說已經能夠滿足要求了,是以漸漸成了RAID的主流。

硬體RAID實作分為兩種:一種是内置(或內建)RAID控制器,一種是外置RAID控制器。内置RAID控制器通常是常用的卡件的形式插接在計 算機主機闆上,內建RAID控制器則是由主機闆廠商直接把控制晶片內建在主機闆上,近來高端主機闆內建RAID控制器幾乎成了标準配置。根據RAID控制器以及連 接模式不同,RAID控制器都配有不同數量的緩存,當然緩存越多,控制器的性能就越好了,價格也就越貴了。

外部RAID控制器包括從控制器到硬碟等一套裝置。在高端伺服器上,你常常可以看到由獨立的機箱容納RAID控制器和硬碟。控制器包括了所有的 RAID功能——在系統中看到的隻是所有的邏輯驅動器。外部RAID控制器相比内置RAID控制器結構更加複雜,緩存容量更大。這是因為它常常要連接配接并且 組織大量的硬碟來組成複雜的複合RAID來工作。它一般使用SCSI接口——可以進行熱插拔,來更換有故障的硬碟,避免中置計算機系統停機所帶來的損失。

很明顯内置控制器外置的便宜的多。不過外置控制器功能強大、可擴充性強,但是價格不是個人所能承受的。雖然IDE/ATA RAID控制器日漸增多,可是SCSI因其特殊的性能仍然是高端計算機系統的首選。當然你可以選擇軟體RAID——這是一個相當經濟的選擇,但是需要占用 CPU時間,是以RAID模式越複雜,對于計算機系統影響就越大。是以如果你的預算足夠還是選擇硬體RAID模式吧!

十、結語

RAID對于希望得到更快的傳輸性能、良好的資料備援性、海量的存儲能力的公司和企業使用者是相當合适的解決方案。有非常多種類的RAID模式,從 最簡單的、最便宜的到極端複雜、及其昂貴的都有。RAID對于計算機系統的好處是顯而易見的,但是不是對每一個人都适用。如果你是不斷追求計算機性能極至 的發燒狂人,口袋裡還有花不完的¥($也行),那麼看到這一行請馬上買一套來體驗一下吧。如果你隻是像我一樣的普通人,建議你看看RAID那天文數字般價 格标簽滿足一下吧!寫本文的主要宗旨就是讓你了解一下RAID這一種技術,雖然我不是計算機硬體專家,我也不能保證我所寫的都是100%正确,我真心的希 望你看到此處真的有所收獲。

繼續閱讀