天天看点

RAID(独立 冗余磁盘阵列 )(Redundant Array of Independent Disks)

作者:那年小北风

RAID 0、1、5、10 方案对比

RAID(独立 冗余磁盘阵列 )(Redundant Array of Independent Disks)

不同场景RAID的使用

硬RAID: 需要RAID卡,有自己的CPU,处理速度快,有电池和无电池。

RAID(独立 冗余磁盘阵列 )(Redundant Array of Independent Disks)

硬raid

软RAID: 通过操作系统实现,比如Windows、Linux

RAID 0

出于成本和技术方面的考虑,需要针对不同求在数据可靠性及读写能上 做出 权衡, 制定出满足各自需求的 不同方案。目前已有RAID磁盘阵列的方案至少有十几种, RAID 0、 RAID 1、 RAID 5与 RAID 10 这 4种最常见的方案 。这 4种 方案的对比如表所示,其中 n代表硬盘总数。

RAID 0 技术把多块物理硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成一个大的卷组,并将数据依次写入各个物理硬盘中。这样一来,在最理想的状态下,硬盘设备的读写性能会提升数倍,但是若任意一块硬盘发生故障,将导致整个系统的数据都受到破坏。通俗来说,RAID 0 技术能够有效地提升硬盘数据的吞吐速度,但是不具备数据备份和错误修复能力。如下图 所示,数据被分别写入到不同的硬盘设备中,即硬盘 A 和硬盘 B 设备会分别保存数据资料,最终实现提升读取、写入速度的效果。

RAID(独立 冗余磁盘阵列 )(Redundant Array of Independent Disks)

RAID0 条带集 2块磁盘以上, 读写速率快 100%*N,但不容错

RAID 1

尽管 RAID 0 技术提升了硬盘设备的读写速度,但它是将数据依次写入到各个物理硬盘 中。也就是说,它的数据是分开存放的,其中任何一块硬盘发生故障都会损坏整个系统的数 据。因此,如果生产环境对硬盘设备的读写速度没有要求,而是希望增加数据的安全性时, 就需要用到 RAID 1 技术了。

在图下图所示的RAID1技术示意图中可以看到,它是把两块以上的硬盘设备进行绑定,在写入数据时,是将数据同时写入到多块硬盘设备上(可以将其视为数据的镜像或备份)。当其中某一块硬盘发生故障后,一般会立即自动以热交换的方式来恢复数据的正常使用

RAID(独立 冗余磁盘阵列 )(Redundant Array of Independent Disks)

RAID1 镜像集 2块磁盘, 容量50% ,读写速率一般,容错

考虑到在进行写入操作时因硬盘切换带来的开销,因此 RAID 1 的速度会比 RAID 0 有微 弱地降低。但在读取数据的时候,操作系统可以分别从两块硬盘中读取信息,因此理论读取 速度的峰值可以是硬盘数量的倍数。另外,平时只要保证有一块硬盘稳定运行,数据就不会 出现损坏的情况,可靠性较高。

RAID 1 技术虽然十分注重数据的安全性,但是因为是在多块硬盘设备中写入了相同的数据,因此硬盘设备的利用率得以下降。从理论上来说,上图 所示的硬盘空间的真实可用率 只有 50%,由 3 块硬盘设备组成的 RAID 1 磁盘阵列的可用率只有 33%左右;以此类推。而且,由于需要把数据同时写入到两块以上的硬盘设备,这无疑也在一定程度上增大了系统计算功能的负载。

那么,有没有一种 RAID 方案既考虑到了硬盘设备的读写速度和数据安全性,还兼顾了 成本问题呢?实际上,单从数据安全和成本问题上来讲,就不可能在保持原有硬盘设备的利

用率且还不增加新设备的情况下,能大幅提升数据的安全性。刘遄老师也没有必要忽悠各位

下面将要讲解的 RAID 5 技术虽然在理论上兼顾了三者(读写速度、数据安全性、成本), 但实际上更像是对这三者的“相互妥协”。

RAID 5

RAID5 技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。 RAID 5 磁盘阵列中数据的奇偶校验信息并不是单独保存到某一块硬盘设备中,而是存储到除 自身以外的其他每一块硬盘设备上。这样的好处是,其中任何一设备损坏后不至于出现致命 缺陷。如下图 中 Parity 部分存放的就是数据的奇偶校验信息。换句话说,就是 RAID 5 技术实 际上没有备份硬盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试 重建损坏的数据。RAID 这样的技术特性“妥协”地兼顾了硬盘设备的读写速度、数据安全性与存储成本问题。

RAID 5 最少由 3 块硬盘组成,使用的是硬盘切割(Disk Striping)技术。相较于 RAID 1 级别,好处就在于保存的是奇偶校验信息而不是一模一样的文件内容,所以当重复写入某个 文件时,RAID 5 级别的磁盘阵列组只需要对应一个奇偶校验信息就可以,效率更高,存储成 本也会随之降低。

RAID(独立 冗余磁盘阵列 )(Redundant Array of Independent Disks)
RAID(独立 冗余磁盘阵列 )(Redundant Array of Independent Disks)

RAID5 带奇偶校验条带集 3块磁盘以上, 利用率 (n-1)/n 读写速率快,容错

RAID 10

RAID 5 技术是出于硬盘设备的成本问题对读写速度和数据的安全性能有了一定的妥协, 但是大部分企业更在乎的是数据本身的价值而非硬盘价格,因此在生产环境中主要使用 RAID 10 技术。顾名思义,RAID 10 技术是 RAID 1+RAID 0 技术的一个“组合体”。如下图 所示,RAID10 技术需要至少 4 块硬盘来组建,其中先分别两两制作成 RAID 1 磁盘阵列,以保证数据的安 全性;然后再对两个 RAID 1 磁盘阵列实施 RAID 0 技术,进一步提高硬盘设备的读写速度。这样从理论上来讲,只要坏的不是同一阵列中的所有硬盘,那么最多可以损坏 50%的硬盘设备而不丢失数据。由于 RAID 10 技术继承了 RAID 0 的高读写速度和 RAID 1 的数据安全性,在不 考虑成本的情况下 RAID 10 的性能也超过了 RAID 5,因此当前成为广泛使用的一种存储技术。

