RAID 0 RAID 1 RAID 5 RAID 10 區別:一張表對比,按場景選
RAID 0、RAID 1、RAID 5、RAID 10 的區別核心在冗餘方式:RAID 0 只條帶,壞一塊全丟;RAID 1 兩塊盤互為映象;RAID 5 拿一塊盤的容量存校驗,容量划算但小塊寫和重建慢;RAID 10 先映象再條帶,容量減半,換來穩定的隨機寫。資料庫、虛擬化選 RAID 10,系統盤選 RAID 1,讀多寫少要容量選 RAID 5。
RAID 0、RAID 1、RAID 5、RAID 10 的區別,歸根到底是資料怎麼冗餘。RAID 0 把資料切塊輪流寫到所有盤上,沒有任何冗餘;RAID 1 讓兩塊盤存完全相同的資料;RAID 5 在每行資料旁邊存一份奇偶校驗,壞一塊盤能算回來;RAID 10 先把盤兩兩做成映象,再把映象組做條帶。冗餘方式決定了其餘的一切:最少幾塊盤、能用多少容量、寫入要付出多少額外 IO、壞盤後還能不能用、重建要讀多少資料。
RAID 0、RAID 1、RAID 5、RAID 10 區別對比表
N 為盤數,C 為單盤容量:
| 對比項 | RAID 0 | RAID 1 | RAID 5 | RAID 10 |
|---|---|---|---|---|
| 原理 | 條帶:資料切塊,輪流寫到各盤 | 映象:兩塊盤存相同資料 | 條帶 + 分散式奇偶校驗 | 先兩兩映象,再條帶 |
| 最少盤數 | 2 | 2 | 3 | 4,且為偶數 |
| 可用容量 | N × C | C(2 塊盤時為一半) | (N − 1) × C | N / 2 × C |
| 隨機讀 | 約 N 塊盤之和 | 約 2 塊盤之和 | 約 N 塊盤之和 | 約 N 塊盤之和 |
| 隨機寫(寫懲罰) | 約 N 塊盤(1) | 約 1 塊盤(2) | 約 N / 4 塊盤(4) | 約 N / 2 塊盤(2) |
| 大塊順序寫 | 約 N 塊盤 | 約 1 塊盤 | 約 N − 1 塊盤 | 約 N / 2 塊盤 |
| 允許壞幾塊 | 0 | 1 | 1 | 至少 1,最多 N / 2(每個映象組各 1 塊) |
| 壞 1 塊之後 | 整卷資料丟失 | 照常讀寫,失去冗餘 | 降級執行,讀壞盤上的資料要讀其餘所有盤再計算 | 只有那一組少了一份副本 |
| 重建要讀多少 | 無法重建 | 剩下的那 1 塊 | 其餘 N − 1 塊全部 | 映象夥伴 1 塊 |
| 重建難度 | — | 低,整盤複製 | 高,逐行計算,耗時長、對業務影響大 | 低,整盤複製 |
| 典型用途 | 臨時資料、可隨時重建的快取 | 系統盤、小型業務 | 讀多寫少、容量優先 | 資料庫、虛擬化 |
表裡最關鍵的一行是“隨機寫”。括號裡的數字叫寫懲罰,指業務寫一次,磁碟實際要做幾次 IO:
- RAID 0 是 1:資料只寫一份。
- RAID 1、RAID 10 是 2:同一份資料寫到映象的兩塊盤上。
- RAID 5 是 4:只改一個資料塊時,要先讀舊資料、讀舊校驗,算出新校驗,再寫新資料、寫新校驗,共 2 次讀加 2 次寫。
隨機讀四種級別差不多,都能用上幾乎全部的盤;真正拉開差距的是隨機寫、壞盤後的表現和重建。
同樣 4 塊 8 TB 盤,四種做法各得到什麼
4 塊盤是四種級別都能做(RAID 1 做成兩組)的最小盤數,用它比較最直觀。假設每塊 7200 轉機械盤隨機讀寫約 150 IOPS、順序寫約 200 MB/s,以下是理論估算:
| 做法 | 可用容量 | 系統里約顯示 | 隨機讀 | 隨機寫 | 順序寫 | 能壞幾塊 |
|---|---|---|---|---|---|---|
| RAID 0 | 32 TB | 29.10 TiB | 約 600 IOPS | 約 600 IOPS | 約 800 MB/s | 0 |
| RAID 5 | 24 TB | 21.83 TiB | 約 600 IOPS | 約 150 IOPS | 約 600 MB/s | 1 |
| RAID 10 | 16 TB | 14.55 TiB | 約 600 IOPS | 約 300 IOPS | 約 400 MB/s | 1,壞在不同映象組時可到 2 |
| 兩組 RAID 1 | 兩個獨立的 8 TB 卷 | 各 7.28 TiB | 每卷約 300 IOPS | 每卷約 150 IOPS | 每卷約 200 MB/s | 每組 1 |
幾點解讀:
- RAID 5 比 RAID 10 多 8 TB,隨機寫卻只有一半。 帶掉電保護寫回快取的陣列卡能把突發寫入先接住,實際表現會好於這個估算;持續寫入超過快取能力後,還是回到這個比例。
- 兩組 RAID 1 和 RAID 10 容量相同,但它是兩個獨立的卷,單個卷的效能只有 RAID 10 的一半。業務能按目錄拆開(比如系統一組、資料一組)時可以這樣用,否則 RAID 10 更合適。
- RAID 0 的數字最好看,風險也隨盤數放大。 任何一塊盤壞,32 TB 全部丟失。假設單盤一年內損壞的機率是 2%,4 塊盤的 RAID 0 一年內丟資料的機率約為 1 − 0.98⁴ ≈ 7.8%,接近單盤的 4 倍。
- 只有 2 塊盤時只能二選一:RAID 0 得到 16 TB、約兩倍的速度、零容錯;RAID 1 得到 8 TB、單盤的寫速度、能壞 1 塊。除非資料可以隨時重新生成,否則選 RAID 1。
換成 SSD 後,單盤隨機 IOPS 高出兩三個數量級,多數業務的瓶頸從效能變成容量,RAID 5 的寫懲罰就不那麼顯眼了;但重建和降級的差別仍然存在。
壞一塊盤之後:容錯與重建差在哪
真正決定一種級別“好不好用”的,常常不是平時的效能,而是壞盤之後那幾個小時到幾天。仍以 4 塊 8 TB 盤為例:
| 級別 | 壞 1 塊後的業務 | 重建要讀的資料 | 重建完成前,再出什麼事會丟資料 |
|---|---|---|---|
| RAID 0 | 整卷不可用 | — | 已經丟了,只能從備份恢復 |
| RAID 1 | 基本正常,讀請求只能走剩下的一塊盤 | 8 TB | 剩下的那塊盤再壞,或讀不出某些扇區 |
| RAID 5 | 明顯變慢,讀壞盤上的資料要讀其餘 3 塊再計算 | 24 TB | 其餘 3 塊中任何一塊再壞;任何一塊讀不出某個扇區,對應的資料塊就補不回來 |
| RAID 10 | 隻影響壞盤所在的映象組 | 8 TB | 只有壞盤的映象夥伴再出問題才會丟資料 |
重建時間在伺服器空閒時主要取決於新盤寫滿需要多久,幾種級別差別不大;業務繁忙時差別就出來了:RAID 1、RAID 10 的重建只佔用兩塊盤,RAID 5 每重建一行都要讀其餘所有盤,和業務搶的是整個陣列的 IO,陣列卡還會為了保業務給重建限速,於是拖得更久,而這段時間裡陣列沒有任何冗餘。
所以“RAID 5 能壞任意一塊,RAID 10 壞兩塊要看位置,RAID 5 更安全”的說法並不成立:兩者都只保證扛住 1 塊,而壞盤之後 RAID 5 的風險視窗更長、暴露面更大。
先按盤數縮小範圍
手裡有幾塊盤,往往已經替你排除了一半選項:
| 盤數 | 能做的級別 | 常見選擇 |
|---|---|---|
| 1 | 無冗餘 | 只放能重建的資料,並另做備份 |
| 2 | RAID 0、RAID 1 | RAID 1;只有臨時資料才用 RAID 0 |
| 3 | RAID 0、RAID 5,或 RAID 1 加 1 塊熱備 | 要容量選 RAID 5;寫多、重視壞盤後的安全,選 RAID 1 加熱備 |
| 4 | RAID 0、RAID 5、RAID 10 | 寫多選 RAID 10,讀多、要容量選 RAID 5 |
| 6–8 | 同上,還能拆成兩組 | 2 塊做 RAID 1 裝系統,其餘做 RAID 10 或 RAID 5 放資料 |
| 8 塊以上的大容量機械盤 | 同上 | RAID 5 重建風險偏高,改用 RAID 10 或 RAID 6 |
最後一行超出了本文的四種級別,但值得記住:單盤容量越大、盤數越多,RAID 5 重建要讀的資料越多、時間越長,大容量機械盤陣列通常不再用 RAID 5。
再按業務選:資料庫、虛擬化、備份
資料庫:RAID 10
資料庫的寫入是小塊隨機寫,InnoDB 的資料頁預設 16 KB,事務日誌還要頻繁同步刷盤,對寫延遲非常敏感。RAID 5 每次小塊寫要 4 次 IO,延遲高且不穩定;壞盤降級時查詢變慢,往往直接表現為業務超時。
一台 8 盤位資料庫伺服器的典型配法:2 塊 480 GB SSD 做 RAID 1 裝系統,6 塊 1.92 TB SSD 做 RAID 10 放資料目錄,可用 5.76 TB。唯讀從庫、報表庫這類讀多寫少的例項,可以用 RAID 5 換容量;有人在可以隨時從主庫重建的從庫上用 RAID 0,前提是接受壞盤後要花幾個小時重新同步一份完整資料。
虛擬化宿主機:RAID 10,SSD 盤少時 RAID 5 也可以
一台宿主機上跑著幾十台虛擬機器,每台的順序讀寫疊加在一起,到了磁碟上就變成了隨機讀寫;一塊盤降級,所有虛擬機器一起變慢。所以本地儲存首選 RAID 10,例如 2 塊盤做 RAID 1 裝虛擬化平台,8 塊 SSD 做 RAID 10 存放虛擬機器磁碟。全快閃記憶體、盤數在 3–5 塊、寫入不重的小叢集,用 RAID 5 換容量也很常見。
用 VMware ESXi 時還有一條硬約束:單台主機的本地儲存要冗餘只能靠陣列卡,ESXi 本身不提供軟 RAID(vSAN 這類跨主機的分散式儲存是另一回事)。
備份伺服器:容量優先,RAID 5 起步
備份是大塊順序寫,正好是 RAID 5 不吃寫懲罰的場景(整行寫入時直接算出校驗,不用讀舊資料),而 RAID 10 拿一半容量換來的隨機寫優勢在這裡用不上。4 塊 8 TB 盤做 RAID 5 可用 24 TB;盤數到 8 塊以上或單盤更大時,換成 RAID 6。備份伺服器上不要用 RAID 0,它存的往往是最後一份副本。也別忘了,備份伺服器本身不應該是唯一的副本,重要資料還要再拷一份到另一個地方。
其他常見業務
- 網站、檔案共享、下載站:讀多寫少,盤少時 RAID 1,容量需求大時 RAID 5。
- 編譯快取、轉碼中間檔案、CDN 快取節點:資料丟了可以重新生成,用 RAID 0 或直接單盤,冗餘不如容量和速度重要。
- 系統盤:兩塊盤做 RAID 1,和資料盤分開,以後重灌系統或換資料盤的級別時互不影響。
在管理系統裡怎麼落地
在 IDC 出租的伺服器上,RAID 級別通常在交付前就定好了,客戶拿到的是一塊虛擬盤,重灌系統不會改變陣列。客戶後來想換級別(比如從 RAID 5 改成 RAID 10),就不是重灌能解決的:陣列要刪除重建,盤上的資料會全部丟失。比較順的流程是三步:客戶先把資料備份到別處;維運在 IPMI 遠端管理 裡開啟走 BMC 通道的 VNC 控制檯,進陣列卡介面按新級別重建虛擬盤,不必到機房接顯示器;客戶再在 客戶自助端 自己選映象重灌系統、恢復資料。
Toplink DCIM 的自助端裡,重灌、救援這類高危操作要輸入手機上的 OTP 動態口令才執行,重灌進度在任務佇列裡可以看到,也可以取消。把“改 RAID 級別要先備份”寫進套餐說明,能省掉很多事後的糾紛。
常見問題
同一台伺服器能同時用 RAID 1 和 RAID 5 嗎?
能。陣列卡上可以有多個磁碟組,每組單獨選級別,常見做法是 2 塊盤做 RAID 1 裝系統,其餘盤做 RAID 5 或 RAID 10 放資料。一塊盤同一時間只能屬於一個磁碟組。
RAID 1 的讀速度是單盤的兩倍嗎?
併發讀多時,請求可以分攤到兩塊盤上,總吞吐接近兩倍;單個大檔案的順序讀,多數實現只從一塊盤讀,速度和單盤差不多。寫入則始終是單盤的速度,因為兩塊盤都要寫。
軟 RAID 的 RAID 10 和陣列卡上的一樣嗎?
容量和容錯的演算法一樣。Linux mdadm 的 raid10 是獨立實現,還支援奇數塊盤和 near、far、offset 幾種佈局,其中 far 佈局的順序讀接近 RAID 0,代價是寫入稍慢;陣列卡上的 RAID 10 通常就是經典的兩兩映象再條帶。