簡介
RAID是一個我們經常能見到的名詞。但卻因爲很少能在實際環境中體驗,所以很難對其原理 能有很清楚的認識和掌握。本文將對RAID技術進行介紹和總結,以期能儘量闡明其概念。
RAID全稱爲獨立磁盤冗餘陣列(Redundant Array of Independent Disks),基本思想就是把多個相對便宜的硬盤組合起來,成爲一個硬盤陣列組,使性能達到甚至超過一個價格昂貴、 容量巨大的硬盤。RAID通常被用在服務器電腦上,使用完全相同的硬盤組成一個邏輯扇區,因此操作系統只會把它當做一個硬盤。 RAID分爲不同的等級,各個不同的等級均在數據可靠性及讀寫性能上做了不同的權衡。 在實際應用中,可以依據自己的實際需求選擇不同的RAID方案。
一、RAID的原理基礎
在講解RAID的原理基礎之前,我們首先來了解一下傳統磁盤的劣勢。我們知道一臺PC機種都會包含CPU、內存、主板、硬盤、網卡等硬件,影響計算機性能的組建包括:CPU、主板總線IO、內存IO、硬盤IO、網卡IO等。可能我們在一提到影響計算機的性能時,首先想到的就是CPU。但是隨着計算機的發展,特別是對於現代的處理器來說,其運算速度已經是非常快的了,同時我們的內存IO速度也已經達到了非常快的地步了(差不多應該有5G每秒),而我們也知道數據都是保存硬盤上的,所以計算機其實是先將硬盤的數據傳遞給內存,然後CPU再從內存中加載數據來進行運算的,所以由此看來影響整個計算機性能的因素就是我們的硬盤IO速度了。我們來看看目前流行的硬盤類型及速度(數據可能不準確,不過基本差不多)
我們目前的PC機上基本上都是使用SATA接口的硬盤,讀的速度大概不超過150M/s,寫的速度就更慢了,而生產環境下的服務基本上都是使用SAS(串行SCSI)硬盤,速度最快的是SSD固態硬盤,其速度幾乎是SATA的4-5倍。但是即使是使用SSD固態硬盤,其速度在500M/s左右,也遠遠達不到我們內存以及CPU的處理速度。所以,硬盤是絕大多數計算機的性能的瓶頸
所以,現代磁盤的缺陷就是:I/O性能極差,穩定性極差。
I/O性能我們剛已經看到了,就算是使用SSD固態硬盤,其還是會大大影響計算機的性能,穩定性差表現在,如果一個硬盤發生了故障或者損壞,那麼這塊硬盤就已經不能再使用了,這如果是在對數據保存要求特別高的地方來說,其是不可想象的。正因爲如此,就誕生了一種新的技術--RAID。
RAID(Redundant Array of Independent Disks)是廉價磁盤冗餘陣列技術的英文縮寫,它的原理就是通過多個磁盤並行運行來提高整個計算機的I/O存儲性能。
RAID的評判標準有如下三個:
①速度:讀寫速度的提升
②磁盤使用率:多磁盤的空間使用率
③冗餘性: 能夠支持幾塊磁盤損壞而不丟失數據
所以,基於以上三個評判標準,RAID分爲很多種類,稱之爲RAID級別,現代RAID一共有7個級別,分別是RAID0~RAID6,但是常用的RAID級別主要是以下四種:
①RAID0:提高讀寫性能
②RAID1:提高讀寫性能、冗餘性
③RAID5:提高讀寫性能、冗餘性(允許1塊硬盤發生故障)
④RAID6:提高讀寫性能、冗餘性(運行2塊硬盤發生故障)
下面我們就基於RAID的三個評判標準來看看常用的這四個RAID級別各自的特點
標準RAID
1.21 軟RAID0及特點;
RAID0稱爲條帶化(Striping)存儲,將數據分段存儲於 各個磁盤中,讀寫均可以並行處理。因此其讀寫速率爲單個磁盤的N倍(N爲組成RAID0的磁盤個數),但是卻沒有數 據冗餘,單個磁盤的損壞會導致數據的不可修復。RAID0 是把兩個或兩個以上的容量相同的硬盤或分區,通過RAID控制器(硬RAID是通過RAID卡來實現的,軟RAID 是通過軟件來實現的),結合爲一個在容量上是RAID0下成員的容量的總和,在寫入時,要向每個硬盤或分區同時寫入數據。在硬RAID中,RAID0的成員是以整個硬盤爲單位的,把兩個硬盤或兩個以上的硬盤通過RAID卡綁定成爲一個虛擬的磁盤設備,而每個硬盤就是RAID0的成員;
在軟RAID0中,RAID0的成員是整個硬盤或分區,容量是加入RAID0的所有成員容量的總和。在RAID0中每個成員的容量都是相同一致的。比如我們把 /dev/sdb 、/dev/sdc、/dev/sdd 三個容量大小爲80G的硬盤做成RAID0,這時RAID0設備的容量就是三個硬盤的總和 80x3=240G。當然我們也可以,在寫入數據時,系統要向每個硬盤同時寫入數據,是以條塊的形式寫入。比如我們存一份數據linuxsir.tar.gz 到RAID0的設備中,這份數據是分拆成若干份被分散的寫入到RAID0中的每個成員中。只有RAID0中的每個成員正常運行,並且RAID0也正常運行的情況下,這份數據纔是完整的。RAID0中任何一個成員(硬盤分區)有有問題時,RAID0便不能運行,同時數據也不是完整的;
RAID0 在讀寫速度上是比較快的,是普通不做RAID的兩倍左右(注:實際速度和機器的硬件配置有關),所以RAID0常被用於對存儲效率要求較高,但對數據安全性要求不高的應用解決方案中;
安全性:RAID0中有任何一個成員出現故障,整個RAID0就不能被激活。數據不能保障;
大多數striping
的實現允許管理者通過調節兩個關鍵的參數來定義數據分段及寫入磁盤的 方式,這兩個參數對RAID0的性能有很重要的影響。
STRIPE WIDTH
stripe width
是指可被並行寫入的 stripe 的個數,即等於磁盤陣列中磁盤的個數。
STRIPE SIZE
也可稱爲block size
(chunk
size
,stripe length
,granularity
),指寫入每個磁
盤的數據塊大小。以塊分段的RAID通常可允許選擇的塊大小從 2KB 到 512KB不等,也有更 高的,但一定要是2的指數倍。以字節分段的(比如RAID3)一般的stripe size
爲1字節或者 512字節,並且用戶不能調整。 stripe
size
對性能的影響是很難簡單估量的,最好在實際應用中依自己需求多多調整並 觀察其影響。通常來說,減少stripe size
,文件會被分成更小的塊,傳輸數據會更快,但 是卻需要更多的磁盤來保存,增加positioning
performance
,反之則相反。應該說,沒有 一個理論上的最優的值。很多時候,也要考慮磁盤控制器的策略,比如有的磁盤控制器會等 等到一定數據量纔開始往磁盤寫入。
RAID0至少需要兩塊硬盤,當使用RAID0時,我們在讀寫數據的時候是將數據分開讀寫到多塊硬盤上,所以其讀寫速度是最快的,但是因爲多塊硬盤上保存了數據的一部分,所以當一塊硬盤發生損壞時,其整個RAID的數據也就損壞了。
①空間利用率:所有硬盤空間之和
②性能:所有硬盤讀寫速度之和
③冗餘能力:無
1.22
軟RAID1及特點;
RAID1就是把若干相同容量的硬盤或分區,成員與成員之間是鏡像關係。在容量上,RAID1設備是單個成員的容量。比如兩個80G的硬盤做成RAID1,這個RAID1的設備容量仍是80G。比如我們寫入一個份數據linuxsir.tar.bz2 到RAID1設備時,其實是向RAID的每個成員都寫了一份。比如RAID1設備下有兩個成員/dev/sdb和/dev/sdc
,我們寫入linuxsir.tar.bz2 到RAID1時,/dev/sdb和/dev/sdc都有一份完整的linuxsir.tar.bz2。 所以RAID1是冗餘的陣列,一般被用於安全性要求比較高的應用中。
因爲RAID1在由於鏡像冗餘,所以磁盤利用效率並不高,或者說是“浪費”。這種方案相對來說性價比並不高,一般很少應用。數據讀寫效率要比RAID0慢。
安全性:RAID1 中只要有一個成員是健康的,RAID1完全可以激活,而且數據絕對是完整安全的。如果所有的成員有故障,RAID1也就報廢了。
RAID1也是至少需要2塊硬盤,在寫數據的時候就不同於RAID0了,RAID1在寫數據時會將數據複製到多塊硬盤上,即每塊硬盤都會保存該數據的一個備份,在讀數據時,以提高冗餘性。讀的時候同時從多塊硬盤上讀取數據,以提高讀的性能。
①空間利用率:所有磁盤中最小的那塊(其實在使用RAID時,最好每塊硬盤的大小及型號都一樣)
②性能:讀性能是所有硬盤之和,寫性能有所減弱
③冗餘能力:只要有一塊硬盤正常,數據就正常
1.23
軟RAID5及特點;
軟RAID5也是冗餘安全的,RAID5是把至少三個硬盤或分區通過軟件虛擬成爲一個大的存儲設備。在容量上是(n-1)x單個硬盤(分區)容量 ,比如我們用三塊80G硬盤做成RAID5,容量就是兩塊容量的和160G。在寫入上,數據被分拆成若干份,分別向RAID5的每個成員下寫入。比如把linuxsir.tar.bz2寫入RAID5時,
要先把linuxsir.tar.bz2分拆成若干份,分別寫入RAID5成員中。因爲涉及到冗餘,所以數據在讀入速度上並不是很快,沒辦法和RAID0相比,但RAID5的寫入數據速度沒有RAID1和RAID0快,也沒有不做RAID的磁盤寫入速度要快;
因爲RAID5在容量損失比較小,有冗餘安全保障,另外寫入速度比較快,從整體上來看,性價比比較高,所以被大範圍內採用;
安全性:當RAID5中的成員中有一個發生故障時,RAID5一樣能啓動和正常運行,只要n-1(注n>3)塊硬盤或分區的不出故障,RAID5上的數據就是安全,對於一個文件存到RAID5設備中,只有成員是n-1(注n>3)無故障時,這份文件纔是完整的。 比如RAID5有四個硬盤(或分區)做的,當一個硬盤或分區掛掉了,並不影響整個RAID5上數據的完整性和安全性。
RAID5至少需要3塊硬盤,RAID5與RAID0類似,讀寫數據的時候會將數據分佈的讀寫到所有硬盤上。但是在寫數據的時候RAID5會對數據進行奇偶校驗運算,並將校驗信息也保存在了硬盤上,所以即使我們其中一塊硬盤發生了損壞,RAID5也能通過其他硬盤以及校驗信息對數據進行恢復使用。但是如果2塊或者2塊以上的硬盤發生了損壞,整個數據也就損壞了。
①空間利用率:1 - 1/n
②性能:讀性能接近RAID0,寫性能相比RAID0要弱一些
③冗餘能力:可以接受1塊硬盤的損壞
1.24軟Raid6及特點
RAID6至少需要4塊硬盤,RAID6與RAID5相類似,讀寫數據的時候會將數據分佈的讀寫到所有硬盤上。在寫數據的時候RAID5會對數據進行奇偶校驗運算,並將校驗信息也保存在了硬盤上,但是RAID6會比RAID5多保存一份校驗信息,所以RAID6的冗餘性比RAID5就有所提升,可以允許2塊硬盤發生損壞。
①空間利用率:1 - 2/n
②性能:讀性能接近RAID5,寫性能相比RAID5還要弱一些
③冗餘能力:可以接受2塊硬盤的損壞
以上四種RAID級別是我們最常用的四種級別,對於個人PC機來說,可能我們最需要提高的是硬盤存儲性能,所以基本上使用的是RAID0,其讀寫性能得到了最大的提高,但是其冗餘性爲0,當硬盤發生損壞時,數據也就損壞了。而在生產環境下的服務器,使用的最多是RAID5或者RAID6,其即提供了讀寫性能,也提供了冗餘性。RAID1通常會對於那些對數據準確性要求及其嚴格的場合纔會使用。
我們來總結一下這4個常用的RAID級別各自的優缺點:
原文地址:http://www.cnblogs.com/xiaoluo501395377/archive/2013/05/25/3099464.html
http://blog.csdn.net/czp11210/article/details/9018111
http://blog.jobbole.com/83808/