Linux運維---磁碟存儲-2. RAID

来源:https://www.cnblogs.com/shiyw/archive/2020/02/27/12371956.html
-Advertisement-
Play Games

隨著單塊磁碟在數據安全、性能、容量上呈現出的局限,磁碟陣列(Redundant Arrays of Inexpensive/Independent Disks,RAID)出現了,RAID把多塊獨立的磁碟按不同的方式組合起來,形成一個磁碟組,以獲得比單塊磁碟更高的數據安全、性能、容量。 一. 常見的R ...


隨著單塊磁碟在數據安全、性能、容量上呈現出的局限,磁碟陣列(Redundant Arrays of Inexpensive/Independent Disks,RAID)出現了,RAID把多塊獨立的磁碟按不同的方式組合起來,形成一個磁碟組,以獲得比單塊磁碟更高的數據安全、性能、容量。

一. 常見的RAID 級別

RAID有RAID0~RAID7幾種級別,另外還有一些複合的RAID模式,比如:RAID10、RAID01、RAID50、RAID53。

常用的RAID模式有RAID0、RAID1、RAID5、RAID10。

  1. RAID0

RAID0也就是常說的數據條帶化(Data Stripping),數據被分散存放在陣列中的各個物理磁碟上,需要2塊及以上的硬碟,成本低,性能和容量隨硬碟數遞增,在所有的RAID級別中,RAID 0的速度是最快的,但是RAID 0沒有提供冗餘或錯誤修複能力,如果一個磁碟(物理)損壞,則所有的數據都無法使用。

對於有容災模式的RAID陣列,某塊磁碟損壞時,只要換上新的硬碟即可,陣列系統會自動同步數據到新的硬碟。(不支持熱插拔的話,需要先關機再開機)

  1. RAID1

RAID1也就是常說的數據鏡像(Data Mirroring),2塊及以上的硬碟(偶數個),被分為2組,數據在每組磁碟中各有一份,若其中一組有磁碟損壞,另一組可以保證數據訪問不會中斷。RAID1同RAID0一樣,有很好的讀取速度,但是寫的速度,有所下降。

  1. RAID5

RAID 5 是一種數據安全、性能、容量、成本、可行性都相對兼顧的解決方案,正因此,類似的RAID2、RAID3、RAID4、RAID6很少得以實際應用。 RAID5需要3塊及以上的硬碟, 它不是對存儲的數據直接進行備份,而是把數據和相對應的奇偶校驗信息存儲到組成陣列的各個磁碟上,簡單來說就是:任意壞掉一塊盤時,另外的N-1塊盤可以利用奇偶校驗信息,把這塊壞掉的磁碟上的數據恢復出來。 RAID 5可以理解為是RAID 0和RAID 1的折衷方案,有和RAID 0相近似的數據讀取速度,有比RAID1低的容災能力(RAID5只允許一塊磁碟損壞),因為多了奇偶校驗信息,寫入數據的速度比RAID1慢。

  1. RAID10

RAID10,名稱上便可以看出是RAID0與RAID1的結合體,顯然需要至少4塊磁碟。不過,先RAID0後RAID1,還是先RAID1後RAID0,是不一樣的。

RAID01,是先做RAID0,然後對2組RAID0再做RAID1,假設此時某個RAID0壞掉一塊磁碟,這個RAID0隨即不可用,所有的IO全部指向剩下的那個RAID0;

RAID10,是先做RAID1,然後對2組RAID1再做RAID0,假設此時某個RAID1壞掉一塊磁碟,當前RAID1仍然能提供服務,並且另一個RAID1也同時可以壞掉一塊磁碟。

所以,我們通常選擇RAID10,而不是RAID01。

  1. 不同RAID級別的讀寫性能

假設都用4塊磁碟,RAID0,RAID1,RAID5,RAID10在多線程/多CPU情況下,都可以同時讀取多塊磁碟,讀的性能都很不錯; 寫的性能(IOPS)依次遞減,大致是:RAID0 > RAID10 > RAID1 > RAID5。 二. RAID的空間計算

