RAID1--5技術詳解

穩萊


RAID1--5技術詳解隨著電腦應用的日益普及,人們對電腦速度和性能的要求也逐漸提高。在一個完整的電腦系統中,CPU和記憶體的作用固然重要,但是資料存儲設備性能的好壞和速度的快慢也直接影響到整個系統的表現。本文所要講解的RAID技術起初主要應用於伺服器高端市場,但是隨著個人用戶市場的成熟和發展,正不斷向低端市場靠攏,從而為用戶提供了一種既可以提升硬碟速度,又能夠確保資料安全性的良好的解決方案。本文將對RAID技術進行較為詳細的介紹,希望能夠對廣大讀者有所幫助。

入門基礎

RAID是英文Redundant Array of Inexpensive Disks的縮寫,中文簡稱為磁碟陣列。其實,從RAID的英文原意中,我們已經能夠多少知道RAID就是一種由多塊廉價磁碟構成的冗餘陣列。雖然RAID包含多塊磁碟,但是在操作系統下是作為一個獨立的大型存儲設備出現。RAID技術分為幾種不同的等級,分別可以提供不同的速度,安全性和性價比。

人們在開發RAID時主要是基於以下設想,即幾塊小容量硬碟的價格總和要低於一塊大容量的硬碟。雖然目前這一設想還沒有成為現實,RAID在節省成本方面的作用還不是很明顯,但是RAID可以充分發揮出多塊硬碟的優勢,實現遠遠超出任何一塊單獨硬碟的速度和吞吐量。除了性能上的提高之外,RAID還可以提供良好的容錯能力,在任何一塊硬碟出現問題的情況下都可以繼續工作,不會受到損壞硬碟的影響。

RAID 0

我們在前文中已經提到RAID分為幾種不同的等級,其中,RAID 0是最簡單的一種形式。RAID 0可以把多塊硬碟連接在一起形成一個容量更大的存儲設備。最簡單的RAID 0技術只是提供更多的磁碟空間,不過我們也可以通過設置,使用RAID 0來提高磁碟的性能和吞吐量。RAID 0沒有冗餘或錯誤修復能力,但是實現成本是最低的。

RAID 0最簡單的實現方式就是把幾塊硬碟串聯在一起建立一個大的卷集。磁碟之間的連接既可以使用硬件的形式通過智慧磁碟控制器實現,也可以使用操作系統中的磁碟驅動程式以軟體的方式實現。圖示如下:


在上述配置中,我們把4塊磁碟組合在一起形成一個獨立的邏輯驅動器,容量相當於任何任何一塊單獨硬碟的4倍。如圖中彩色區域所示,資料被依次寫入到各磁碟中。當一塊磁碟的空間用盡時,資料就會被自動寫入到下一塊磁碟中。

這種設置方式只有一個好處,那就是可以增加磁碟的容量。至於速度,則與其中任何一塊磁碟的速度相同,這是因為同一時間內只能對一塊磁碟進行I/O操作。如果其中的任何一塊磁碟出現故障,整個系統將會受到破壞,無法繼續使用。從這種意義上說,使用純RAID 0方式的可靠性僅相當於單獨使用一塊硬碟的1/4(因為本例中RAID 0使用了4塊硬碟)。

雖然我們無法改變RAID 0的可靠性問題,但是我們可以通過改變配置方式,提供系統的性能。與前文所述的順序寫入資料不同,我們可以通過建立帶區集,在同一時間內向多塊磁碟寫入資料。具體如圖所示:


上圖中,系統向邏輯設備發出的I/O指令被轉化為4項操作,其中的每一項操作都對應於一塊硬碟。我們從圖中可以清楚的看到通過建立帶區集,原先順序寫入的資料被分散到所有的四塊硬碟中同時進行讀寫。四塊硬碟的並行操作使同一時間內磁碟讀寫的速度提升了4倍。

