早在我還是一個服務(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)這樣一種誤解,認為RAID可以等同于系統(tǒng)備份。而事實并非如此。RAID只是容錯的一種形式。
備份和容錯從概念上來講是完全不同的。備份讓我們可以在災(zāi)難發(fā)生之后實施恢復(fù)。而容錯旨在降低災(zāi)難發(fā)生的幾率。容錯就像是在懸崖上搭建一個防護網(wǎng),而備份就像是懸崖下面建造一座醫(yī)院。你恐怕永遠也不希望既沒有防護網(wǎng)也沒有醫(yī)院,但他們是完全不同的兩個事物。
一旦我們?yōu)轵?qū)動器部署了RAID,不管是本地附加還是在存儲網(wǎng)絡(luò)中的遠程應(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ū)動器的大小,以此來表示一個陣列的可用存儲空間,更直觀地進行存儲容量對比。
RAID 1
這種類型的RAID是對驅(qū)動器進行鏡像。你有兩個驅(qū)動器,它們同時在一起做所有事情,因此稱做“鏡像”。因為這個過程非常簡單,所以鏡像是非常穩(wěn)定的,但是如果你之前從來沒有使用過RAID的話,這就要求你必須購買是實際需要兩倍的驅(qū)動器,因為第二個驅(qū)動器作為冗余之用。
RAID 1的好處在于你可以確保寫入到磁盤中的每個字位都被寫入兩遍以達到保護的目的。因此,使用RAID 1我們的存儲容量應(yīng)該是(n*s/2)。RAID 1比非RAID驅(qū)動器性能要略高一些,寫入速度接近于非RAID系統(tǒng),而讀取速度幾乎是大多數(shù)情況下的兩倍,因為在讀取操作過程中驅(qū)動器可以并行地進行訪問,從而提高了吞吐量。RAID 1限制于兩個驅(qū)動器。
RAID 5
帶校驗的磁盤條帶。在這種類型的RAID中,數(shù)據(jù)以復(fù)雜條帶的形式寫入到陣列中的所有驅(qū)動器中,同時所有驅(qū)動器中都有分布數(shù)校驗塊。這樣RAID 5就可能使用三個或者更多磁盤組成的任意大小的陣列,只犧牲相當(dāng)于一個磁盤的存儲容量用于校驗。但是這種校驗是分布式的,并不單獨存在于任何一個物理磁盤中。
RAID 5由于在大型陣列中犧牲的存儲容量較少,所以它具有成本效益的特點,從而被人們所廣泛使用。與鏡像不同的是,帶有校驗的條帶要求必須在磁盤之間進行針對每個寫入條帶的計算,這造成了一部分的開銷。因此,吞吐量并不總是一個容易計算的項目,它在很大程度上取決于系統(tǒng)在做校驗計算時候的計算能力。
計算RAID 5的容量非常簡單:就是((n-1)*s)。RAID 5陣列可以避免這列中任何單個磁盤的丟失。
RAID 6
帶雙重校驗的磁盤條帶。RAID 6與RAID 5非常相似,但它的每個條帶使用兩個校驗塊,而不是一個,這加強了應(yīng)對磁盤故障的保護能力。
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)。