RAID简称”磁盘冗余阵列,是由加利福利亚大学伯克利分校在1988年,发表文章并定义的。据英特尔创始人之一戈登·摩尔提出的,当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。但由于硬盘设备的局限性,其已逐渐的成为计算机整体性能提升的瓶颈问题。所以RAID技术便成为目前解决计算机整体性能瓶颈的最折中的解决方案。RAID其基本思想就是把多个相对便宜的硬盘组合起来,使其组合成一个容量更大、更安全的硬盘组。目前已有的RAID硬盘组方案至少有几十种,其最常用的要数RAID5与RAID10硬盘组方案。
1.1 部署RAID10磁盘阵列组
接下里我们用VMware虚拟机模拟磁盘阵列组,首先为虚拟机模拟添加4块硬盘来制作一个RAID10磁盘阵列组,注意在虚拟机中添加硬盘后要关闭系统否则虚拟机不能识别新添加的硬盘。
mdadm命令能够在Linux系统中创建和管理软件RAID磁盘阵列组
参数 | 作用 |
---|---|
-a | 检测设备名称 |
-n | 指定设备数量 |
-l | 指定raid级别 |
-C | 创建 |
-v | 显示过程 |
-f | 模拟设备损坏 |
-r | 移除设备 |
-Q | 查看摘要信息 |
-D | 查看详细信息 |
-S | 停止阵列 |
1.2 使用mdadm命令创建RAID10,名称为"/dev/md0"。
[root@centos7 ~]# mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm: layout defaults to n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: size set to 10477568K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
-C参数代表创建一个RAID阵列卡,-v参数来显示出创建的过程,同时就在后面追加一个设备名称,-a yes参数代表自动创建设备文件,-n 4参数代表使用4块硬盘来制作这个RAID磁盘阵列组,而-l 10参数则代表RAID10方案
1.3 将/dev/md0 磁盘阵列组转换为ext4格式:
[root@centos7 ~]# mkfs.ext
mkfs.ext2 mkfs.ext3 mkfs.ext4
[root@centos7 ~]# mkfs.ext4 /dev/md0
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
1310720 inodes, 5238784 blocks
261939 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2153775104
160 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
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
1.4 创建挂载点,挂载成功后可看到可用空间为20G:
[root@centos7 ~]# mkdir /RAID
[root@centos7 ~]# mount /dev/md0 /RAID/
[root@centos7 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 50G 5.1G 45G 11% /
devtmpfs 475M 0 475M 0% /dev
tmpfs 489M 88K 489M 1% /dev/shm
tmpfs 489M 7.2M 482M 2% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 1014M 168M 847M 17% /boot
/dev/sda3 50G 64M 50G 1% /app
tmpfs 98M 16K 98M 1% /run/user/0
/dev/sr0 7.8G 7.8G 0 100% /run/media/root/CentOS 7 x86_64
/dev/md0 20G 45M 19G 1% /RAID ##挂载成功
1.5 查看/dev/md0磁盘阵列设备组详细信息,并把挂载信息写入到配置文件中永久生效:
[root@centos7 ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sun Aug 13 12:59:20 2017
Raid Level : raid10
Array Size : 20955136 (19.98 GiB 21.46 GB)
Used Dev Size : 10477568 (9.99 GiB 10.73 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Sun Aug 13 13:05:50 2017
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Name : centos7.laishaohua:0 (local to host centos7.laishaohua)
UUID : 098741ef:b6729b23:6f589e63:461dca5e
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
[root@centos7 ~]# vim /etc/fstab
UUID=5427f1f2-fa5e-419d-b921-9b9fff784c16 /RAID ext4 defaults 0 0
1.6 模拟损坏磁盘阵列及修复
[root@centos7 ~]# mdadm /dev/md0 -f /dev/sdb ##模拟/dev/sdb硬盘损坏
mdadm: set /dev/sdb faulty in /dev/md0
[root@centos7 ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sun Aug 13 12:59:20 2017
Raid Level : raid10
Array Size : 20955136 (19.98 GiB 21.46 GB)
Used Dev Size : 10477568 (9.99 GiB 10.73 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Sun Aug 13 13:15:55 2017
State : clean, degraded
Active Devices : 3
Working Devices : 3
Failed Devices : 1
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Name : centos7.laishaohua:0 (local to host centos7.laishaohua)
UUID : 098741ef:b6729b23:6f589e63:461dca5e
Events : 19
Number Major Minor RaidDevice State
- 0 0 0 removed
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
0 8 16 - faulty /dev/sdb ##损坏设备
RAID10级别的磁盘阵列允许一组RAID1硬盘组中存在一个故障盘而不影响使用,模拟将新硬盘存储设备换上后再用mdadm命令来予以恢复。
[root@centos7 ~]# umount /RAID ##取消/RAID挂载
[root@centos7 ~]# mdadm /dev/md0 -a /dev/sdb ##备用驱动器上重建分区
[root@centos7 ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sun Aug 13 12:59:20 2017
Raid Level : raid10
Array Size : 20955136 (19.98 GiB 21.46 GB)
Used Dev Size : 10477568 (9.99 GiB 10.73 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Sun Aug 13 13:31:24 2017
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Name : centos7.laishaohua:0 (local to host centos7.laishaohua)
UUID : 098741ef:b6729b23:6f589e63:461dca5e
Events : 48
Number Major Minor RaidDevice State
4 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
[root@centos7 ~]# mount -a
2.1 RAID 5盘组+备份
RAID 5可以理解为是RAID 0和RAID 1的折中方案,RAID 5作为一种存储性能、数据安全和存储成本兼顾的存储解决方案,其只是多了一个奇偶校验信息,RAID 5具有和RAID 0近似的数据读取速度,当RAID 5的一个磁盘数据发生损坏后,可以利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据,同时RAID 5的磁盘空间利用率要比RAID 1高,存储成本相对较便宜,一旦RAID磁盘阵列组中有硬盘出现故障后,用于备份的硬盘将会自动顶替上去。防止宕机。
为了让实验顺利进行,需要VMware快照将系统恢复至初始状态,RAID 5磁盘阵列技术至少需要3块硬盘+1块备份盘。
-n 3参数代表创建这个RAID5所需的硬盘个数,-l 5参数代表RAID磁盘阵列的级别,而-x 1参数则代表有1块备份盘,查看/dev/md0磁盘阵列组的时候就能看到有一块备份盘。
[root@centos7 ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 10477568K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@centos7 ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sun Aug 13 14:15:49 2017
Raid Level : raid5
Array Size : 20955136 (19.98 GiB 21.46 GB)
Used Dev Size : 10477568 (9.99 GiB 10.73 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Sun Aug 13 14:16:06 2017
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 4
Failed Devices : 0
Spare Devices : 2
Layout : left-symmetric
Chunk Size : 512K
Rebuild Status : 35% complete
Name : centos7.laishaohua:0 (local to host centos7.laishaohua)
UUID : f6ede6cb:075ca3af:132370cb:4a51dbac
Events : 6
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
4 8 48 2 spare rebuilding /dev/sdd
3 8 64 - spare /dev/sde ##备胎盘^__^
2.2 将/dev/md0 磁盘阵列组转换为ext4格式并将挂载信息添加写入/etc/fstab
[root@centos7 ~]# mkfs.ext4 /dev/md0
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
1310720 inodes, 5238784 blocks
261939 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2153775104
160 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
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
[root@centos7 ~]# vim /etc/fstab ##写入永久挂载信息
UUID=4e99561b-e65a-4d0e-bf7c-95d56b3e6159 /RAID ext4 defaults 0 0
[root@centos7 ~]# mount /dev/md0 /RAID/
[root@centos7 ~]# mount -a
2.3 模拟损坏磁盘阵列
将硬盘设备/dev/sdb模拟移出磁盘阵列组,再查看/dev/md0磁盘阵列组状态可以看到备份盘已经自动顶替上去,在RAID磁盘阵列组数据安全保证的基础上进一步提高数据可靠性
[root@centos7 ~]# mdadm /dev/md0 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
[root@centos7 ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sun Aug 13 14:15:49 2017
Raid Level : raid5
Array Size : 20955136 (19.98 GiB 21.46 GB)
Used Dev Size : 10477568 (9.99 GiB 10.73 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Sun Aug 13 14:37:35 2017
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 3
Failed Devices : 1
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Rebuild Status : 16% complete
Name : centos7.laishaohua:0 (local to host centos7.laishaohua)
UUID : f6ede6cb:075ca3af:132370cb:4a51dbac
Events : 22
Number Major Minor RaidDevice State
3 8 64 0 spare rebuilding /dev/sde ##自动顶替
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd
0 8 16 - faulty /dev/sdb
3.1 虚拟环境中RAID 10和RAID 5性能测试对比
RAID 10
[root@centos7 RAID]# dd if=/dev/zero of=RAID10 bs=1M count=1024 ##写入数据
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 2.86215 s, 375 MB/s
[root@centos7 RAID]# dd if=RAID10 of=/dev/null bs=1M count=1024 ##读取数据
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 1.49421 s, 719 MB/s
RAID 5
[root@centos7 RAID]# dd if=/dev/zero of=RAID5 bs=1M count=1024 ##写入数据
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 4.55086 s, 236 MB/s
[root@centos7 RAID]# dd if=RAID5 of=/dev/null bs=1M count=1024 ##读取数据
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 1.45444 s, 738 MB/s
结论:
IO性能
- 磁盘阵列组文件格式均为xfs格式;
- 在写入性能上RAID 10由于不存在数据校验,每次写操作只是单纯的执行写操作。因此在写性能上RAID 10要好于RAID 5;
- 在读取性能上RAID 10与RAID 5差距不大。
安全
- RAID 10 比RAID 5更安全,RAID 5最少可损坏一颗,可修复;
- RAID 10最少可损坏2颗,可修复。
磁盘利用率
- RAID 10 最少需要4颗,如10Gx4,容量为:40G;只有一半的利用率;
- RAID 5最少需要3颗,如10x3,容量为30G;即容量总和 再减去一块硬盘的容量,就是RAID 5可以使用的容量。
PS:以上测试仅为虚拟环境下模拟对比,仅供实验参考,不作为实际生产环境性能对比。