寫在前面:
博客書寫牢記5W1H法則:What,Why,When,Where,Who,How。
本篇主要內容:
● RAID簡介及各RAID級別特點
● 軟RAID的創建使用
RAID簡介
最早時候RAID爲Redundant Arrays of Inexpensive Disks,即廉價磁盤冗餘陣列;後將Inexpensive替換爲Independent,即獨立磁盤冗餘陣列。
優勢:
(1)易於靈活的進行容量擴展
(2)“虛擬化”使可管理性極大的增強
(3)“磁盤分塊”技術帶來性能提高
(4)通過冗餘、熱備、熱換提高可靠性
磁盤冗餘:
(1)鏡像冗餘使用磁盤鏡像技術;
(2)磁盤鏡像是一個簡單的設備虛擬化技術,每個I/O操作都會在兩個磁盤上執行;
(3)磁盤冗餘可提高磁盤的讀性能
校驗冗餘:
(1)根據冗餘算法計算陣列中成員磁盤上數據校驗信息,將校驗信息保存在其他的磁盤資源上;
(2)保證磁盤可靠性;
(3)和鏡像冗餘比較,校驗冗餘的開銷更小
異或算法(XOR);
相同爲假,不同爲真
特點:
提高IO能力
磁盤並行讀寫
提高耐用性
磁盤冗餘來實現
級別:多塊磁盤組織在一起的工作方式不盡相同
RAID的實現方式:
(1)外接式磁盤陣列:通過擴展卡提供適配能力
(2)內接式RAID:主板集成RAID控制器
(3)Software RAID:消耗主機資源,IO大時嚴重影響主機性能。
RAID級別:
組成RAID陣列的不同方式,不同RAID級別:
不同的存儲性能;
不同的數據可靠性;
不同的存儲成本
RAID 0:條帶式數據分佈在各個磁盤上,strip
RAID 1:以鏡像爲冗餘方式,mirror
RAID 2:條帶海明碼奇偶校驗。校驗碼分佈在各個磁盤,提供錯誤檢查與恢復。很少用
RAID 3:數據塊劃分爲更小的塊並行傳輸到各個成員磁盤,計算的XOR校驗放到專用校驗磁盤上。大量連續數據可提供很好速率,隨機數據,奇偶盤成爲瓶頸。
RAID 4:以數據塊爲單位,其他與RAID3相同。數據恢復難度大,控制器難設計,不常用。
RAID 5:獨立存取,校驗信息均勻分散到陣列的各個磁盤上
RAID 10:先鏡像,再整體條帶
RAID 50:先RAID5,再整體條帶
補充:JBOD(Just a Bunch Of Disks)可實現多塊磁盤合併爲一個大的連續空間。
RAID級別 | RAID 0 | RAID 1 | RAID 3 | RAID 5 | RAID 10 | |
別名 | 條帶 | 鏡像 | 專用奇偶位條帶 | 分佈奇偶位條帶 | 鏡像陣列條帶 | |
容錯性 | 無 | 有 | 有 | 有 | 有 | |
冗餘類型 | 無 | 鏡像 | 奇偶校驗 | 奇偶校驗 | 鏡像 | |
備盤 | 無 | 有 | 有 | 有 | 有 | |
讀性能 | 高 | 較單盤略高 | 高 | 高 | 中 | |
隨機寫性能 | 高 | 低,叫單盤差不多 | 最低,比單盤還低 | 低 | 中 | |
連續寫 | 高 | 低 | 低 | 低 | 中 | |
磁盤數 | 2+ | 2N,N>=1 | 3+ | 3+ | 2N,N>=2 | |
可用容量 | 全部N | 50% | N-1 | N-1 | 50% |
軟RAID實現:
mdadm(MD adm)
manage MD devices aka Linux Software RAID
mdadm [mode] <raiddevice> [options] <component-devices>
-C, --create:創建模式
-n #: 使用#個活動塊設備來創建此RAID;
-l #:指明要創建的RAID的級別;
-a {yes|no}:自動創建目標RAID設備的設備文件;
-c CHUNK_SIZE: 指明塊大小;4K整數倍
-x #: 指明空閒盤(替補盤)的個數;
-D:顯示raid的詳細信息;
mdadm -D /dev/md#
-A, --assemble:裝配
-F, --follow, --monitor:監控
-S, --stop:停用MD設備,釋放所有磁盤
mdadm -S /dev/md#
管理模式
-f, --force:標記指定磁盤爲壞
-a, --add:添加磁盤
-r, --remove:移除磁盤
<raiddevice>: /dev/md#
<component-devices>: 任意塊設備或分區
觀察MD狀態:
cat /proc/mdstat
watch
-n #:刷新間隔,單位爲秒
watch -n# `COMMAND`
實例:
#創建5個100M大小的磁盤分區,修改分區類型爲fd(Linux raid auto)
[root@localhost ~]# fdisk /dev/sda ...省略步驟...記得修改分區類型爲fd [root@localhost ~]# partx -a /dev/sda [root@localhost ~]# fdisk -l /dev/sda ...省略部分輸出...看重點 /dev/sda5 8513 8526 112423+ fd Linux raid autodetect /dev/sda6 8527 8540 112423+ fd Linux raid autodetect /dev/sda7 8541 8554 112423+ fd Linux raid autodetect /dev/sda8 8555 8568 112423+ fd Linux raid autodetect /dev/sda9 8569 8582 112423+ fd Linux raid autodetect
#創建MD設備/dev/md0,其中4塊活動設備,RAID級別爲5,自動創建,tunck大小爲1M,1塊備用盤,使用/dev/sda5-9 5塊盤分區
[root@localhost ~]# mdadm -C /dev/md0 -n 4 -l 5 -a yes -c 1M -x 1 /dev/sda{5,6,7,8,9} mdadm: /dev/sda5 appears to contain an ext2fs file system size=5253220K mtime=Tue Mar 15 13:50:48 2016 Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started. [root@localhost ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Tue Mar 15 19:19:04 2016 Raid Level : raid5 Array Size : 328704 (321.05 MiB 336.59 MB) Used Dev Size : 109568 (107.02 MiB 112.20 MB) Raid Devices : 4 Total Devices : 5 Persistence : Superblock is persistent Update Time : Tue Mar 15 19:19:15 2016 State : clean Active Devices : 4 Working Devices : 5 Failed Devices : 0 Spare Devices : 1 Layout : left-symmetric Chunk Size : 1024K Name : localhost.localdomain:0 (local to host localhost.localdomain) UUID : b477152a:6867fa49:d72e3b5c:efbe2709 Events : 18 Number Major Minor RaidDevice State 0 8 5 0 active sync /dev/sda5 1 8 6 1 active sync /dev/sda6 2 8 7 2 active sync /dev/sda7 5 8 8 3 active sync /dev/sda8 4 8 9 - spare /dev/sda9
#格式化並掛載使用,存入文件
[root@localhost ~]# mkfs.ext4 /dev/md0 ...省略輸出... [root@localhost ~]# mkdir /mnt/md0 [root@localhost ~]# mount /dev/md0 /mnt/md0 [root@localhost ~]# cd /mnt/md0 [root@localhost md0]# dd if=/dev/zero of=datafile bs=1M count=100 100+0 records in 100+0 records out 104857600 bytes (105 MB) copied, 0.287878 s, 364 MB/s [root@localhost md0]# ls -l total 102413 -rw-r--r-- 1 root root 104857600 Mar 15 19:26 datafile drwx------ 2 root root 12288 Mar 15 19:20 lost+found
#查看可用空間:(4-1)*100M=300M
[root@localhost md0]# df -h /dev/md0 Filesystem Size Used Avail Use% Mounted on /dev/md0 303M 103M 185M 36% /mnt/md0
#制壞其中一塊活動設備,備用設備立即啓用。查看數據無損失
[root@localhost md0]# mdadm /dev/md0 -f /dev/sda8 mdadm: set /dev/sda8 faulty in /dev/md0 [root@localhost md0]# mdadm -D /dev/md0 ...省略部分輸出... State : clean Active Devices : 4 Working Devices : 4 Failed Devices : 1 Spare Devices : 0 ...省略部分輸出... Number Major Minor RaidDevice State 0 8 5 0 active sync /dev/sda5 1 8 6 1 active sync /dev/sda6 2 8 7 2 active sync /dev/sda7 4 8 9 3 active sync /dev/sda9 5 8 8 - faulty /dev/sda8 [root@localhost md0]# ls -lh total 101M -rw-r--r-- 1 root root 100M Mar 15 19:26 datafile drwx------ 2 root root 12K Mar 15 19:20 lost+found
#繼續制壞
[root@localhost md0]# mdadm /dev/md0 -f /dev/sda9 mdadm: set /dev/sda9 faulty in /dev/md0 [root@localhost md0]# mdadm -D /dev/md0 ...省略部分輸出...狀態變成了clean,degraded State : clean, degraded Active Devices : 3 Working Devices : 3 Failed Devices : 2 Spare Devices : 0 ...省略部分輸出... Number Major Minor RaidDevice State 0 8 5 0 active sync /dev/sda5 1 8 6 1 active sync /dev/sda6 2 8 7 2 active sync /dev/sda7 6 0 0 6 removed 4 8 9 - faulty /dev/sda9 5 8 8 - faulty /dev/sda8
#移除制壞的設備
[root@localhost md0]# mdadm /dev/md0 -r /dev/sda9 mdadm: hot removed /dev/sda9 from /dev/md0 [root@localhost md0]# mdadm /dev/md0 -r /dev/sda8 mdadm: hot removed /dev/sda8 from /dev/md0 [root@localhost md0]# mdadm -D /dev/md0 ...省略部分輸出... State : clean, degraded Active Devices : 3 Working Devices : 3 Failed Devices : 0 Spare Devices : 0 ...省略部分輸出... Number Major Minor RaidDevice State 0 8 5 0 active sync /dev/sda5 1 8 6 1 active sync /dev/sda6 2 8 7 2 active sync /dev/sda7 6 0 0 6 removed
#做數據改動
[root@localhost md0]# dd if=/dev/zero of=datafile2 bs=1M count=80 80+0 records in 80+0 records out 83886080 bytes (84 MB) copied, 0.1969 s, 426 MB/s [root@localhost md0]# ls -lh total 181M -rw-r--r-- 1 root root 100M Mar 15 19:26 datafile -rw-r--r-- 1 root root 80M Mar 15 19:41 datafile2 drwx------ 2 root root 12K Mar 15 19:20 lost+found
#模擬添加新硬盤,查看同步狀態
[root@localhost md0]# mdadm /dev/md0 -a /dev/sda9 mdadm: added /dev/sda9 [root@localhost md0]# mdadm /dev/md0 -a /dev/sda8 mdadm: added /dev/sda8 [root@localhost md0]# mdadm -D /dev/md0 ...省略部分輸出...狀態變成了clean, degraded, recovering State : clean, degraded, recovering Active Devices : 3 Working Devices : 5 Failed Devices : 0 Spare Devices : 2 ...省略部分輸出... Rebuild Status : 72% complete ...省略部分輸出... Number Major Minor RaidDevice State 0 8 5 0 active sync /dev/sda5 1 8 6 1 active sync /dev/sda6 2 8 7 2 active sync /dev/sda7 4 8 9 3 spare rebuilding /dev/sda9 5 8 8 - spare /dev/sda8
#稍後片刻,同步數據完成
[root@localhost md0]# mdadm -D /dev/md0 ...省略部分輸出... State : clean Active Devices : 4 Working Devices : 5 Failed Devices : 0 Spare Devices : 1 ...省略部分輸出... Number Major Minor RaidDevice State 0 8 5 0 active sync /dev/sda5 1 8 6 1 active sync /dev/sda6 2 8 7 2 active sync /dev/sda7 4 8 9 3 active sync /dev/sda9 5 8 8 - spare /dev/sda8
#實驗完成,打掃戰場。/dev/md0會自動消失的
[root@localhost ~]# umount /dev/md0 [root@localhost ~]# mdadm -S /dev/md0 mdadm: stopped /dev/md0
#如果後悔了,現在還能裝載回來
[root@localhost ~]# mdadm -A /dev/md0 /dev/sda{5..9} mdadm: /dev/md0 has been started with 4 drives and 1 spare. [root@localhost ~]# mount /dev/md0 /mnt/md0 [root@localhost ~]# ls /mnt/md0 datafile datafile2 lost+found