在做RAID時,通常選擇統一規格的磁碟,如果真的有不同空間大小、不同讀寫速度的磁碟,陣列系統會以空間小、速度低的為標準,空間大、速度高的磁碟向下相容。比如:100G,50G的2塊磁碟做RAID0,得到的空間為50G*2 = 100G。

RAID的空間計算公式: RAID0的空間:Disk Size * N RAID1的空間:(Disk Size * N)/2 RAID5的空間:((N-1)/N) * (Disk Size * N) = (N-1) * Disk Size RAID10的空間:(Disk Size * N/2)/2 + (Disk Size * N/2)/2 = (Disk Size * N)/2

假設都用4塊磁碟,每塊磁碟都為100G RAID0的空間:100G * 4 = 400G RAID1的空間:(100G * 4)/2 = 200G RAID5的空間:(4-1) * 100G = 300G RAID10的空間: (100G * 4)/2 = 200G 三. RAID的IOPS計算

  1. 單塊硬碟的IOPS是固定的 關於單塊磁碟IOPS的計算,中有詳細的方法,但通常這個值是相對固定的,不需要重覆計算,參考如下:

可以發現,同樣轉數,不同型號的單塊磁碟,IOPS都維持在一個類似的數量級。

  1. RAID的IOPS計算 有了單塊磁碟的IOPS,那麼多塊磁碟的IOPS計算就很簡單了,比如,對於RAID0或者單純串聯磁碟(JBOD: just a bunch of disks)的存儲來說,10塊175 IOPS的磁碟的總IOPS就是10*175 = 1750 IOPS。 但是對於其他RAID級別並不是這樣,因為RAID有多次寫IO的開銷存在,簡單來說就是:對RAID發起一次寫IO,RAID內部會有不止一次的寫IO發生,RAID內部的IO開銷如下:

從圖中得到公式:用戶讀IO+N*用戶寫IO = 總IOPS (N就是RAID內部的IO開銷次數)

假設用戶讀寫請求各一半(50%),同樣還是以10塊175 IOPS的磁碟為例: 50% * 用戶總IO請求數 + N * (50% * 用戶總IO請求數) = 175 IOPS * 10

以RAID1為例,那麼N = 2,上式變為:1.5 *用戶總IO請求數 = 1750 IOPS 用戶總IO請求數 = 1167 IOPS 這就是10塊175 IOPS的磁碟做了RAID1,所能提供的IOPS。

可參考寫懲罰(write penalty)

  1. RAID的IOPS計算在現實中的應用 在實際使用中,我們通常不是計算現有RAID的IOPS,而是反過來:選擇好磁碟規格,RAID模式,測試出系統的讀寫比例,系統需要達到的IOPS,然後看看,需要多少塊硬碟來完成陣列,才能達到這樣的IOPS需求?

假設:選擇了175 IOPS的磁碟,做RAID1,系統讀寫比例為60%:40%,系統需要達到2000 IOPS 問:要配置多少塊這樣規格的硬碟?

把上面的公式改為通用公式: reads * WorkloadIOPS + writesimpact * (writes * Workload_IOPS) = 175 * M 60% * 2000 + 2 * (40% * 2000) = 175 * M M = 16 (也就是說,要達到指定的2000 IOPS,RAID1需要配置16塊175 IOPS的磁碟)

可能有人會覺得,系統的讀寫請求比例,系統需要達到多少IOPS,並不知道,如果沒有前期測試的話,那麼只能根據經驗來估測了。 四. RAID在資料庫存儲上的應用

以SQL Server資料庫為例,看下不同的RAID級別適用於什麼場景: RAID0,由於沒有容災機制,很少被單獨使用。

RAID1,操作系統、SQL Server實例、日誌文件; RAID5,數據文件,備份文件; RAID10,所有類型都適用,不過考慮成本,通常不會全部使用RAID10。 五、使用mdadm創建RAID 創建RAID陣列

我們可以通過 mdadm 命令來創建軟體RAID,比如下麵命令可以創建一個RAID5

