程序員需要知道的 RAID 基本原理
RAID,全稱為redundant array of independent disks,是目前商用服務器常見的磁盤管理技術。作為軟件開發人員,需要了解各級RAID的特性,以便根據需求做出做合適的選擇。本文總結了常見的RAID級別的特性,包括如下內容:
- RAID的基本作用
- 各級RAID的基本原理
RAID的基本作用
RAID的一般有如下作用
- 數據冗余
- 性能提升
數據冗余是指把數據的校驗信息存放在冗余的磁盤中,在某些磁盤數據損壞時,能從其他未損壞的磁盤中,重新構建數據。
性能提升是指RAID能把多塊獨立的磁盤組成磁盤陣列,通過把數據切成分片的方式,使得讀/寫數據能走多塊磁盤,從而提升性能。
各級RAID的基本原理
根據RAID的冗余信息程度,切分數據的方式等不同,可以把RAID分成不同的級別,分別是
- RAID0
- RAID1
- RAID2
- RAID3
- RAID4
- RAID5
- RAID6
接下來就討論這些RAID級別的基本原理。
RAID0的基本原理
RAID0設計的目標是為了提升讀寫性能,但并不帶數據冗余信息。
如上圖,RAID0會把數據切成塊,分別存儲在N個磁盤上。當讀數據時,如果要讀的數據塊比較大,分布在多次磁盤上,那么能同時從多塊盤讀數據;當寫數據時,如果要寫的數據塊比較大,分布式在多塊磁盤上,那么同時能從多塊盤寫數據。
因為數據分布在多塊盤上,當某塊磁盤損壞時,整個RAID系統就不可用了。因此,N塊盤的RAID0的特性如下:
- 讀性能最好情況下是單塊盤的N倍
- 寫性能最好情況下是單塊盤的N倍
- 空間利用率為100%
- 不具有冗余信息,任何一塊磁盤損壞,整個RAID不可用
RAID1的基本原理
RAID1的設計目標是為每份數據都提供冗余數據,其結構如下:
如上圖,RAID1中每個磁盤都有一個冗余的鏡像盤,兩個磁盤的數據是一模一樣的。RAID1讀數據時,如果數據分布在多塊磁盤上,那么可以利用所有數據盤的帶寬;寫數據時,要同時寫入數據盤和鏡像盤,因此,需要等待最慢的磁盤寫完成,寫操作才完成,因此,寫性能可能會略微下降。N塊盤的RAID1的特性如下:
- 讀性能最好情況下是原來的N倍
- 寫性能略微小于RAID0
- 空間利用率50%
- N塊盤,壞掉N/2塊,RAID還能正常使用
RAID2的基本原理
RAID2的設計目標是在RAID0級別的基礎上,加了海明糾錯碼。
如上圖,前面四個盤是數據盤,后面三個盤是糾錯碼。RAID2讀數據時,能同時使用多個數據盤的帶寬;RAID2寫數據時,除了寫數據盤,還需要寫校驗盤,寫性能會有下降。因此,N塊盤的RAID2的特性如下:
- 讀性能不到原來的N倍,因為還有一部分是校驗盤
- 寫性能會有下降,因為每次都要寫校驗盤,受限于校驗盤的數量
- 空間利用率小于100%,因為海明糾錯碼需要的冗余盤一般比數據盤的數量少
- 根據海明糾錯碼位數的不同,能容忍的壞盤數不同,具體信息可以參考 海明碼
RAID3的基本原理
RAID3是把數據按照字節分別存在不同的磁盤中,并且最后一個磁盤提供糾錯冗余,其結構如下:
如上圖,由于按照字節切分數據,讀數據時,一定會同時從多個盤讀數據,可以利用所有數據盤的帶寬;寫數據時,也會利用所有磁盤的帶寬,但所有的寫校驗數據都會在一個盤,因此,寫性能主要受限于校驗盤。N快盤的RAID3的特性如下:
- 讀性能是N-1倍,其中一塊盤是校驗盤
- 寫性能受限于校驗盤的寫性能
- 空間利用率為(N-1)/N
- 壞掉一塊盤,RAID還能正常工作
RAID4
RAID4是把數據按照分塊分別存在不同的磁盤中,并且最后一個磁盤提供糾錯冗余,其結構如下:
如上圖,讀數據時,當數據分布在多塊盤時,能夠利用多塊數據盤的帶寬;寫數據時,如果數據分布在多快盤時,能利用所有磁盤帶寬,但寫校驗數據只能在一塊盤上,因此,寫性能主要受限于校驗盤。N塊盤的RAID4的特性如下:
- 讀性能是N-1倍,其中一塊盤是校驗盤
- 寫性能受限于校驗盤的寫性能
- 空間利用率為(N-1)/N
- 壞掉一塊盤,RAID還能正常工作
RAID5
RAID5是把數據塊按照分塊分別存在不同的磁盤中,并且冗余信息也會分塊分布在多塊磁盤中,其結構如下:
如上圖,讀數據時,當數據分布在多塊盤時,能夠利用多塊數據盤的帶寬;寫數據時,如果數據分布在多塊盤時,能利用所有數據盤帶寬,同時寫校驗數據也分散在多塊盤上,但因為要額外寫入校驗數據,因此,寫數據的性能略微有所下降。N塊盤的RAID5的特性如下:
- 讀性能是N倍
- 寫性能略微弱于RAID0
- 空間利用率為(N-1)/N
- 壞掉一塊盤,RAID還能正常工作
RAID6
RAID6是把數據塊按照分塊分別存在不同的磁盤中,并且冗余信息為兩份奇偶校驗碼,分布在多塊磁盤中,其結構如下:
如上圖,讀數據時,當數據分布在多塊盤時,能夠利用多塊數據盤的帶寬;寫數據時,如果數據分布在多塊盤時,能利用多塊數據盤帶寬,同時寫校驗數據也分散在多塊盤中,但因為要額外寫入兩份校驗數據,因此,寫數據的性能要略微下降。N塊盤的RAID6的特性如下:
- 讀性能是N倍
- 寫性能略微弱于RAID0
- 空間利用率為(N-2)/N
- 壞掉兩塊盤,RAID還能正常工作
各級RAID的對比
RAID級別 | 讀性能 | 寫性能 | 空間利用率 | 最大能容忍的壞盤數 |
---|---|---|---|---|
RAID0 | 單塊盤的N倍 | 單塊盤的N倍 | 100% | 0 |
RAID1 | 單塊盤的N倍 | 略微弱于單塊盤的N倍 | 50% | N/2 |
RAID2 | 不到單塊盤的N倍 | 單盤的寫入速度 * 校驗盤的數量 | 不到100% | 取決于海明糾錯碼位數 |
RAID3 | 單塊盤的N-1倍 | 校驗盤的寫入速度 | (N-1)/N | 1 |
RAID4 | 單塊盤的N-1倍 | 校驗盤的寫入速度 | (N-1)/N | 1 |
RAID5 | 單塊盤的N倍 | 略微弱于單塊盤的N倍 | (N-1)/N | 1 |
RAID6 | 單塊盤的N倍 | 略微弱于單塊盤的N倍,差于RAID5 | (N-2)/N | 2 |
一般地,RAID0容忍的壞盤數為0,風險太大,一般不常用;RAID1的信息冗余量很多,適合于對信息安全要求很高并且預算充足的場景;RAID2的控制器比較復雜,一般不常用;RAID3和RAID4由于其寫入性能差,也不常用;RAID5由于讀寫性能、能容忍的壞盤數都比較均衡,因此,一般工業界經常使用的是RAID5;RAID6對于壞盤數容忍度較高,適合于對信息安全比較高的場景。
來自:http://oserror.com/backend/raid-principle/