在建立帶區集時,合理的選擇帶區的大小非常重要。如果帶區過大,可能一塊磁碟上的帶區空間就可以滿足大部分的I/O操作,使資料的讀寫仍然只局限在少數的一、兩塊硬碟上,不能充分的發揮出並行操作的優勢。另一方面,如果帶區過小,任何I/O指令都可能引發大量的讀寫操作,佔用過多的控制器總線帶寬。因此,在建立帶區集時,我們應當根據實際應用的需要,慎重的選擇帶區的大小。

我們已經知道,帶區集可以把資料均勻的分配到所有的磁碟上進行讀寫。如果我們把所有的硬碟都連接到一個控制器上的話,可能會帶來潛在的危害。這是因為當我們頻繁進行讀寫操作時,很容易使控制器或總線的負荷超載。為了避免出現上述問題,建議用戶可以使用多個磁碟控制器。示意圖如下:


這樣,我們就可以把原先控制器總線上的資料流量降低一半。當然,最好解決方法還是為每一塊硬碟都配備一個專門的磁碟控制器。


RAID 1

雖然RAID 0可以提供更多的空間和更好的性能,但是整個系統是非常不可靠的,如果出現故障,無法進行任何補救。所以,RAID 0一般只是在那些對資料安全性要求不高的情況下才被人們使用。

RAID 1和RAID 0截然不同,其技術重點全部放在如何能夠在不影響性能的情況下最大限度的保證系統的可靠性和可修復性上。RAID 1是所有RAID等級中實現成本最高的一種,儘管如此,人們還是選擇RAID 1來保存那些關鍵性的重要資料。

RAID 1又被稱為磁碟鏡像,每一個磁碟都具有一個對應的鏡像盤。對任何一個磁碟的資料寫入都會被複製鏡像碟中;系統可以從一組鏡像碟中的任何一個磁碟讀取資料。顯然,磁碟鏡像肯定會提高系統成本。因為我們所能使用的空間只是所有磁碟容量總和的一半。下圖顯示的是由4塊硬碟組成的磁碟鏡像,其中可以作為存儲空間使用的僅為兩塊硬碟(畫斜線的為鏡像部分)。



RAID 1下,任何一塊硬碟的故障都不會影響到系統的正常運行,而且只要能夠保證任何一對鏡像盤中至少有一塊磁碟可以使用,RAID 1甚至可以在一半數量的硬碟出現問題時不間斷的工作。當一塊硬碟失效時,系統會忽略該硬碟,轉而使用剩餘的鏡像碟讀寫資料。

通常,我們把出現硬碟故障的RAID系統稱為在降級模式下運行。雖然這時保存的資料仍然可以繼續使用,但是RAID系統將不再可靠。如果剩餘的鏡像碟也出現問題,那麼整個系統就會崩潰。因此,我們應當及時的更換損壞的硬碟,避免出現新的問題。

更換新硬碟之後,原有好硬碟中的資料必須被複製到新硬碟中。這一操作被稱為同步鏡像。同步鏡像一般都需要很長時間,尤其是當損害的硬碟的容量很大時更是如此。在同步鏡像的進行過程中,外界對資料的訪問不會受到影響,但是由於複製資料需要佔用一部分的帶寬,所以可能會使整個系統的性能有所下降。

因為RAID 1主要是通過二次讀寫實現磁碟鏡像,所以磁碟控制器的負載也相當大,尤其是在需要頻繁寫入資料的環境中。為了避免出現性能瓶頸,使用多個磁碟控制器就顯得很有必要。下圖示意了使用兩個控制器的磁碟鏡像。


使用兩個磁碟控制器不僅可以改善性能,還可以進一步的提高資料的安全性和可用性。我們已經知道,RAID 1最多允許一半數量的硬碟出現故障,所以按照我們上圖中的設置方式(原盤和鏡像碟分別連接不同的磁碟控制),即使一個磁碟控制器出現問題,系統仍然可以使用另外一個磁碟控制器繼續工作。這樣,就可以把一些由於意外操作所帶來的損害降低到最低程度。

RAID 0+1

