RAID(Redundant
Arrays of Inexpensive Disks,RAID),又叫獨立的磁盤陣列。有“價格便宜具有冗余能力的磁盤陣列”之意。原理是利用數組方式來作磁盤組,配合數據分散排列的設計,提升數據的安全性。磁盤陣列是由很多價格較便宜的磁盤,組合成一個容量巨大的磁盤組,利用個別磁盤提供數據所產生加成效果提升整個磁盤系統效能。利用這項技術,將數據切割成許多區段,分別存放在各個硬盤上。磁盤陣列還能利用同位檢查(Parity Check)的觀念,在數組中任一顆硬盤故障時,仍可讀出數據,在數據重構時,將數據經計算后重新置入新硬盤中。既可以擴大硬盤的容量,選擇性提高磁盤的性能,如,讀、寫、冗余能力等。
一、基礎知識
RAID技術主要包含RAID 0~RAID 7等數個規范,它們的側重點各不相同,常見的規范有如下幾種:
RAID 0:連續以位或字節為單位分割數據,并行讀/寫于兩個以上的磁盤,突破原有物理硬盤的容量,硬盤使用空間近100%,因此具有很高的數據傳輸率,但它沒有數據冗余。 RAID 0只是單純地提高性能,并沒有為數據的可靠性提供保證,而且其中的一個磁盤失效將影響到所有數據。因此,RAID 0不能應用于數據安全性要求高的場合。
RAID 1:它是通過磁盤數據鏡像實現數據冗余,在成對的獨立磁盤上產生互為備份的數據。當原始數據繁忙時,可直接從鏡像拷貝中讀取數據,因此RAID 1可以提高讀取性能。RAID 1是磁盤陣列中單位成本最高的,但提供了很高的數據安全性和可用性。當一個磁盤失效時,系統可以自動切換到鏡像磁盤上讀寫,而不需要重組失效的數據。
RAID 2:將數據條塊化地分布于不同的硬盤上,條塊單位為位或字節,并使用稱為“加重平均糾錯碼(海明碼)”的編碼技術來提供錯誤檢查及恢復。這種編碼技術需要多個磁盤存放檢查及恢復信息,使得RAID 2技術實施更復雜,因此在商業環境中很少使用。
RAID 3:它同RAID 2非常類似,都是將數據條塊化分布于不同的硬盤上,區別在于RAID 3使用簡單的奇偶校驗,并用單塊磁盤存放奇偶校驗信息。如果一塊磁盤失效,奇偶盤及其他數據盤可以重新產生數據;如果奇偶盤失效則不影響數據使用。RAID 3對于大量的連續數據可提供很好的傳輸率,但對于隨機數據來說,奇偶盤會成為寫操作的瓶頸。
RAID 4:RAID 4同樣也將數據條塊化并分布于不同的磁盤上,但條塊單位為塊或記錄。RAID 4使用一塊磁盤作為奇偶校驗盤,每次寫操作都需要訪問奇偶盤,這時奇偶校驗盤會成為寫操作的瓶頸,因此RAID 4在商業環境中也很少使用。
RAID 5:RAID 5不單獨指定的奇偶盤,而是在所有磁盤上交叉地存取數據及奇偶校驗信息。在RAID 5上,讀/寫指針可同時對陣列設備進行操作,提供了更高的數據流量。RAID 5更適合于小數據塊和隨機讀寫的數據。
RAID 3與RAID 5相比,最主要的區別在于RAID
3每進行一次數據傳輸就需涉及到所有的陣列盤;而對于RAID 5來說,大部分數據傳輸只對一塊磁盤操作,并可進行并行操作。在RAID 5中有“寫損失”,即每一次寫操作將產生四個實際的讀/寫操作,其中兩次讀舊的數據及奇偶信息,兩次寫新的數據及奇偶信息。
RAID 6:與RAID 5相比,RAID 6增加了第二個獨立的奇偶校驗信息塊。兩個獨立的奇偶系統使用不同的算法,數據的可靠性非常高,即使兩塊磁盤同時失效也不會影響數據的使用。但RAID 6需要分配給奇偶校驗信息更大的磁盤空間,相對于RAID 5有更大的“寫損失”,因此“寫性能”非常差。較差的性能和復雜的實施方式使得RAID 6很少得到實際應用。
RAID 7:這是一種新的RAID標準,其自身帶有智能化實時操作系統和用于存儲管理的軟件工具,可完全獨立于主機運行,不占用主機CPU資源。RAID 7可以看作是一種存儲計算機(Storage Computer),它與其他RAID標準有明顯區別。除了以上的各種標準,我們可以如RAID 0+1那樣結合多種RAID規范來構筑所需的RAID陣列,例如RAID 5+3(RAID 53)就是一種應用較為廣泛的陣列形式。用戶一般可以通過靈活配置磁盤陣列來獲得更加符合其要求的磁盤存儲系統,其官網為http://www.raid7.com/。
RAID 0+1: 也被稱為RAID 10標準,又區分RAID
1+0與RAID0+1,實際是將RAID 0和RAID 1標準結合的產物,在連續地以位或字節為單位分割數據并且并行讀/寫多個磁盤的同時,為每一塊磁盤作磁盤鏡像進行冗余。它的優點是同時擁有RAID 0的超凡速度和RAID 1的數據高可靠性,但是CPU占用率同樣也更高,而且磁盤的利用率比較低。RAID1+0的讀性能高于RAID 0+1。
RAID5+0是RAID5與RAID0的結合。此配置在RAID5的子磁盤組的每個磁盤上進行包括奇偶信息在內的數據的剝離。每個RAID5子磁盤組要求三個硬盤。RAID50具備更高的容錯能力,因為它允許某個組內有一個磁盤出現故障,而不會造成數據丟失。而且因為奇偶位分部于RAID5子磁盤組上,故重建速度有很大提高。優勢:更高的容錯能力,具備更快數據讀取速率的潛力。需要注意的是:磁盤故障會影響吞吐量。故障后重建信息的時間比鏡像配置情況下要長。
二、創建RAID
面向個人用戶的IDE-RAID芯片一般只提供了RAID 0、RAID 1和RAID 01,RAID 10等RAID規范的支持,雖然它們在技術上無法與商用系統相提并論,但是對普通用戶來說其提供的速度提升和安全保證已經足夠了。下面在VMware虛擬機上centos 7系統對六塊容量相同的硬盤進行對RAID10進行模擬創建。
1.查看硬盤情況
[root@localhost
~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0
20G 0 disk
├─sda1 8:1
0 1G 0 part /boot
└─sda2 8:2
0 19G 0 part
├─cl-root 253:0 0
17G 0 lvm /
└─cl-swap 253:1 0
2G 0 lvm [SWAP]
sdb 8:16 0
20G 0 disk
sdc 8:32 0
20G 0 disk
sdd 8:48 0
20G 0 disk
sde 8:64 0
20G 0 disk
sdf 8:80 0
20G 0 disk
sdg 8:96 0
20G 0 disk
2.創建RAID10
利用五塊20G的硬盤構建REAID10,構建完成后出現一個40G的邏輯空間使用。其中四塊作為RAID10的主要盤,一快備用,當四塊盤中一塊出現故障,備用盤立刻接替故障盤的任務。并快速恢復原有性能,業務中途不會終止,剩下的一塊模擬熱拔插。
[root@localhost
~]# mdadm -C -a yes /dev/md10 -l 10 -n 4
-x 1 /dev/sd{b,c,d,e,f}
mdadm:
Defaulting to version 1.2 metadata
mdadm: array
/dev/md10 started.
-C 創建模式
-a yes /dev/md10 #自動創建目標RAID設備文件/dev/md10
-l 10 #指明要創建的RAID的級別為10
-n 4 #使用4個塊設備來創建此RAID
-x 1 #指定空閑盤個數為1
/dev/sd{b,c,d,e,f} #指明哪5個塊設備來運用于此RAID
3.查看RAID情況
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid10]
md10 : active raid10 sdf[4](S) sde[3]
sdd[2] sdc[1] sdb[0]
41910272 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
unused devices: <none>
此時,RAID10創建成功。
如果需要查看此RAID10的詳細情況,操作一下步驟。
[root@localhost
~]# mdadm -D /dev/md10
/dev/md10:
Version : 1.2
Creation Time : Tue Mar 14 15:17:29 2017
Raid Level : raid10
Array Size : 41910272 (39.97 GiB 42.92 GB)
Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
Raid Devices : 4
Total Devices : 5
Persistence : Superblock is persistent
Update Time : Tue Mar 14 15:20:59 2017
State : clean
Active Devices : 4
Working Devices
: 5
Failed Devices : 0
Spare Devices : 1
Layout : near=2
Chunk Size : 512K
Name : localhost.localdomain:10 (local to host localhost.localdomain)
UUID :
c4794587:759a1d50:13ff6af2:75a62763
Events : 17
Number
Major Minor RaidDevice State
0
8 16 0
active sync set-A /dev/sdb
1
8 32 1
active sync set-B /dev/sdc
2
8 48 2
active sync set-A /dev/sdd
3
8 64 3
active sync set-B /dev/sde
4
8 80 –
spare /dev/sdf
4.格式化RAID10
[root@localhost ~]# mkfs.ext4 /dev/md10
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
Stride=128 blocks, Stripe width=256 blocks
2621440 inodes, 10477568 blocks
523878 blocks (5.00%) reserved for the
super user
First data
block=0
Maximum filesystem blocks=2157969408
320 block groups
32768 blocks per group, 32768 fragments
per group
8192 inodes per group
Superblock backups stored on blocks:
32768,
98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000,
7962624
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem
accounting information: done
5.創建掛載點并掛載在掛載點
[root@localhost ~]# mkdir /cpp && mount /dev/md10 /cpp
6.查看空間使用率
[root@localhost cpp]# lsblk
NAME
MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0
20G 0 disk
├─sda1 8:1 0
1G 0 part /boot
└─sda2 8:2 0
19G 0 part
├─cl-root
253:0 0 17G 0
lvm /
└─cl-swap 253:1 0
2G 0 lvm [SWAP]
sdb 8:16 0
20G 0 disk
└─md10 9:10
0 40G 0 raid10 /cpp
sdc 8:32 0
20G 0 disk
└─md10 9:10
0 40G 0 raid10 /cpp
sdd 8:48 0
20G 0 disk
└─md10 9:10 0
40G 0 raid10 /cpp
sde 8:64 0
20G 0 disk
└─md10 9:10 0
40G 0 raid10 /cpp
sdf 8:80 0
20G 0 disk
└─md10 9:10 0
40G 0 raid10 /cpp
sdg 8:96 0
20G 0 disk
至此,創建RAID10的40G空間就可以開始使用。
三、故障處理
隨著時間的推移,RAID10設備中的硬盤可能會出現故障可能會出現。
方案一:
增加多塊同樣容量的空閑盤,防止使用中的硬盤損壞導致業務中斷。
1.查看可以增加的硬盤情況
[root@localhost
~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE
MOUNTPOINT
sda 8:0 0
20G 0 disk
├─sda1 8:1
0 1G 0 part
/boot
└─sda2 8:2
0 19G 0 part
├─cl-root 253:0 0
17G 0 lvm /
└─cl-swap 253:1 0
2G 0 lvm [SWAP]
sdb 8:16 0
20G 0 disk
└─md10 9:10
0 40G 0 raid10 /cpp
sdc 8:32 0
20G 0 disk
└─md10 9:10
0 40G 0 raid10 /cpp
sdd 8:48 0
20G 0 disk
└─md10 9:10
0 40G 0 raid10 /cpp
sde 8:64 0
20G 0 disk
└─md10 9:10
0 40G 0 raid10 /cpp
sdf 8:80 0
20G 0 disk
└─md10 9:10
0 40G 0 raid10 /cpp
sdg 8:96 0
20G 0 disk
sdh 8:112 0
20G 0 disk
sdi 8:128 0
20G 0 disk
sr0 11:0 1 1024M
0 rom
2.增加/dev/sdg,/dev/sdh到/dev/md10中作為備用盤
[root@localhost ~]# mdadm /dev/md10 -a
/dev/sd{g,h}
mdadm: added
/dev/sdg
mdadm: added
/dev/sdh
3.查看增加情況;
[root@localhost
~]# mdadm -D /dev/md10
/dev/md10:
Version : 1.2
Creation Time : Tue Mar 14 15:17:29 2017
Raid Level : raid10
Array Size : 41910272 (39.97 GiB 42.92 GB)
Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
Raid Devices : 4
Total Devices : 7
Persistence : Superblock is persistent
Update Time : Tue Mar 14 16:13:26 2017
State : clean
Active Devices : 4
Working Devices
: 7
Failed Devices : 0
Spare Devices : 3
Layout : near=2
Chunk Size : 512K
Name : localhost.localdomain:10 (local to host localhost.localdomain)
UUID :
c4794587:759a1d50:13ff6af2:75a62763
Events : 19
Number
Major Minor RaidDevice State
0
8 16 0
active sync set-A /dev/sdb
1
8 32 1
active sync set-B /dev/sdc
2
8 48 2
active sync set-A /dev/sdd
3
8 64 3
active sync set-B /dev/sde
4
8 80 –
spare /dev/sdf
5
8 96 –
spare /dev/sdg
6
8 112 –
spare /dev/sdh
模擬RAID10中/dev/sdb損壞并移除添加/dev/sdi進RAID中;
[root@localhost
app]# mdadm /dev/md10 -f /dev/sdb -r /dev/sdb -a /dev/sdi
mdadm: set
/dev/sdb faulty in /dev/md10
mdadm: hot
removed /dev/sdb from /dev/md10
mdadm: added
/dev/sdi
檢查其效果;
[root@localhost
app]# mdadm /dev/md10
/dev/md10:
39.97GiB raid10 4 devices, 3 spares. Use mdadm –detail for more detail.
方案二:
擴大RAID10的容量,為存放更多數據提供空間。建議在業務不繁忙的時候進行操作,防止磁盤同步數據,降低其他性能。
直接將使用備用盤擴展RAID10容量,由于是RAID10,至少需要倍數的20G硬盤。
接方案一往下進行操作:
# mdadm –grow
–raid-devices=6 /dev/md10
查看狀態:
[root@localhost
app]# mdadm –detail /dev/md10
/dev/md10:
Version : 1.2
Creation Time : Tue Mar 14 15:17:29 2017
Raid Level : raid10
Array Size : 41910272 (39.97 GiB 42.92 GB)
Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
Raid Devices : 6
Total Devices : 7
Persistence : Superblock is persistent
Update Time : Tue Mar 14 16:46:59 2017
State : clean, reshaping
Active Devices : 6
Working Devices
: 7
Failed Devices : 0
Spare Devices : 1
Layout : near=2
Chunk Size : 512K
Reshape Status : 3% complete
Delta Devices : 2, (4->6)
Name : localhost.localdomain:10 (local to host localhost.localdomain)
UUID : c4794587:759a1d50:13ff6af2:75a62763
Events : 72
Number
Major Minor RaidDevice State
6
8 112 0
active sync set-A /dev/sdh
1
8 32 1
active sync set-B /dev/sdc
2
8 48 2
active sync set-A /dev/sdd
3
8 64 3
active sync set-B /dev/sde
7
8 128 4
active sync set-A /dev/sdi
5
8 96 5
active sync set-B /dev/sdg
4
8 80 –
spare /dev/sdf
動態查看數據同步情況:
[root@localhost app]# watch -n1 cat /proc/mdstat
正在同步中:
Personalities :
[raid10]
md10 : active
raid10 sdi[7] sdg[5] sdf[4](S) sdh[6] sde[3] sdc[1] sdd[2]
41910272 blocks super 1.2 512K chunks 2
near-copies [6/6] [UUUUUU]
[=>……………….] reshape =
7.3% (3069440/41910272) finish=26.5min speed=24378K/sec
unused devices:
<none>
Every 10.0s: cat
/proc/mdstat Tue Mar
14 17:44:50 2017
同步完成:
Personalities :
[raid10]
md10 : active
raid10 sdi[7] sdg[5] sdf[4](S) sdh[6] sde[3] sdc[1] sdd[2]
62865408 blocks super 1.2 512K chunks 2
near-copies [6/6] [UUUUUU]
unused devices:
<none>
重讀文件
[root@localhost
app]# resize2fs /dev/md10
resize2fs 1.42.9
(28-Dec-2013)
Filesystem at
/dev/md10 is mounted on /app; on-line resizing required
old_desc_blocks
= 5, new_desc_blocks = 8
The filesystem
on /dev/md10 is now 15716352 blocks long
查看RAID10擴容情況:
[root@localhost
app]# lsblk /dev/md10
NAME MAJ:MIN RM
SIZE RO TYPE MOUNTPOINT
md10 9:10
0 60G 0 raid10 /app
至此,擴容完成。
原創文章,作者:chenbin,如若轉載,請注明出處:http://www.www58058.com/71117
總結的很不錯哦,操作部分有點亂,可以細心整理一下哦
@馬哥教育:
好的,謝謝