RAID
示例
例1:关机后添加4块硬盘,创建RAID10
[root@server ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 20G 0 disk
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
sdd 8:48 0 20G 0 disk
sr0 11:0 1 8.4G 0 rom /run/media/root/RHEL-9-1-0-BaseOS-x86_64
nvme0n1 259:0 0 20G 0 disk
├─nvme0n1p1 259:1 0 400M 0 part /boot
└─nvme0n1p2 259:2 0 19.6G 0 part
├─rhel-root 253:0 0 15.6G 0 lvm /
└─rhel-swap 253:1 0 4G 0 lvm [SWAP]
[root@server ~]#
[root@server ~]# mdadm -Cv /dev/MD0 -a yes -n 4 -l 10 /dev/sda /dev/sdb /dev/sdc /dev/sdd
mdadm: layout defaults to n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: /dev/MD0 is an invalid name for an md device. Try /dev/md/MD0
[root@server ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Apr 17 13:40:34 2024
Raid Level : raid10
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Wed Apr 17 13:41:01 2024
State : clean, resyncing
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Consistency Policy : resync
Resync Status : 13% complete
Name : server:0 (local to host server)
UUID : ba36a7ca:bf9fcee6:e824359d:14157c23
Events : 2
Number Major Minor RaidDevice State
0 8 0 0 active sync set-A /dev/sda
1 8 16 1 active sync set-B /dev/sdb
2 8 32 2 active sync set-A /dev/sdc
3 8 48 3 active sync set-B /dev/sdd
在对设备进行操作时,需要先对设备进行卸载才可以继续操作
例2:修复损坏的RAID
# 模拟某个硬盘损坏
mdadm /dev/md0 -f /dev/sdb
[root@server ~]# mdadm /dev/md0 -f
/dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
# 此期间不影响RAID的使用
[root@server ~]# mdadm /dev/md0 -a /dev/sde
mdadm: added /dev/sde
[root@server ~]# mdadm -D /dev/md0
Number Major Minor RaidDevice State
0 8 0 0 active sync set-A /dev/sda
4 8 64 1 spare rebuilding /dev/sde
2 8 32 2 active sync set-A /dev/sdc
3 8 48 3 active sync set-B /dev/sdd
[root@server ~]# mdadm -D /dev/md0
[root@server ~]# mount -a # 重新挂载
常见RAID组建方案
RAID0
- 原理:把至少2块硬盘通过硬件或软件方式串联,组成一个大的卷组,并将数据依次写入到各个硬盘
- 优点:数据同步传输,读取/写入分开,性能大大提升
- 缺点:若任意一块硬盘故障会导致整个系统的数据损坏,无备份冗余能力错误修复能力
- 总结:使用率100%,至少2块磁盘才能使用,优点是快,提磁盘的读写速度,缺点是不安全,数据容易丢失
RAID1
- 产生原因:若生产环境对硬盘的读写速度没有较大要求,但希望增加数据安全性时可使用RAID
- 原理:把至少2块硬盘绑定起来,写入数据时将数据同时也写入另一或多块硬盘中
- 本质:多个硬盘作为镜像备份
- 优点:数据备份冗余安全性大大提升
- 缺点:硬盘利用率下降
- 总结:是镜像,使用两块磁盘,一式两份的方式,支持容错,冗余,数据安全不丢失,缺点是速度不快,使用率50%,成本较大。
RAID5
- 产生原因:兼顾“读写速度”、“数据安全”、“成本”的一种折中方式
- 原理:需至少三块硬盘,将数据分块存储到不同硬盘中,硬盘中必须存储其它一个硬盘的parity(奇偶校验信息)
- 优点:兼顾性能,通过“奇偶校验”替代“镜像备份”
- 缺点:硬盘数据安全性较低
- 总结:使用率(n-1)/n*容量,磁盘坏了会立即补上,数据会恢复
RAID10(主流)
- 本质:RAID1+RAID0 的组合
- 原理:至少需要4块硬盘,先制作两两的RAID1阵列,以保证安全性,在两两制作RAID0,以提高读写速度
- 优点:兼具速度和安全性
- 缺点:成本较高
取消RAID
注意:实际生产环境中,若取消RAID10之前必须备份出其数据,否则已存在数据无法使用
例:上例RAID10解散
root@server ~]# umount /dev/md0
# 删除开机挂载项,切记
[root@server ~]# vim /etc/fstab
[root@server ~]# mdadm -S /dev/md0
mdadm: stopped /dev/md0
[root@server ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 20G 0 disk
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
sr0 11:0 1 8.4G 0 rom
nvme0n1 259:0 0 20G 0 disk
├─nvme0n1p1 259:1 0 400M 0 part /boot
└─nvme0n1p2 259:2 0 19.6G 0 part
├─rhel-root 253:0 0 15.6G 0 lvm /
└─rhel-swap 253:1 0 4G 0 lvm [SWAP]
RAID备份盘技术
产生原因
- 在RAID10中若RAID1中的某个硬盘损坏,在修复完毕前恰巧另一块RAID1的硬盘也损坏,则数据就彻底丢失
原理
- 在RAID中添加一个大容量的备份盘来预防此类事故,某块硬盘故障,备份盘同步恢复,无须人工干预。
- 分析RAID10需要4块硬盘,备份盘需要1块硬盘,共5块硬盘
创建RAID10+备份盘阵列系统
[root@server ~]# mdadm -Cv /dev/md0 -a yes -n 4 -l 10 -x 1 /dev/sda /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: /dev/sda appears to be part of a raid array:
level=raid10 devices=4 ctime=Wed Apr 17 13:40:34 2024
mdadm: /dev/sdb appears to be part of a raid array:
level=raid10 devices=4 ctime=Wed Apr 17 13:40:34 2024
mdadm: /dev/sdc appears to be part of a raid array:
level=raid10 devices=4 ctime=Wed Apr 17 13:40:34 2024
mdadm: /dev/sdd appears to be part of a raid array:
level=raid10 devices=4 ctime=Wed Apr 17 13:40:34 2024
mdadm: /dev/sde appears to be part of a raid array:
level=raid10 devices=4 ctime=Wed Apr 17 13:40:34 2024
mdadm: size set to 20954112K
Continue creating array? y # 输入y确定
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@server ~]# mdadm -D /dev/md0
Number Major Minor RaidDevice State
0 8 0 0 active sync set-A /dev/sda
1 8 16 1 active sync set-B /dev/sdb
2 8 32 2 active sync set-A /dev/sdc
3 8 48 3 active sync set-B /dev/sdd
4 8 64 - spare /dev/sde
# 模拟损坏
[root@server ~]# mdadm /dev/md0 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
[root@server ~]# mdadm -D /dev/md0
Number Major Minor RaidDevice State
0 8 0 0 active sync set-A /dev/sda
4 8 64 1 active sync set-B /dev/sde
# 自动补上
2 8 32 2 active sync set-A /dev/sdc
3 8 48 3 active sync set-B /dev/sdd
1 8 16 - faulty /dev/sdb