單獨使用RAID 1也會出現類似單獨使用RAID 0那樣的問題,即在同一時間內只能向一塊磁碟寫入資料,不能充分利用所有的資源。為了解決這一問題,我們可以在磁碟鏡像中建立帶區集。因為這種配置方式綜合了帶區集和鏡像的優勢,所以被稱為RAID 0+1。

熱插拔

一些面向高端應用的磁碟鏡像系統都可以提供磁碟的熱插拔功能。所謂熱插拔功能,就是允許用戶在不關閉系統,不切斷電源的情況下取出和更換損害的硬碟。如果沒有熱插拔功能,即使磁碟損壞不會造成資料的丟失,用戶仍然需要暫時關閉系統,以便能夠對硬碟進行更換。現在,使用熱插拔技術只要簡單的打開連接開關或者轉動手柄就可以直接取出硬碟,而系統仍然可以不間斷的正常運行。

校驗

RAID 3和RAID 5都分別使用了校驗的概念提供容錯能力。簡單的說,我們可以把校驗想像為一種二進制的校驗和,一個可以告訴你其它所有字位是否正確的特殊位。

在資料通信領域,奇偶校驗被用來確定資料是否被正確傳送。例如,對於每一個字節,我們可以簡單計算數字位1的個數,並在字節內加入附加校驗位。在資料的接收方,如果數字位1的個數為奇數,而我們使用的又是奇數校驗的話,則說明該字節是正確的。同樣對偶數校驗也是如此。然而,如果數字位1的個數和校驗位的奇偶性不一致的話,則說明資料在傳送過程中出現了錯誤。

RAID系統也採用了相似的校驗方法,可以在磁碟系統中建立校驗塊,校驗塊中的每一位都用來對其它關聯塊中的所有對應位進行校驗。

在資料通訊領域,雖然校驗位可以告訴我們某個字節是否正確,但是無法告訴我們到底是哪一位出現了問題。這就是說我們可以檢測錯誤,但是不能改正錯誤。對於RAID,這是遠遠不夠的。固然錯誤的檢測非常重要,但是如果不能對錯誤進行修復,我們就無法提高整個系統的可靠性。

舉個例子來說,假設我們發現校驗塊中第10個字節的第5位不正確。如果這個校驗塊包含的是另外8個資料塊的校驗訊息,那麼哪一個資料塊才是問題的罪魁禍首呢?也許你可能會想為每一個資料塊都建立一個校驗塊就可以解決問題。但是這種方法很難實現。事實上,RAID主要是借助磁碟控制器的錯誤報告檢測錯誤位置,並進行修復。如果磁碟控制器在讀取資料時沒有發出任何「抱怨」,那麼系統將會視該資料為正確資料,繼續使用。


RAID 3

RAID 3採用的是一種較為簡單的校驗實現方式,使用一個專門的磁碟存放所有的校驗資料,而在剩餘的磁碟中建立帶區集分散資料的讀寫操作。例如,在一個由4塊硬碟構成的RAID 3系統中,3塊硬碟將被用來保存資料,第四塊硬碟則專門用於校驗。這種配置方式可以用3+1的形式表示,具體如圖:


在上圖中,我們用相同的顏色表示使用同一個校驗塊的所有資料塊,斜線標出的部分為校驗塊。校驗塊和所有對應的資料塊一起構成一個帶區。

第四塊硬碟中的每一個校驗塊所包含的都是其它3塊硬碟中對應資料塊的校驗訊息。RAID 3的成功之處就在於不僅可以像RAID 1那樣提供容錯功能,而且整體開銷從RAID 1的50%下降為25%(RAID 3+1)。隨著所使用磁碟數量的增多,成本開銷會越來越小。舉例來說,如果我們使用7塊硬碟,那麼總開銷就會將到12.5%(1/7)。

在不同情況下,RAID 3讀寫操作的複雜程度不同。最簡單的情況就是從一個完好的RAID 3系統中讀取資料。這時,只需要在資料存儲盤中找到相應的資料塊進行讀取操作即可,不會增加任何額外的系統開銷。

