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:
此时,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:
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:
重读文件
[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
至此,扩容完成。