一、RAID 是什麽?
RAID ( Redundant Array of Independent Disks )即獨立磁盤冗餘陣列,簡稱為(wèi)「磁盤陣列」,其實就是用(yòng)多(duō)個獨立的磁盤組成在一起形成一個大的磁盤系統,從而實現比單塊磁盤更好的存儲性能(néng)和更高的可(kě)靠性。
二、RAID 有哪些?
RAID方案常見的可(kě)以分(fēn)為(wèi):
- RAID0
- RAID1
- RAID5
- RAID6
- RAID10
下面來分(fēn)别介紹一下。
Raid 0:至少需要兩塊硬盤,磁盤越多(duō),讀寫速度越快,沒有冗餘。
Raid 1:隻能(néng)用(yòng)兩塊硬盤,兩塊硬盤的數據互為(wèi)鏡像(寫慢,讀快),一塊磁盤冗餘。
Raid 5:至少需要3塊硬盤,一塊磁盤冗餘。它是最通行的配置方式。具有奇偶校驗的數據恢複功能(néng)的數據存貯方式。奇偶校驗數據塊分(fēn)布于陣列裏的各個硬盤中。
Raid 6:至少需要4塊硬盤,2塊磁盤冗餘,硬盤的總數大于等于4即可(kě)。
Raid 10:至少需要4塊硬盤,冗餘一半的硬盤數量,但是硬盤的總數必須是大于或等于4的偶數(相當于每兩塊硬盤做一個Raid0,然後把各個Raid0做成一個Raid1)。
Raid 50:至少需要6塊硬盤,磁盤的冗餘相當于每三個硬盤做了一個Raid5,然後,每個Raid5又組合成了Raid0(Raid5中有一個硬盤冗餘,即使壞了也不會破壞Raid0),所以,Raid50的磁盤的 冗餘硬盤數量=磁盤總數÷3 。
Raid 60:至少需要8塊硬盤
具體(tǐ)如下
- RAID0
RAID0 是一種非常簡單的的方式,它将多(duō)塊磁盤組合在一起形成一個大容量的存儲。當我們要寫數據的時候,會将數據分(fēn)為(wèi)N份,以獨立的方式實現N塊磁盤的讀寫,那麽這N份數據會同時并發的寫到磁盤中,因此執行性能(néng)非常的高。
RAID0 的讀寫性能(néng)理(lǐ)論上是單塊磁盤的N倍(僅限理(lǐ)論,因為(wèi)實際中磁盤的尋址時間也是性能(néng)占用(yòng)的大頭)
但RAID0的問題是,它并不提供數據校驗或冗餘備份,因此一旦某塊磁盤損壞了,數據就直接丢失,無法恢複了。因此RAID0就不可(kě)能(néng)用(yòng)于高要求的業務(wù)中,但可(kě)以用(yòng)在對可(kě)靠性要求不高,對讀寫性能(néng)要求高的場景中。
那有沒有可(kě)以讓存儲可(kě)靠性變高的方案呢(ne)? 有的,下面的RAID1就是。
- RAID1
如圖,
RAID1 是磁盤陣列中單位成本最高的一種方式。因為(wèi)它的原理(lǐ)是在往磁盤寫數據的時候,将同一份數據無差别的寫兩份到磁盤,分(fēn)别寫到工作(zuò)磁盤和鏡像磁盤,那麽它的實際空間使用(yòng)率隻有50%了,兩塊磁盤當做一塊用(yòng),這是一種比較昂貴的方案。
RAID1其實與RAID0效果剛好相反。RAID1 這種寫雙份的做法,就給數據做了一個冗餘備份。這樣的話,任何一塊磁盤損壞了,都可(kě)以再基于另外一塊磁盤去恢複數據,數據的可(kě)靠性非常強,但性能(néng)就沒那麽好了。
了解了RAID0和RAID1之後,我們發現這兩個方案都不完美啊。 這時候就該 性能(néng)又好、可(kě)靠性也高 的方案 RAID5 登場了。
- RAID5
這是目前用(yòng)的最多(duō)的一種方式。 因為(wèi) RAID5 是一種将 存儲性能(néng)、數據安(ān)全、存儲成本 兼顧的一種方案。
在了解RAID5之前,我們可(kě)以先簡單看一下RAID3,雖然RAID3用(yòng)的很(hěn)少,但弄清楚了RAID3就很(hěn)容易明白RAID5的思路。
RAID3的方式是:将數據按照RAID0的形式,分(fēn)成多(duō)份同時寫入多(duō)塊磁盤,但是還會另外再留出一塊磁盤用(yòng)于寫「奇偶校驗碼」。例如總共有N塊磁盤,那麽就會讓其中額度N-1塊用(yòng)來并發的寫數據,第N塊磁盤用(yòng)記錄校驗碼數據。一旦某一塊磁盤壞掉了,就可(kě)以利用(yòng)其它的N-1塊磁盤去恢複數據。
但是由于第N塊磁盤是校驗碼磁盤,因此有任何數據的寫入都會要去更新(xīn)這塊磁盤,導緻這塊磁盤的讀寫是最頻繁的,也就非常的容易損壞。
RAID5的方式可(kě)以說是對RAID3進行了改進。
RAID5模式中,不再需要用(yòng)單獨的磁盤寫校驗碼了。它把校驗碼信息分(fēn)布到各個磁盤上。例如,總共有N塊磁盤,那麽會将要寫入的數據分(fēn)成N份,并發的寫入到N塊磁盤中,同時還将數據的校驗碼信息也寫入到這N塊磁盤中(數據與對應的校驗碼信息必須得分(fēn)開存儲在不同的磁盤上)。一旦某一塊磁盤損壞了,就可(kě)以用(yòng)剩下的數據和對應的奇偶校驗碼信息去恢複損壞的數據。
RAID5校驗位算法原理(lǐ):P = D1 xor D2 xor D3 … xor Dn (D1,D2,D3 … Dn為(wèi)數據塊,P為(wèi)校驗,xor為(wèi)異或運算)
RAID5的方式,最少需要三塊磁盤來組建磁盤陣列,允許最多(duō)同時壞一塊磁盤。如果有兩塊磁盤同時損壞了,那數據就無法恢複了。
- RAID6
為(wèi)了進一步提高存儲的高可(kě)用(yòng),聰明的人們又提出了RAID6方案,可(kě)以在有兩塊磁盤同時損壞的情況下,也能(néng)保障數據可(kě)恢複。
為(wèi)什麽RAID6這麽牛呢(ne),因為(wèi)RAID6在RAID5的基礎上再次改進,引入了雙重校驗的概念。
RAID6除了每塊磁盤上都有同級數據XOR校驗區(qū)以外,還有針對每個數據塊的XOR校驗區(qū),這樣的話,相當于每個數據塊有兩個校驗保護措施,因此數據的冗餘性更高了。
但是RAID6的這種設計也帶來了很(hěn)高的複雜度,雖然數據冗餘性好,讀取的效率也比較高,但是寫數據的性能(néng)就很(hěn)差。因此RAID6在實際環境中應用(yòng)的比較少。
- RAID10
RAID10其實就是RAID1與RAID0的一個合體(tǐ)。
我們看圖就明白了:
RAID10兼備了RAID1和RAID0的有優點。首先基于RAID1模式将磁盤分(fēn)為(wèi)2份,當要寫入數據的時候,将所有的數據在兩份磁盤上同時寫入,相當于寫了雙份數據,起到了數據保障的作(zuò)用(yòng)。且在每一份磁盤上又會基于RAID0技(jì )術講數據分(fēn)為(wèi)N份并發的讀寫,這樣也保障了數據的效率。
但也可(kě)以看出RAID10模式是有一半的磁盤空間用(yòng)于存儲冗餘數據的,浪費的很(hěn)嚴重,因此用(yòng)的也不是很(hěn)多(duō)。
整體(tǐ)對比一下 RAID0、RAID1、RAID5、RAID6、RAID10 的幾個特征:
以下是更多(duō)類型對比以及原理(lǐ)的簡介!
熱備盤
磁盤陣列術語彙編 Array:陣列
磁盤陣列模式是把幾個磁盤的存儲空間整合起來,形成一個大的單一連續的存儲空間。NetRAID控制器利用(yòng)它的SCSI通道可(kě)以把多(duō)個磁盤組合成一個磁 盤陣列。簡單的說,陣列就是由多(duō)個磁盤組成,并行工作(zuò)的磁盤系統。需要注意的是作(zuò)為(wèi)熱備用(yòng)的磁盤是不能(néng)添加到陣列中的。
Array Spanning:陣列跨越
陣列跨越是把2個,3個或4個磁盤陣列中的存儲空間進行再次整合,形成一個具有單一連續存儲空間的邏輯驅動器的過程。NetRAID控制器可(kě)以跨越連續 的幾個陣列,但每個陣列必需由相同數量的磁盤組成,并且這幾個陣列必需具有相同的RAID級别。就是說,跨越陣列是對已經形成了的幾個陣列進行再一次的組 合,RAID 1,RAID 3和RAID 5跨越陣列後分(fēn)别形成了RAID 10,RAID 30和RAID 50。
Cache Policy:高速緩存策略
NetRAID控制器具有兩種高速緩存策略,分(fēn)别為(wèi)Cached I/O(緩存I/O)和Direct I/O(直接I/O)。緩存I/O總是采用(yòng)讀取 和寫入策略,讀取的時候常常是随意地進行緩存。直接I/O在讀取新(xīn)的數據時總是采用(yòng)直接從磁盤讀出的方法,如果一個數據單元被反複地讀取,那麽将選擇一種 适中的讀取策略,并且讀取的數據将被緩存起來。隻有當讀取的數據重複地被訪問時,數據才會進入緩存,而在完全随機讀取狀态下,是不會有數據進入緩存的。
Format:格式化
在物(wù)理(lǐ)驅動器(硬盤)的所有數據區(qū)上寫零的操作(zuò)過程,格式化是一種純物(wù)理(lǐ)操作(zuò),同時對硬盤介質(zhì)做一緻性檢測,并且标記出不可(kě)讀和壞的扇區(qū)。由于大部分(fēn)硬盤在出廠時已經格式化過,所以隻有在硬盤介質(zhì)産生錯誤時才需要進行格式化。
Hot Spare:熱備用(yòng)
當一個正在使用(yòng)的磁盤發生故障後,一個空閑、加電(diàn)并待機的磁盤将馬上代替此故障盤,此方法就是熱備用(yòng)。熱備用(yòng)磁盤上不存儲任何的用(yòng)戶數據,最多(duō)可(kě)以有8 個磁盤作(zuò)為(wèi)熱備用(yòng)磁盤。一個熱備用(yòng)磁盤可(kě)以專屬于一個單一的冗餘陣列或者它也可(kě)以是整個陣列熱備用(yòng)磁盤池中的一部分(fēn)。而在某個特定的陣列中,隻能(néng)有一個熱 備用(yòng)磁盤。
當磁盤發生故障時,控制器的固件能(néng)自動地用(yòng)熱備用(yòng)磁盤代替故障磁盤,并通過算法把原來儲存在故障磁盤上的數據重建到熱備用(yòng)磁盤上。數據隻能(néng)從帶有冗餘的 邏輯驅動器上進行重建(除了RAID 0以外),并且熱備用(yòng)磁盤必須有足夠多(duō)的容量。系統管理(lǐ)員可(kě)以更換發生故障的磁盤,并把更換後的磁盤指定為(wèi)新(xīn)的熱備 用(yòng)磁盤。
Hot swap Disk Module:熱交換磁盤模式(熱插拔)
熱交換模式允許系統管理(lǐ)員在服務(wù)器不斷電(diàn)和不中止網絡服務(wù)的情況下更換發生故障的磁盤驅動器。由于所有的供電(diàn)和電(diàn)纜連線(xiàn)都集成在服務(wù)器的底闆上,所以熱 交換模式可(kě)以直接把磁盤從驅動器籠子的插槽中拔除,操作(zuò)非常簡單。然後把替換的熱交換磁盤插入到插槽中即可(kě)。熱交換技(jì )術僅僅在 RAID 1,3,5,10,30和50的配置情況下才可(kě)以工作(zuò)。
Initialization:初始化
在邏輯驅動器的數據區(qū)上寫零的操作(zuò)過程,并且生成相應的奇偶位,使邏輯驅動器處于就緒狀态。初始化将删除以前的數據并産生奇偶校驗,所以邏輯驅動器在此過程中将一并進行一緻性檢測。沒有經過初始化的陣列是不能(néng)使用(yòng)的,因為(wèi)還沒有生成奇偶區(qū),陣列會産生一緻性檢測錯誤。
IOP(I/O Processor):輸入輸出處理(lǐ)器
輸入輸出處理(lǐ)器是NetRAID控制器的指令中心,實現包括命令處理(lǐ),PCI和SCSI總線(xiàn)的數據傳輸,RAID的處理(lǐ),磁盤驅動器重建,高速緩存的管理(lǐ)和錯誤恢複等功能(néng)。
Logical Drive:邏輯驅動器
陣列中的虛拟驅動器,它可(kě)以占用(yòng)一個以上的物(wù)理(lǐ)磁盤。邏輯驅動器把陣列或跨越陣列中的磁盤分(fēn)割成了連續的存儲空間,而這些存儲空間分(fēn)布在陣列中的所有磁 盤上。NetRAID控制器能(néng)設置最多(duō)8個不同容量大小(xiǎo)的邏輯驅動器,而每個陣列中至少要設置一個邏輯驅動器。輸入輸出操作(zuò)隻能(néng)在邏輯驅動器處于在線(xiàn)的狀 态下才運行。
Logical Volume:邏輯卷
由邏輯磁盤形成的虛拟盤,也可(kě)稱為(wèi)磁盤分(fēn)區(qū)。
Mirroring:鏡像
冗餘的一種類型,一個磁盤上的數據在另一個磁盤上存在一個完全相同的副本即為(wèi)鏡像。RAID 1和RAID 10使用(yòng)的就是鏡像。 Parity:奇偶校驗位
在數據存儲和傳輸中,字節中額外增加一個比特位,用(yòng)來檢驗錯誤。它常常是從兩個或更多(duō)的原始數據中産生一個冗餘數據,冗餘數據可(kě)以從一個原始數據中進行重建。不過,奇偶校驗數據并不是對原始數據的完全複制。
在RAID中,這種方法可(kě)以應用(yòng)到陣列中的所有磁盤驅動器上。奇偶校驗位還可(kě)以組成專用(yòng)的奇偶校驗方式,在專用(yòng)奇偶校驗中,奇偶校驗數據可(kě)分(fēn)布在系統中所有的磁盤上。如果一個磁盤發生故障,可(kě)以通過其它磁盤上的數據和奇偶校驗數據重建出這個故障磁盤上的數據。
Power Fail Safeguard:掉電(diàn)保護
當此項設置為(wèi)可(kě)用(yòng)時,在重構過程中(非重建),所有的數據将一直保存在磁盤上,直到重構完成後才删除。這樣如果在重構過程中發生掉電(diàn),将不會發生數據丢失的危險情況。
Ready State:就緒狀态
就緒狀态是一個可(kě)用(yòng)的硬盤,它即不在線(xiàn)也不是熱備用(yòng)盤,并可(kě)以添加到任一個陣列中或者指定為(wèi)熱備用(yòng)盤的這種硬盤狀态。 Rebuild:重建
在RAID 1,3,5,10,30或50陣列中把一個故障盤上的所有數據再生到替換磁盤上的過程。磁盤重建過程中邏輯驅動器通常不會中斷對其數據的訪問請求。
SCSI Disk Status:SCSI磁盤狀态
SCSI磁盤(物(wù)理(lǐ)驅動器)可(kě)以有以下五種狀态,分(fēn)别為(wèi)Ready(就緒),未配置的加電(diàn)可(kě)操作(zuò)磁盤;Online(在線(xiàn)),配置過的加電(diàn)可(kě)操作(zuò)磁 盤;Hot Spare(熱備用(yòng)),當一個磁盤出現故障時,準備使用(yòng)的加電(diàn)待用(yòng)磁盤;Failed(故障),磁盤發生錯誤導緻失效或用(yòng)戶利用(yòng) NetRAID控制器使用(yòng)程序使驅動器脫機的狀态;Rebuilding(重建),磁盤正處于從一個或幾個關鍵性邏輯驅動器上恢複數據的過程中。
Stripe Size:條帶容量
在每個磁盤上連續寫入數據的總量,也稱作(zuò)“條帶深度”。你可(kě)以指定每個邏輯驅動器的條帶容量從2KB,4KB,8KB一直到128KB。為(wèi)了獲得更高的 性能(néng),要選擇條帶的容量等于或小(xiǎo)于操作(zuò)系統的簇的大小(xiǎo)。大容量的條帶會産生更高的讀取性能(néng),尤其在讀取連續數據的時候。而讀取随機數據的時候,最好設定條 帶的容量小(xiǎo)一點。如果指定128KB的條帶将需要8MB内存。
Striping:條帶化
條帶化是把連續的數據分(fēn)割成相同大小(xiǎo)的數據塊,把每段數據分(fēn)别寫入到陣列中不同磁盤上的方法。此技(jì )術非常有用(yòng),它比單個磁盤所能(néng)提供的讀寫速度要快的 多(duō),當數據從第一個磁盤上傳輸完後,第二個磁盤就能(néng)确定下一段數據。數據條帶化正在一些現代數據庫和某些RAID硬件設備中得到廣泛應用(yòng)。
Write policy:寫入策略
當處理(lǐ)器向磁盤上寫入數據的時候,數據先被寫入高速緩存中,并認為(wèi)處理(lǐ)器有可(kě)能(néng)馬上再次讀取它。NetRAID有兩種如下的寫入策略:
Write Back(回寫),在回寫狀态下,數據隻有在要被從高速緩存中清除時才寫到磁盤上。随着主存讀取的數據增加,回寫需要開始從高速緩存中向此 盤上寫數據,并把更新(xīn)的數據寫入高速緩存中。由于一個數據可(kě)能(néng)會被寫入高速緩存中許多(duō)次,而沒有進行磁盤存取,所以回寫的效率非常高。
Write Through(完全寫入),在完全寫入狀态下,數據在輸入到高速緩存時,它同時也被寫到磁盤上。因為(wèi)數據已經複制到磁盤上,所以在高速緩存中可(kě)以直接更改要替換的數據,因此完全寫入要比回寫簡單的多(duō)。