當向RAID 3寫入資料時,情況會變得複雜一些。即使我們只是向一個磁碟寫入一個資料塊,也必須計算與該資料塊同處一個帶區的所有資料塊的校驗值,並將新值重新寫入到校驗塊中。例如,當我們向上圖中的綠色資料塊寫入資料時,必須重新計算所有3個綠色資料塊的校驗值,然後重寫位於第四塊硬碟的綠色校驗塊。由此我們可以看出,一個寫入操作事實上包含了資料讀取(讀取帶區中的關聯資料塊),校驗值計算,資料塊寫入和校驗塊寫入四個過程。系統開銷大大增加。

我們可以通過適當設置帶區的大小使RAID系統得到簡化。如果某個寫入操作的長度恰好等於一個完整帶區的大小(全帶區寫入),那麼我們就不必再讀取帶區中的關聯資料塊計算校驗值。我們只需要計算整個帶區的校驗值,然後直接把資料和校驗訊息寫入資料盤和校驗盤即可。

到目前為止,我們所探討的都是正常運行狀況下的資料讀寫。下面,我們再來看一下當硬碟出現故障時,RAID系統在降級模式下的運行情況。

RAID 3雖然具有容錯能力,但是系統會受到影響。當一塊磁碟失效時,該磁碟上的所有資料塊必須使用校驗訊息重新建立。如果我們是從好硬碟中讀取資料塊,不會有任何變化。但是如果我們所要讀取的資料塊正好位於已經損壞的磁碟,則必須同時讀取同一帶區中的所有其它資料塊,並根據校驗值重建丟失的資料。

當我們更換了損壞的磁碟之後,系統必須一個資料塊一個資料塊的重建壞盤中的資料。整個過程包括讀取帶區,計算丟失的資料塊和向新盤寫入新的資料塊,都是在後台自動進行。重建活動最好是在RAID系統空閒的時候進行,否則整個系統的性能會受到嚴重的影響。

RAID 3的性能問題

除了我們在上文討論過的有關資料寫入和降級模式的問題之外,在使用RAID 3的過程中還有其他一些性能上的問題需要引起我們的注意。RAID 3所存在的最大一個不足同時也是導致RAID 3很少被人們採用的原因就是校驗盤很容易成為整個系統的瓶頸。

我們已經知道RAID 3會把資料的寫入操作分散到多個磁碟上進行,然而不管是向哪一個資料盤寫入資料,都需要同時重寫校驗盤中的相關訊息。因此,對於那些經常需要執行大量寫入操作的應用來說,校驗碟的負載將會很大,無法滿足程式的運行速度,從而導致整個RAID系統性能的下降。鑒於這種原因,RAID 3更加適合應用於那些寫入操作較少,讀取操作較多的應用環境,例如資料庫和WEB伺服器等。

RAID 5

RAID 3所存在的校驗碟的性能問題使幾乎所有的RAID系統都轉向了RAID 5。在運行機制上,RAID 5和RAID 3完全相同,也是由同一帶區內的幾個資料塊共享一個校驗塊。

RAID 5和RAID 3的最大區別在於RAID 5不是把所有的校驗塊集中保存在一個專門的校驗碟中,而是分散到所有的資料碟中。RAID 5使用了一種特殊的算法,可以計算出任何一個帶區校驗塊的存放位置。具體如圖所示:


注意圖中的校驗塊已經被分散保存在不同的磁碟中,這樣就可以確保任何對校驗塊進行的讀寫操作都會在所有的RAID磁碟中進行均衡,從而消除了產生瓶頸的可能。

 給當前日誌評分:
Loading Vote
正在讀取評分資料...


文章來自: Tank部落格
引用通告: 查看所有引用 | 我要引用此文章
Tags: RAID
相關日誌:

評論: 0 | 引用: 0 | 查看次數: -
發表評論
暱 稱:
密 碼: 遊客發言不需要密碼.
內 容:
驗證碼: 驗證碼
選 項:
雖然發表評論不用註冊,但是為了保護您的發言權,建議您註冊帳號.