我寫的不一定是正確的,但我是這么理解的(知識體量有限,錯了望提醒)
RAID 是什么
基本思想就是把多個硬盤組合起來,成為一個硬盤陣列組,使性能達(dá)到甚至超過一個價格昂貴、容量巨大的硬盤
簡單說就是把多個硬盤組成一個邏輯扇區(qū)來使用,在操作系統(tǒng)層面這就是一個硬盤,能夠動態(tài)的完成硬盤的增大跟縮減通常有硬件RAID跟軟件之分
RAID 的優(yōu)勢
- 增大I/O能力
- 更高的數(shù)據(jù)安全
- 更大的容量
- 高效恢復(fù)磁盤數(shù)據(jù)
- ……
硬件RAID
- 主板上會集成一個RAID控制器,這個控制器連接到外部的一個硬盤組盒來實(shí)現(xiàn)硬件RAID
- 類似上面,就好像多個插在STAT口上多塊硬盤,主板上有一個RAID控制器,管理這幾塊連在STAT口上的硬盤組成RAID
軟件RAID
- 這就沒什么好說的了,就是通過軟件來模擬RAID,軟件RAID的風(fēng)險(xiǎn)也比較大,生產(chǎn)絕對不建議
為什么要組建RAID
類型接口傳輸速率
- IDE:3.3MB/s到16.6MB/s不等
- SCSI:160MB/s 最大
商用居多(以前),cpu占用低,它內(nèi)部有個小控制器,有些也會帶緩存,保證數(shù)據(jù)的持久化 - USB 3:640MB/s
- STAT 3:600MB/s
以上都是理論速度,cpu跟內(nèi)存的數(shù)據(jù)交互兩都是按GB計(jì)算,硬盤的速度有時確實(shí)是服務(wù)器的瓶頸,不考慮現(xiàn)在的 USB3.1和雷電3接口,這個時候就需要組建RAID了
RAID 的級別
RAID 0 (條帶)
基本原理

如上圖,有disk0,1兩塊磁盤,在組建RAID 0 之后,RAID 控制器將一個文件一分為多分,比如1G 大小的文件,分成30MB大小的N個文件,分別放入兩個磁盤中,以STAT口最大傳輸速率為例,單個傳輸在600M/s,兩個一起就是1GB/s 左右每秒的數(shù)據(jù)傳輸。同樣也可以三塊硬盤組建RAID 0,那時這個RAID 0 的速率就是接近單塊硬盤的3倍,但至少是2塊硬盤組建RAID 0
RAID 0特性
- 性能讀寫提升N倍(N為磁盤數(shù)量)
- 冗余能力(容錯能力)沒有
- 空間利用率:Ns(N磁盤數(shù)量,s磁盤大?。?/li>
- 至少兩塊磁盤
RAID 1 (鏡像)
基本原理

如上圖:在存儲文件的時候在DISK 0 中存儲一份,然后還在DISK 1 中存儲一份,寫速度不變,不過在讀取數(shù)據(jù)的時候可以交叉讀取,提高讀速度。這種RAID組合通常是為了數(shù)據(jù)安全性,兩塊硬盤同時壞的幾率肯定比一塊硬盤壞的幾率小太多了
RAID 1特性
- 寫性能下降,讀性能提高(相比單塊硬盤)
- 有冗余能力
- 空間利用率是1/2
- 至少兩塊硬盤
RAID 4 (校驗(yàn)碼)
基本原理

如上圖:在存儲數(shù)據(jù)的時候會被依次分片存入DISK 0,1,2 中,DISK 3 不存放數(shù)據(jù),存放DISK 0,1,2的校驗(yàn)碼。如一個90M的文件被被分別存入A1,A2,A3位置,Ap就是存放著A1,A2,A3的校驗(yàn)碼;在讀取數(shù)據(jù)的時候如果A1,A2,A3的數(shù)據(jù)取出后校驗(yàn)碼不能跟Ap相同,那就數(shù)據(jù)出現(xiàn)問題。這種情況,校驗(yàn)碼盤DISK 3是RAID的瓶頸,所以用的比較少,如果RAID 3 出現(xiàn)問題,就要重新?lián)Q盤或重新計(jì)算校驗(yàn)碼,影響線上業(yè)務(wù)
特性
- 讀寫性能都有提高
- 有冗余能力
- 空間利用率(N-1)N
- 至少三塊硬盤
RAID 5 (循環(huán)冗余校驗(yàn)碼)
基本原理