RAID(独立 冗余磁盘阵列 )(Redundant Array of Independent Disks)

仔细查看上图 可以发现,RAID 10 是先对信息进行分割,然后再两两一组制作镜像。 也就是先将 RAID 1 作为最低级别的组合,然后再使用 RAID 0 技术将 RAID 1 磁盘阵列组合 到一起,将它们视为“一整块”硬盘。而 RAID 01 则相反,它是先将硬盘分为两组,然后使用 RAID 0 作为最低级别的组合,再将这两组 RAID 0 硬盘通过 RAID 1 技术组合到一起。

RAID 10 技术和 RAID 01 技术的区别非常明显。在 RAID 10 中,任何一块硬盘损坏都不 会影响到数据安全性,其余硬盘均会正常运作。但在 RAID 01 中,只要有任何一块硬盘损坏,最低级别的RAID0磁盘阵列马上会停止运作,这可能造成严重隐患。所以RAID10远比RAID 01常见,很多主板甚至不支持RAID01。

部署磁盘阵列

首先,需要在虚拟机中添加 4 块硬盘设备来制作一个 RAID 10 磁盘阵列,如图 7-5 所示。这 里不再详述添加硬盘的步骤,大家自己操作就行。记得硬盘要用 SCSI 或 SATA 接口的类型, 大小默认 20GB 就可以。

这几块硬盘设备是模拟出来的,不需要特意去买几块真实的物理硬盘插到电脑上。需要 注意的是,一定要记得在关闭系统之后,再在虚拟机中添加硬盘设备,否则可能会因为计算 机架构的不同而导致虚拟机系统无法识别新添加的硬盘设备。

当前,生产环境中用到的服务器一般都配备 RAID 阵列卡,尽管服务器的价格越来越便宜,但是我们没有必要为了做一个实验而去单独购买一台服务器,而是可以学会使用 mdadm 命令在 Linux 系统中创建和管理软件 RAID 磁盘阵列,而且它涉及的理论知识和操作过程与 生产环境中的完全一致。

mdadm 命令用于创建、调整、监控和管理 RAID 设备,英文全称为“multiple devices

admin”,语法格式为“mdadm参数硬盘名称”。

RAID(独立 冗余磁盘阵列 )(Redundant Array of Independent Disks)
RAID(独立 冗余磁盘阵列 )(Redundant Array of Independent Disks)
RAID(独立 冗余磁盘阵列 )(Redundant Array of Independent Disks)

mdadm 命令中的常用参数及作用

RAID(独立 冗余磁盘阵列 )(Redundant Array of Independent Disks)

准备4块硬盘

[root@localhost ~]# ll /dev/sd*
brw-rw---- 1 root disk 8, 48 Tue May 9 16:07 /dev/sdd
brw-rw---- 1 root disk 8, 64 Tue May 9 16:07 /dev/sde
brw-rw---- 1 root disk 8, 80 Tue May 9 16:07 /dev/sdf
brw-rw---- 1 root disk 8, 80 Tue May 9 16:07 /dev/sdg           

创建RAID

[root@localhost ~]# mdadm -Cv /dev/md0 -n 4 -l 10  /dev/sd{d,e,f,g}
mdadm: layout defaults to n2
mdadm: layout defaults to n2 
mdadm: chunk size defaults to 512K mdadm: size set to 20954112K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.           

备注:-C 创建RAID /dev/md0 第一个RAID设备 -l10 RAID10 -n RAID成员的数量 可用空间2G

[root@localhost ~]# yum -y install mdadm //确保mdadm命令可用

格式化,挂载

[root@localhost ~]# mkfs.ext4 /dev/md0
[root@localhost ~]# mkdir /mnt/raid10
[root@localhost ~]# mount /dev/md0 /mnt/raid10
[root@localhost ~]# cp -rf /etc /mnt/raid10/etc1           
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 969M 0 969M 0% /dev
tmpfs 984M 0 984M 0% /dev/shm
tmpfs 984M 9.6M 975M 1% /run
tmpfs 984M 0 984M 0% /sys/fs/cgroup
/dev/mapper/rhel-root 17G 3.9G 14G 23% /
/dev/sr0 6.7G 6.7G 0 100% /media/cdrom
/dev/sda1 1014M 152M 863M 15% /boot
tmpfs 197M 16K 197M 1% /run/user/42
tmpfs 197M 3.5M 194M 2% /run/user/0
/dev/md0 40G 49M 38G 1% /RAID           

再来查看/dev/md0 磁盘阵列设备的详细信息,确认 RAID 级别(Raid Level)、阵列大小

(Array Size)和总硬盘数(Total Devices)都是否正确:

[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Tue May 9 16:08:40 2023 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 : Thu Jan 14 04:49:57 2021 State : clean
Active Devices : 4 
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2 Chunk Size : 512K
           

永久挂载

[root@localhost ~]#vim /etc/fstab

/dev/md10 /mnt/raid10 ext4 defaults 0 0

磁盘 挂载点 文件系统类型 默认选项 优先级 优先级

然后使用立刻挂载命令mount -a

[root@localhost ~]# echo "/dev/md0 /mnt/raid10 ext4 defaults 0 0" >> /etc/fstab

[root@localhost ~]# cat /etc/fstab

/dev/md0 /mnt/raid10 ext4 defaults 0 0