sudo mdadm --create /dev/md0 -a yes -l 5 -n 3 /dev/sdb /dev/sdc /dev/sdd -x  1 /dev/sde  

其中

--create /dev/md0 創建一個新RAID,名字叫做 /dev/md0 -a yes 自動在/dev/下創建對應的RAID陣列設備 -l 5 指定RAID級別為5 -n 3 指定硬碟數量。表示用三塊硬碟來創建RAID5,分別為 /dev/sdb, /dev/sdc, /dev/sdd

我們會發現 /dev 下出現了一個名為 md0 的設備

ls -l /dev/md0

brw-rw----. 1 root disk 9, 0 Sep 11 09:40 /dev/md0

自動啟用RAID

在創建好RAID以後,可以將RAID信息保存到 /etc/mdadm.conf 文件中,這樣在下次操作系統重新啟動時,系統會自動載入這個文件來啟用RAID

sudo mdadm -D --scan >/etc/mdadm.conf
cat /etc/mdadm.conf

ARRAY /dev/md0 metadata=1.2 name=MiWiFi-R3-srv:0 UUID=ece6c656:c9999ff6:9d17c0ec:08a0e3af

查看RAID陣列信息

創建好RAID陣列後,我們可以通過 mdadm --misc 模式來查看剛創建好的RAID的詳細信息

mdadm --misc --detail /dev/md0

/dev/md0:
           Version : 1.2
     Creation Time : Tue Sep 11 09:40:45 2018
        Raid Level : raid5
        Array Size : 16758784 (15.98 GiB 17.16 GB)
     Used Dev Size : 8379392 (7.99 GiB 8.58 GB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Tue Sep 11 10:03:35 2018
             State : clean 
    Active Devices : 3
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : MiWiFi-R3-srv:0  (local to host MiWiFi-R3-srv)
              UUID : ece6c656:c9999ff6:9d17c0ec:08a0e3af
            Events : 18

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
       3       8       48        2      active sync   /dev/sdd

或者我們也可以通過 /proc/mdstat 文件來查看RAID的簡潔信息

cat /proc/mdstat

Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdd[3] sdc[1] sdb[0]
      16758784 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]

unused devices: <none>

使用RAID陣列

在創建好RAID陣列後,我們就不能直接操作組成陣列的磁碟了,否則會損壞剛創建好的RAID陣列。 我們通過 /dev/md0 這個設備來進行文件格式化和掛載

set -x
exec 2>&1
mkfs.xfs -f /dev/md0
mount /dev/md0 /mnt
mount |grep md0

+ mkfs.xfs -f /dev/md0
meta-data=/dev/md0               isize=512    agcount=16, agsize=261760 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=4188160, imaxpct=25
         =                       sunit=128    swidth=256 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
+ mount /dev/md0 /mnt
+ mount
+ grep md0
/dev/md0 on /mnt type xfs (rw,relatime,seclabel,attr2,inode64,sunit=1024,swidth=2048,noquota)

關閉RAID

我們可以通過 mdadm --misc 模式來關閉RAID。這會釋放所有資源

在關閉RAID之前需要先卸載RAID:

sudo umount /mnt

然後關閉RAID

sudo mdadm --misc --stop /dev/md0

關閉RAID後,我們可以通過 mdadm --misc --zero-superblock 來清空磁碟中RAID陣列的超級塊信息。 清空就能夠正常使用這些磁碟了

mdadm --misc --zero-superblock /dev/sdb
mdadm --misc --zero-superblock /dev/sdc
mdadm --misc --zero-superblock /dev/sdd

模擬RAID故障

我們可以通過 mdadm --manage /dev/md0 --fail 來將某塊磁碟設置成故障狀態

sudo mdadm /dev/md0 -f /dev/sdd 2>&1

mdadm: set /dev/sdd faulty in /dev/md0

然後我們再來查一下這個RAID的信息

sudo mdadm --misc --detail /dev/md0