如上圖:跟RAID 4 差不多,只是每個盤都參與當(dāng)校驗(yàn)碼盤,這種情況如果兩塊硬盤掛了,那數(shù)據(jù)就沒了
特性
- 讀寫性能提高
- 有冗余能力
- 空間利用率(N-1)N
- 至少三塊硬盤
RAID 01 (條帶+鏡像)
基本原理

如圖:先將4塊硬盤分成兩個為組共兩組,每組各做成RAID 0 然后將每組連接起來在組成RAID 1,也就是先條帶(RAID 0),然后鏡像(RAID 1),RAID 在存儲數(shù)據(jù)的時候先左右各存一份也就是DISK 0,1跟DISK 2,3存的東西是一模一樣的,然后數(shù)據(jù)到每組的時候在以條帶的方式分批存入兩個硬盤,如果其中一組RAID 0 掛了,那不會影響業(yè)務(wù),因?yàn)榱硪唤M的跟掛掉的那組數(shù)據(jù)一樣。如果不同組同一個數(shù)據(jù)位的硬盤掛了那就真掛了
特性
- 讀寫性能提高
- 有冗余能力
- 空間利用率1/2
- 至少四塊硬盤
RAID 10 (鏡像+條帶)
基本原理

如圖:跟上面RAID 01 差不多,不解析了,大概理解下也就是先分組做RAID 1 然后將每組做成RAID 0
JBOD(磁盤簇)
基本原理

如上圖:將多個硬盤組成一個邏輯盤,可以自由擴(kuò)大或縮小,擴(kuò)大或縮小不損壞數(shù)據(jù),RAID就不一定,一般硬盤需要分區(qū)、格式化、掛載才能用。JBOD能夠動態(tài)增減硬盤容量
特性
- 無性能表現(xiàn)
- 無冗余能力
- 利用率100%
- 至少兩塊硬盤
至于RAID 3、RAID 4、RAID 50啥特性的自行搜索下
RAID 的級別差異
| RAID級別 | 讀性能 | 寫性能 | 冗余能力 | 利用率% | 硬盤數(shù)量 |
|---|---|---|---|---|---|
| RAID 0 | 單盤N倍 | 單盤N倍 | 無 | 100 | 2 |
| RAID 1 | 接近單盤N倍 | 低于單盤寫能力 | 有 | 50 | 2 |
| RAID 4 | (N-1)/N * s倍 | (N-1)/N * s倍 | 有 | (N-1)/N | 3 |
| RAID 5 | (N-1)/N * s倍 | (N-1)/N * s倍 | 有 | (N-1)/N | 3 |
| RAID 01 | Ns/2倍 | Ns/2倍 | 有 | 50 | 4 |
| RAID 10 | Ns/2倍 | Ns/2倍 | 有 | 50 | 4 |
| JBOD | 無 | 無 | 無 | 100 | 2 |
Linux RAID實(shí)現(xiàn)
內(nèi)核(kernel)中有個模塊叫md(multi disk),這個是用來模擬軟件RAID的,這個跟dm是兩碼事
linux是通過設(shè)備文件訪問每個硬件的(/dev/目錄下),軟件RAID在/dev/ 目錄下生成/dev/md# 開頭的設(shè)備(邏輯RAID)讓linux來實(shí)現(xiàn)軟件RAID,實(shí)際底層還是存儲到各個設(shè)備中(/dev/sd#)
- mdadm是上層用戶用來管理軟件RAID的一個命令工具
- mdadm可以將任何塊設(shè)備做成RAID
RAID 基本操作
# mdadm
創(chuàng)建模式
-c 設(shè)備名
專用選項(xiàng)
-l:RAID級別
-n:#:指定設(shè)備個數(shù)
-a {yes|no}:自動為其創(chuàng)建設(shè)備文件
-c:CHUNK大小,默認(rèn)是64k,每個條帶大小
-x #: 指定空閑盤個數(shù)
# mdadm -C /dev/md0 -l 0 -a yes -n 2 /dev/sda{0,1}
管理模式
--add(-a):新增;--remove(-r):移除; --fail(-f):模擬損壞
# mdadm /dev/md# --fail /dev/sda1 : 模擬硬盤損壞
監(jiān)控模式
-F 設(shè)備名
增長模式
-G 設(shè)備名 指定塊設(shè)備
裝飾模式
注意:將現(xiàn)有做成RAID 的設(shè)備放置到別的主機(jī),通過裝配模式進(jìn)行重新識別
-A
查看RAID陣列的詳細(xì)信息
# mdadm -D /dev/md#: 顯示設(shè)備詳細(xì)信息
# /proc/mdstat: 查看RAID信息
停止陣列
# mdadm -S /dev/md#
將當(dāng)前RAID信息保存至配置文件,以便以后進(jìn)行裝配
# mdadm -D --scan > /etc/mdadm.conf
由于演示我就一塊磁盤來模擬RAID各個級別,只要是塊設(shè)備都能用來做RAID
Linux RAID實(shí)例

