早在我還是一個服務(wù)技術(shù)新手的時候,,我對系統(tǒng)管理一無所知,我們一直想要了解的話題之一就是RAID——廉價冗磁盤陣列(Redundant Array of Inexpensive Disks),。
它是解決我們所有存儲難題的鑰匙,。有了RAID,我們可以擴大文件系統(tǒng),,獲得更好的吞吐量甚至是增加冗余性,讓我們幸免于磁盤丟失事件,,尤其是在那些經(jīng)常發(fā)生此類事件的日子里,。
隨著NAS和SAN存儲應(yīng)用的出現(xiàn),使用物理存儲的技巧和利用這些技巧來滿足系統(tǒng)需求快速地消失了。這并不是一件好事,。因為我們將存儲卸載到外置設(shè)備上的做法并沒有改變這樣一個事實,,我們需要從根本上了解我們的存儲情況,通過配置存儲來滿足系統(tǒng)的特定需求,。
最近五到十年似乎出現(xiàn)這樣一種誤解,,認(rèn)為RAID可以等同于系統(tǒng)備份。而事實并非如此,。RAID只是容錯的一種形式,。
備份和容錯從概念上來講是完全不同的。備份讓我們可以在災(zāi)難發(fā)生之后實施恢復(fù),。而容錯旨在降低災(zāi)難發(fā)生的幾率,。容錯就像是在懸崖上搭建一個防護(hù)網(wǎng),而備份就像是懸崖下面建造一座醫(yī)院,。你恐怕永遠(yuǎn)也不希望既沒有防護(hù)網(wǎng)也沒有醫(yī)院,,但他們是完全不同的兩個事物。
一旦我們?yōu)轵?qū)動器部署了RAID,,不管是本地附加還是在存儲網(wǎng)絡(luò)中的遠(yuǎn)程應(yīng)用,,現(xiàn)在我們有四種主要的RAID解決方案可以用于業(yè)務(wù)中:RAID 1(鏡像)、RAID 5(帶校驗的磁盤條帶),、RAID 6(帶雙重校驗的磁盤條帶)以及RAID 10(帶有條帶的鏡像),。
還有其他類型的等解決方案,例如RAID 0,,但如果你真正了解你的驅(qū)動器子系統(tǒng)需求,,那么你就知道這些只能用于少數(shù)環(huán)境中。另外人們使用的還有RAID 50和RAID 51,,但是更加少見,,而且效率并不那么高。十年前,,RAID 1和RAID 5是很常見的,,但是今天我們已經(jīng)有了更多的選擇。
下面讓我們來逐個分析這些選擇并討論一些基本的數(shù)據(jù),。在我們的例子中,,我們將使用“n”來代表陣列中的驅(qū)動器數(shù)量,“s”代表任何單個驅(qū)動器的大小,,以此來表示一個陣列的可用存儲空間,,更直觀地進(jìn)行存儲容量對比。
RAID 1
這種類型的RAID是對驅(qū)動器進(jìn)行鏡像,。你有兩個驅(qū)動器,,它們同時在一起做所有事情,,因此稱做“鏡像”。因為這個過程非常簡單,,所以鏡像是非常穩(wěn)定的,,但是如果你之前從來沒有使用過RAID的話,這就要求你必須購買是實際需要兩倍的驅(qū)動器,,因為第二個驅(qū)動器作為冗余之用,。
RAID 1的好處在于你可以確保寫入到磁盤中的每個字位都被寫入兩遍以達(dá)到保護(hù)的目的。因此,,使用RAID 1我們的存儲容量應(yīng)該是(n*s/2),。RAID 1比非RAID驅(qū)動器性能要略高一些,寫入速度接近于非RAID系統(tǒng),,而讀取速度幾乎是大多數(shù)情況下的兩倍,,因為在讀取操作過程中驅(qū)動器可以并行地進(jìn)行訪問,從而提高了吞吐量,。RAID 1限制于兩個驅(qū)動器,。
RAID 5
帶校驗的磁盤條帶。在這種類型的RAID中,,數(shù)據(jù)以復(fù)雜條帶的形式寫入到陣列中的所有驅(qū)動器中,,同時所有驅(qū)動器中都有分布數(shù)校驗塊。這樣RAID 5就可能使用三個或者更多磁盤組成的任意大小的陣列,,只犧牲相當(dāng)于一個磁盤的存儲容量用于校驗,。但是這種校驗是分布式的,并不單獨存在于任何一個物理磁盤中,。
RAID 5由于在大型陣列中犧牲的存儲容量較少,,所以它具有成本效益的特點,從而被人們所廣泛使用,。與鏡像不同的是,,帶有校驗的條帶要求必須在磁盤之間進(jìn)行針對每個寫入條帶的計算,這造成了一部分的開銷,。因此,,吞吐量并不總是一個容易計算的項目,它在很大程度上取決于系統(tǒng)在做校驗計算時候的計算能力,。
計算RAID 5的容量非常簡單:就是((n-1)*s),。RAID 5陣列可以避免這列中任何單個磁盤的丟失。
RAID 6
帶雙重校驗的磁盤條帶,。RAID 6與RAID 5非常相似,,但它的每個條帶使用兩個校驗塊,而不是一個,,這加強了應(yīng)對磁盤故障的保護(hù)能力,。
RAID 6是RAID家族中的新成員,。RAID 6是其他幾個RAID類型實現(xiàn)標(biāo)準(zhǔn)化幾年之后增加的,。RAID 6比較特殊,,因為它可以承受陣列中任意兩個驅(qū)動器的故障,同時防止數(shù)據(jù)丟失,。但是為了配合額外的冗余度,,RAID 6陣列需要犧牲陣列中相當(dāng)于兩個驅(qū)動器的容量,并要求真列中最少有四個驅(qū)動器,。RAID 6的容量可以用((n-2)*s)來計算,。
RAID 10
帶條帶的鏡像。從技術(shù)上來說,,RAID 10是一種混合的RAID,,包括存在于一個非校驗條帶(RAID 0)中的一對RAID鏡像。
當(dāng)一個陣列中只有兩個驅(qū)動器的時候,,很多廠商會稱其為RAID 10(或者RAID 10+),,但從技術(shù)上來說這應(yīng)該是RAID 1,因為陣列中至少有四個驅(qū)動器才會發(fā)生條帶化,。對于RAID 10來說,,驅(qū)動器必須是一對一對添加的,因此陣列中的驅(qū)動器數(shù)量只可能是偶數(shù),。
RAID 10可以在丟失近半數(shù)驅(qū)動器組的情況下正常運轉(zhuǎn),,同是最多只能承受每個驅(qū)動器中一個驅(qū)動器發(fā)生故障或者丟失。RAID 10不包含校驗計算,,這使得它相對RAID 5和RAID 6來說具有一定的性能優(yōu)勢,,而且陣列對計算能力的要求也更低。RAID 10提供了超過任何一種常見類型RAID的讀取性能,,因為在讀取操作中陣列中的所有驅(qū)動器都可同時使用,。但是RAID 10的寫入性能要低很多。RAID 10的容量計算方法和RAID 1相同,,都是(n*s/2),。