2021-05-12 14:32:11
RAID 磁碟陣列簡述
RAID是“Redundant Array of Independent Disk”的縮寫,翻譯過來叫做獨立磁碟的冗餘陣列,其實就是磁碟的儲存、存取、備份技術。在談RAID之前,先簡單學習一下記憶體的一些基礎知識。
1、記憶體基礎
說到記憶體,顧名思義,就是用來儲存資料的,市場上記憶體的種類也很多,但也可以大致分為兩類:易失性記憶體和非易失性記憶體,前者掉電資料即會丟失,後者掉電資料仍然還在,這是由記憶體的媒介決定的;一般來說,易失性記憶體的存取速度會明顯高於非易失性記憶體,當然價格也高。我們先了解一下計算機系統中記憶體的層次結構,下圖是任何一本講計算機系統的書中都會給出的一幅記憶體層次圖,越上層(金字塔的頂層)的記憶體速度越快,當然每位元組的成本也越高;越下層(金字塔底層)的記憶體速度越慢,每位元組的成本越便宜。
速度最快的莫過於位於CPU中的暫存器了,因為昂貴,所以只有幾十個位元組。
位於L1,L2,L3層的是快取記憶體,快取記憶體的速度也很快,它是由SRAM(靜態隨機記憶體)實現的,CPU存取快取記憶體只需要幾ns,由於價格相對較貴,所有只有幾M~幾十M的儲存空間。
位於L4層的是主記憶體,執行速度雖然沒有快取快,但是價格也便宜了很多,它是由DRAM(動態記憶體)實現的,所有現代計算機中一般有幾個G的主記憶體大小,CPU存取主記憶體的速度一般在幾十ns~上百ns之間。
記憶體主要分為兩類:易失性和非易失性記憶體。在計算機系統中,易失性記憶體主要包括快取記憶體、主記憶體,易失性一般由隨機記憶體(RAM)來實現。RAM又分為靜態RAM(SRAM)和動態RAM(DRAM),SRAM比DRAM速度快,但是價格也相對較貴。快取記憶體用的就是SRAM,而主記憶體用的是DRAM。非易失性記憶體主要包括磁碟、固態硬碟、光碟、磁帶、軟碟等。
位於L5層的是本地磁碟,本地磁碟一般使用的是機械儲存,也就是說,存取磁碟會產生機械損耗,在磁碟和記憶體之間傳輸一個位元組大概需要10ms。資料庫的資料一般也是儲存在磁碟上,所以為了減少因為資料庫的增刪查改操作帶來的存取磁碟所需要的時間損耗,我們需要建立一系列的演算法和資料結構來維護資料庫。
磁碟是由碟片構成的,每個碟片有兩個面,每個面又被劃成很多同心圓,每個同心圓稱為磁軌,每個磁軌又被間隙分割成圓的片段,叫做磁區。磁區是磁碟的最小的不可分割的單位。每個盤面都有一個磁頭用來讀寫盤面上的資料,主記憶體需要存取磁碟上的資料時,由磁碟驅動器來控制,資料是儲存在一個盤面的某個磁軌的某個磁區中的,所以,我們得把磁頭移動到對應的磁軌上,這叫做尋道,尋道所消耗的時間叫做尋道時間;當把磁頭移動到對應的磁軌時,我們還得旋轉到對應的磁區,旋轉到對應磁區所帶來的延遲,稱為旋轉延遲;資料所在磁區和磁區間的空隙經過磁頭所需要的時間叫做傳輸時間。
所以一次存取磁碟所需的時間為:尋道時間+旋轉時間+傳輸時間。這個其實主要由磁碟旋轉速度、磁區數等來決定,一般7200轉/min,磁區空隙佔10%的磁碟平均存取時間大概是10ms。
因為磁碟的非易失性,成本低等一些優點,所以目前幾乎所有的資料儲存和備份用的都是磁碟。
2、通過冗餘來提高可靠性
任何裝置都有可能發生故障,記憶體當然也不例外。如何解決可靠性??答案是冗餘。實現冗餘最簡單的辦法就是複製每一張盤,這就是所謂的映象。一張邏輯磁碟由兩張物理磁碟組成,每次寫操作都要在兩張磁碟上執行。如何其中一張磁碟發生了故障,我們就可以從另外一張磁碟讀資料。只有在第一張磁碟發生故障了,並且在它修復之前,第二張磁碟也發生了故障,資料才會真正丟失。我們用平均故障時間(這裡的故障指資料丟失)來評價映象技術的效能,平均故障時間主要依賴於每張磁碟的平均故障時間和平均修復時間(替換發生故障的磁碟並恢復磁碟上的資料所用的時間)。
假設兩張磁碟發生故障相互獨立,一張單獨的磁碟的平均故障時間為100 000小時,平均修復時間是10小時,則映象磁碟的平均故障時間是100 0002/(2*10)=500*106小時,也就是57000年。當然這只是在理想情況下,還有考慮其他因素。
3、通過並行來提高效能
磁碟成本低,但是存取速度有限,每次存取的平均時間是10ms左右,非常影響了系統的效能,如何提高磁碟存取速度?通過並行存取,處理讀資料的速度將翻倍,因為讀請求可以傳送到任意一張盤中。每個讀操作的傳輸速率和單一磁碟系統中的傳輸速率一樣,只是單位時間內讀操作的數目翻倍了。一般通過在多個磁碟上進行資料拆分來提高傳輸速率。
資料拆分的形式也有很多:將每個位元組按位元分開,儲存到多個磁碟上,叫做位元級拆分。將塊拆分到多張磁碟上,叫做塊級拆分。
塊級拆分是最常用的拆分形式。當我們要將8個邏輯塊存儲存到磁碟上時,我們可以把它們分別儲存到編號為0,1,2,3四張磁碟上,第i塊資料儲存在第(i mod 4)張磁碟上,這樣我們每次讀這些資料時,我們可以從4張磁碟平行讀取。
不管什麼形式,並行磁碟系統都是通過一下原理來提高效能的:
(1) 負載平衡多個小的存取操作,以提高存取操作的吞吐量
(2) 並行執行大的存取操作,以減少大存取操作的響應時間
4、RAID
映象雖然具有很高的可靠性,但是每一張邏輯盤都需要兩張物理盤,成本太高;資料拆分雖然提高了速率,但是並沒有保證可靠性。於是又提出了一系列的替換方案,這些方案具有不同的成本和效能之間的權衡,並且把這些方案分為若干個RAID級別。這些方案其實都是基於奇偶校驗和資料拆分的思想。
- RAID 0級:只是簡單的塊級拆分,而沒有任何冗餘的磁碟陣列。這個級別的RAID僅僅只是提高了從磁碟中讀取資料的速度,但是沒有可靠性的保障,當一個磁碟發生故障,沒有任何辦法可以恢復。
- RAID 1級:使用塊級拆分的磁碟映象(很多企業用RAID 1+0級指代拆分的映象,而用RAID 1級指代不使用拆分的映象)。因為有資料拆分,所以可以通過並行來提高讀取速率,因為有映象,所有也有很高的可靠性,同時資料重建很簡單,提供很高的寫效能,但是成本較很高。
- RAID 2級:使用奇偶校驗位,也叫做記憶體風格的糾錯碼(ECC)組織結構。
- RAID 3級: 位交叉的奇偶校驗結構,是對RAID 2級的改進。磁碟控制器能夠檢測出一個磁區能否正確地讀出,所以可以通過單一的奇偶校驗位來檢錯和糾錯。如果一個磁區被破壞,系統就可以準確地知道哪個磁區被破壞,對磁區的每一位,系統通過計算其他磁碟上對應磁區的對應位的奇偶性來判斷。
- 比如我們假設有三個磁碟,每個磁碟只有一個磁區,每個磁區只有八位。
- 盤1:11110000
- 盤2:10101010
- 盤3:00111000
- 我們還需要一塊冗餘盤作為奇偶校驗位:
- 盤4:01100010
- 上述八位中,每一位中4個盤中的1個數和都是偶數。如果盤2上資料由10101010變為11001100,我們就可以通過其餘幾個盤來恢復盤2的資料。任何一個盤中的資料都是其它盤中對應資料的模2和。
- RAID 4級:塊交叉的奇偶校驗組織結構,使用塊級拆分,在一張獨立的磁碟上為其它N張磁碟上對應的塊保留一個奇偶校驗塊。可以並行執行多個讀操作,從而產生較高的總I/O傳輸率,寫大量資料也有很高的傳輸率(資料和校驗位可以並行地寫)。但是資料量很小時就不能並行地執行,寫一個塊需要同時存取儲存磁碟和奇偶校驗磁碟,因為奇偶校驗磁碟需要更新。
- RAID 5級:塊交叉的分布奇偶校驗位的組織結構,是對RAID 4級的改進。RAID 5級將資料和奇偶校驗位都分布到所有的N+1張磁碟中,所有磁碟都能參與到讀操作中。對於每個由N個邏輯磁碟塊,需要N+1個物理磁碟塊,一張磁碟中對應的塊儲存奇偶校驗位,剩下的N張磁碟中對應的塊儲存資料。
- RAID 6級:P+Q的冗餘方案。類似與RAID 5級,只是儲存了額外的冗餘資訊,用來應對多個磁碟同時發生故障的情況。
5、如何選擇RAID級別
具體問題具體分析,一般在應用中主要考慮以下因素:
(1) 所需額外儲存帶來的花費
(2) 在I/O運算元量方面的效能需求
(3) 磁碟故障事的效能
(4) 資料重建過程(故障恢復)中的效能
RAID 0級別只能用於資料安全性要求不高的應用中;
RAID 3級是對RAID 2級的改進,RAID 5級是對RAID 4級的改進,我們只需要考慮RAID 3級和RAID 5級即可。RAID 3級是位元級拆分,RAID是塊級拆分,塊級拆分對於大量資料的傳輸有與RAID 3級同樣好的傳輸速率,對少量資料的傳輸使用更少的磁碟。RAID 6級比RAID 5級有著更高的可靠性,可以用於資料安全十分重要的應用。RAID 1級提供了最好的寫操作效能,RAID 5級比RAID 1級具有更低的儲存負載,但是寫操作需要更高的時間開銷,所以RAID 5級應用與進行讀操作,而寫操作較少的應用上。
如何在Linux上構建 RAID 10陣列 http://www.linuxidc.com/Linux/2014-12/110318.htm
Debian軟RAID安裝筆記 - 使用mdadm安裝RAID1 http://www.linuxidc.com/Linux/2013-06/86487.htm
常用RAID技術介紹以及範例演示(多圖) http://www.linuxidc.com/Linux/2013-03/81481.htm
Linux實現最常用的磁碟陣列-- RAID5 http://www.linuxidc.com/Linux/2013-01/77880.htm
RAID0+1和RAID5的效能測試結果 http://www.linuxidc.com/Linux/2012-07/65567.htm
Linux入門教學:磁碟???列(RAID) http://www.linuxidc.com/Linux/2014-07/104444.htm
本文永久更新連結地址:http://www.linuxidc.com/Linux/2015-08/122156.htm
相關文章