隨著單塊磁盤在資料安全、性能、容量上呈現出的局限,磁盤陣列(Redundant Arrays of Inexpensive/Independent Disks,RAID)出現了,RAID把多塊獨立的磁盤按不同的方式組合起來,形成一個磁盤組,以獲得比單塊磁盤更高的資料安全、性能、容量,
一. 常見的RAID 級別
RAID有RAID0~RAID7幾種級別,另外還有一些復合的RAID模式,比如:RAID10、RAID01、RAID50、RAID53,
常用的RAID模式有RAID0、RAID1、RAID5、RAID10,
- RAID0
RAID0也就是常說的資料條帶化(Data Stripping),資料被分散存放在陣列中的各個物理磁盤上,需要2塊及以上的硬碟,成本低,性能和容量隨硬碟數遞增,在所有的RAID級別中,RAID 0的速度是最快的,但是RAID 0沒有提供冗余或錯誤修復能力,如果一個磁盤(物理)損壞,則所有的資料都無法使用,
對于有容災模式的RAID陣列,某塊磁盤損壞時,只要換上新的硬碟即可,陣列系統會自動同步資料到新的硬碟,(不支持熱插拔的話,需要先關機再開機)
- RAID1
RAID1也就是常說的資料鏡像(Data Mirroring),2塊及以上的硬碟(偶數個),被分為2組,資料在每組磁盤中各有一份,若其中一組有磁盤損壞,另一組可以保證資料訪問不會中斷,RAID1同RAID0一樣,有很好的讀取速度,但是寫的速度,有所下降,
- RAID5
RAID 5 是一種資料安全、性能、容量、成本、可行性都相對兼顧的解決方案,正因此,類似的RAID2、RAID3、RAID4、RAID6很少得以實際應用, RAID5需要3塊及以上的硬碟, 它不是對存盤的資料直接進行備份,而是把資料和相對應的奇偶校驗資訊存盤到組成陣列的各個磁盤上,簡單來說就是:任意壞掉一塊盤時,另外的N-1塊盤可以利用奇偶校驗資訊,把這塊壞掉的磁盤上的資料恢復出來, RAID 5可以理解為是RAID 0和RAID 1的折衷方案,有和RAID 0相近似的資料讀取速度,有比RAID1低的容災能力(RAID5只允許一塊磁盤損壞),因為多了奇偶校驗資訊,寫入資料的速度比RAID1慢,
- 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,
- 不同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計算
- 單塊硬碟的IOPS是固定的 關于單塊磁盤IOPS的計算,中有詳細的方法,但通常這個值是相對固定的,不需要重復計算,參考如下:
可以發現,同樣轉數,不同型號的單塊磁盤,IOPS都維持在一個類似的數量級,
- 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)
- 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=https://www.cnblogs.com/treeskyer/p/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=https://www.cnblogs.com/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?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/238407.html
標籤:其他
下一篇:安裝 CentOS7