/dev/md0:
           Version : 1.2
     Creation Time : Tue Sep 11 10:32:21 2018
        Raid Level : raid5
        Array Size : 16758784 (15.98 GiB 17.16 GB)
     Used Dev Size : 8379392 (7.99 GiB 8.58 GB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Tue Sep 11 10:35:12 2018
             State : clean, degraded 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 1
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : MiWiFi-R3-srv:0  (local to host MiWiFi-R3-srv)
              UUID : c031d0c9:998a4e86:5cf90e71:52b229cd
            Events : 20

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
       -       0        0        2      removed

       3       8       48        -      faulty   /dev/sdd

你會發現 /dev/sdd 的狀態現在變成了 faulty, 但是RAID5這個級別是允許一塊磁碟損壞而不造成數據損壞的。 移除RAID陣列中的磁碟

sudo mdadm --manage /dev/md0 --remove /dev/sdd

更換新磁碟

set -x
exec 2>&1
sudo mdadm --manage /dev/md0 --add /dev/sdd
sudo mdadm --misc --detail /dev/md0

+ sudo mdadm --manage /dev/md0 --add /dev/sdd
mdadm: added /dev/sdd
+ sudo mdadm --misc --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Tue Sep 11 10:32:21 2018
        Raid Level : raid5
        Array Size : 16758784 (15.98 GiB 17.16 GB)
     Used Dev Size : 8379392 (7.99 GiB 8.58 GB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Tue Sep 11 10:40:41 2018
             State : clean, degraded 
    Active Devices : 2
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : MiWiFi-R3-srv:0  (local to host MiWiFi-R3-srv)
              UUID : c031d0c9:998a4e86:5cf90e71:52b229cd
            Events : 22

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
       -       0        0        2      removed

       3       8       48        -      spare   /dev/sdd​

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • find 解釋 語法 示例 ...
  • ln 解釋 語法 示例 軟鏈接 硬鏈接 軟鏈接和硬鏈接區別 ...
  • 目錄 mkdir cd pwd rmdir cp mv rm mkdir 解釋 語法 示例 cd 解釋 語法 示例 pwd 解釋 語法 示例 rmdir 解釋 語法 示例 cp 解釋 語法 示例 mv 解釋 語法 示例 rm 解釋 語法 示例 ...
  • 目錄 touch cat more less head tail touch 解釋 語法 示例 cat 解釋 語法 示例 more 解釋 語法 示例 less 解釋 語法 示例 head 解釋 語法 示例 tail 解釋 語法 示例 ...
  • 目錄處理命令:ls 解釋 語法 ls 列出當前目錄下的所有文件(沒有隱藏的) ls a ls l 列出當前目錄下所有的文件的詳細信息 詳細解釋 第一個單獨解釋 ls lh 列出文件詳細信息,文件單位由系統判定顯示,或顯示K,或現實M 解釋 ls ld 查看目錄的詳細信息,而不是文件夾下的文件信息 l ...
  • 距離centos8.0(現在已經更新到8.1了)的發佈已經過去幾個月了,作為一個剛剛接觸過幾個月centos的萌新來說,本文想通過實際的操作體驗來說對比一下centos8代與7代 首先,centos8 dvd版的鏡像有7G大,也是我目前安裝過最大的操作系統鏡像了,首先從官網下載後,安裝的時候就踩了一 ...
  • 文件目錄結構 閑話篇: linux我也是最近才開始學,寫隨筆是為分享學習經驗的同時也留著供自己以後來參考。因為linux一切皆文件的基本哲學思想。所以我決定從文件目錄開始寫。 正文: 首先linux文件系統格式為ext3/4(ext是extended的縮寫,意為擴展,全稱linux擴展文件系統),這 ...
  • Everspin 是設計,製造和商業銷售離散和嵌入式磁阻RAM(MRAM)和自旋傳遞扭矩MRAM(STT-MRAM)的全球領導者,其市場和應用領域涉及數據持久性和完整性,低延遲和安全性至關重要。Everspin在數據中心,雲存儲,能源,工業,汽車和運輸市場中部署了超過1.2億個MRAM和STT-MR ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...