這里使用一塊20G磁盤進(jìn)行模擬
RAID 0 實(shí)例
RAID 0 要保證至少需要兩個設(shè)備這里用sdb{1,2}進(jìn)行模擬
mdadm -C /dev/md0 -l 0 -a yes -n 2 /dev/sdb{1,2}

使用
mdadm -C指定創(chuàng)建邏輯RAID名稱,-l指定RAID級別,-a同意自動為其創(chuàng)建設(shè)備文件,-n指定設(shè)備數(shù)量(不能小于塊設(shè)備數(shù)量)使用mdadm -D /dev/md0 查看詳細(xì)信息(應(yīng)該看得懂吧)
mke2fs -j /dev/md0:格式化邏輯RAID
-
掛載(看到lost+found文件就標(biāo)識成功了)
掛載目錄
RAID 1 實(shí)例
這里RAID 1 使用sdb{3,5}進(jìn)行模擬
mdadm -C /dev/md1 -l 1 -a yes -n 2 /dev/sdb{3,5}

第二個紅框在查看RAID設(shè)備的時候看到紅框3的進(jìn)度條,這是RAID 1的特性,盤1數(shù)據(jù)跟盤2保持一致也就是sdb3跟sdb5保持一致,之后會顯示同步完成

- 之后就是
格式化,掛載,看到lost+found表示可以使用了
模擬磁盤損壞
-
先拷貝文件(我拷貝文件/etc/fstab)到掛載目錄,我掛載的是/media目錄,模擬
mdadm /dev/md1 -f /dev/sdb5損壞(/dev/sdb5)
模擬損壞 -
查看掛載目錄fstab文件內(nèi)容
fstab內(nèi)容
這就是RAID 0的特性,允許一塊磁盤損壞,依然不影響數(shù)據(jù)
- 現(xiàn)在添加sdb6至md1(RAID 1)中,在模擬sdb3損壞,查看數(shù)據(jù)是否可以訪問
# mdadm /dev/md1 -r /dev/sdb5:移除損壞盤
# mdadm /dev/md1 -a /dev/sdb6:新增盤
# mdadm /dev/md1 -f /dev/sdb3:模擬sdb3損壞
# cat /media/fstab

cat /media/fstab

文件依然可用
mdadm命令的其他模式的用法自行搜索理解吧
總結(jié)
首先只要理解RAID是什么?然后用在什么地方?特性是什么?怎么用,就能大概了解跟理解他了
- 是什么
也就是一個大容量,冗余可伸縮,增大I/O能力的一個邏輯設(shè)備(理解成硬盤吧) - 用在什么地方
如果這幾個特性是工作或者生產(chǎn)想要實(shí)現(xiàn)或體現(xiàn)的那自己就知道要用在什么地方了- 就比如DIY不愿意升級SSD,可以買個RAID盒子里面放兩個機(jī)械組成一個RAID 0,不過這里注意如果最后I/O接口速度都不能大于你單塊機(jī)械硬盤的傳輸那用了也白用,就比如RAID 盒子是通過USB鏈接到你電腦的,那如果是3.0就白搭了,最好是3.1或者雷電的
- 特性(RAID 級別)
- RAID 0(條帶):增大帶寬
- RAID 1(鏡像):提高安全性
- RAID 5 (循環(huán)校驗(yàn)碼):提高安全性跟帶寬
- ......
- 怎么用?分硬件RAID跟軟件RAID
- 硬件RAID 主板自帶,自己上BIOS設(shè)置或其他地方設(shè)置(現(xiàn)在DIY主板應(yīng)該都有)
- 軟件RAID 上文說的使用Linux內(nèi)核自帶的md模塊實(shí)現(xiàn)軟RAID就是一種,方法還有其他,感興趣自己搜索就好


