閱讀841 返回首頁    go 阿裏雲 go 技術社區[雲棲]


磁盤陣列RAID講解

RAID:磁盤陣列(Redundant Arrays of Independent Disks)

一台PC機器都會包含CPU、內存、主板、硬盤、網卡等硬件,影響計算機性能的組建包括:CPU、主板總線IO、內存IO、硬盤IO、網卡IO等。可能我們在一提到影響計算機的性能時,首先想到的是CPU,但是隨著計算機的發展,特別是對於現代的處理器來說,其運算速度已經是非常快的了,同時我們的內存IO速度也已經達到了非常快的地步了,而我們也知道數據是保存在硬盤上的,所以計算機其實是先將硬盤的數據傳遞給內存,然後CPU再從內存中加載數據來進行運算的,所以由此看來影響整個計算機性能的因素就是我們的硬盤IO速度了。

RAID是廉價磁盤冗餘陣列技術的英文縮寫,它的原理就是通過多個磁盤並行運行來提高整個計算機的IO存儲性能。

RAID的評判標準有三個:

  • 速度:讀寫速度的提升
  • 磁盤使用率:多磁盤的空間使用率
  • 冗餘性:能夠支持幾塊磁盤損壞而不丟失數據

所以,基於以上三哥評判標準,RAID分為很多種類,稱之為RAID級別。

RAID0:

RAID0的工作原理就是通過多塊硬盤並行運行來提高整個計算機的IO存儲性能,至少需要兩塊硬盤,RAID0是通過將數據分開讀寫到多塊硬盤的方式來提高讀寫性能的。

使用RAID0時,我們讀寫數據的時候是將數據分開讀寫到多塊硬盤上,每個硬盤上保存了數據的一部分,所以讀寫速度快,但是當其中一塊硬盤發生損壞時,整個RAID的數據也就損壞了。

讀、寫性能提升 無容錯能力 最少磁盤數量2塊

RAID1:

RAID1至少需要兩塊硬盤,RAID1在讀寫數據時會將數據複製到其他硬盤上,即每塊硬盤都會保存該數據的一個備份,在讀數據時,以提高冗餘性,讀的時候同時從多塊硬盤上讀取數據,以提高讀的性能。

讀性能提升、寫性能略有下降 有冗餘能力 最少磁盤數量2塊

RAID4:

RAID4至少需要三塊硬盤,前兩塊硬盤原理跟RAID0相似,第三塊硬盤作為校驗盤,對前兩塊硬盤進行異或校驗,因為檢驗盤一直在進行運算,所以損壞幾率較大。

RAID5:

RAID5至少需要三塊硬盤,讀寫數據的時候會將數據分布的讀寫到所有硬盤上。例如有三塊硬盤ABC,當有數據進行讀寫時候,數據會在A盤IO一些,B盤IO一些,C盤校驗,然後A盤IO,B盤校驗,C盤IO,然後A盤校驗,BC盤IO,將校驗分散開來。三塊硬盤損壞幾率相同,減少單一硬盤損壞幾率。

讀、寫性能提升 有容錯能力,允許最多一塊磁盤損壞 最少磁盤數量3塊

RAID6:

在RAID5的基礎上增加了一個校驗位,由四塊硬盤組成。

讀、寫性能提升 有容錯能力,允許最多2塊磁盤損壞 最少磁盤數量4塊

RAID10:RAID1+RAID0:

raid

軟件RAID的實現:

對於目前所有的操作係統,都有軟件RAID的實現,我們的Linux操作係統的軟件RAID通過mdadm命令實現。
mdadm支持的RAID級別有:RAID0、RAID1、RAID4、RAID5、RAID6、RAID10。
mdadm可以基於多塊硬盤、分區以及邏輯卷來創建RAID。
RAID設備可命名為/dev/mdn,n表示的是第幾個RAID,如第一個創建的RAID對應/dev/md0,第二個創建的RAID就對應/dev/md1,當然這個名字是可以自己隨便取的。
RAID的信息保存在/proc/mdstat文件中,或者通過mdadm命令查看。

mdadm命令:

-C:創建 -A:裝配 -F:監控 -f,-r,-a:管理

-C創建模式:

-n #:使用#個塊設備來創建此RAID(-n 2 表示用2塊硬盤來創建這個RAID) -l #:指明要創建的RAID的級別(-l 0 表示創建RAID0) -a {yes|no}:自動創建對應的設備,yes表示會自動在/dev下創建RAID設備 -c CHUNK_SIZE:指明塊大小 -x #:指明空閑盤的個數

創建RAID0:#mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sdb /dev/sdc 創建RAID1:#mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sdb /dev/sdc 創建RAID5:#mdadm -C /dev/md2 -a yes -l 5 -n 3 /dev/sdb /dev/sdc /dev/sdd 創建RAID6:#mdadm -C /dev/md3 -a yes -l 6 -n 4 /dev/sdb /dev/dec /dev/sdd /dev/sde

最後更新:2017-06-26 18:02:42

  上一篇:go  《數據結構與抽象:Java語言描述(原書第4版)》一I2.2.2 現在處理:try-catch塊
  下一篇:go  mysql數據庫如何創建索引