歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> RAID 磁盤陣列簡述

RAID 磁盤陣列簡述

日期:2017/2/28 13:58:37   编辑:Linux教程

  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

Copyright © Linux教程網 All Rights Reserved