配置 RAID 0 | RAID 1 | CentOS 8/RHEL 8 上的 RAID 10 |
RAID 代表独立磁盘冗余阵列。它的基本目的是允许将许多磁盘(例如 HDD、SSD 和 NVMe)组合成一个阵列,以实现冗余。该设备阵列对于计算机来说显示为单个逻辑存储单元或驱动器。冗余无法通过插入项目中的一个巨大磁盘驱动器来实现,因为在发生灾难时几乎不可能恢复数据。在 RAID 中,尽管阵列由多个磁盘组成,但计算机“将其视为一个驱动器或单个逻辑存储单元”,这是相当令人惊奇的。
术语定义
- 热备用: – 如果您有一个磁盘未在 RAID 阵列中使用,并且在发生磁盘故障时处于备用状态,那么您就拥有了热备用。故障磁盘中的数据将自动迁移到该备用磁盘中。
- 镜像: – 正如您所猜测的,镜像是将相同数据复制到另一个磁盘中。这个功能使得数据备份的想法成为可能。
- 条带化: – 一种允许将数据随机写入所有可用磁盘的功能。这就像在所有磁盘之间共享数据一样,因此所有磁盘均等地填充。
- 奇偶校验: – 一种从保存的奇偶校验信息中重新生成丢失数据的技术。
使用磁盘条带化(RAID 级别 0)、磁盘镜像(RAID 级别 1)和带奇偶校验的磁盘条带化(RAID 级别 5,4 和 6)等技术,RAID 能够实现冗余、降低延迟、增加带宽和最大化从硬盘崩溃中恢复的能力。
您应该考虑在项目中部署 RAID 的主要原因如下:
- 实现更好的速度
- 使用单个虚拟磁盘增加存储容量
- 最大限度地减少磁盘故障造成的数据丢失。根据您的 RAID 类型,您将能够实现冗余,这将在发生数据丢失时挽救您的生命。
RAID 技术分为三种类型:固件 RAID、硬件 RAID 和软件 RAID。硬件 RAID 独立于主机处理其阵列,并且仍然为主机提供每个 RAID 阵列一个磁盘。它使用硬件 RAID 控制器卡,对操作系统透明地处理 RAID 任务。另一方面,软件 RAID 在内核磁盘(块设备)代码中实现各种 RAID 级别,并提供最便宜的解决方案,因为不需要昂贵的磁盘控制器卡或热插拔机箱。当前时代的 CPU 速度更快,因此软件 RAID 通常优于硬件 RAID。
软件 RAID 的主要特征。来源 (access.redhat.com)
- 阵列在 Linux 机器之间的可移植性,无需重建
- 使用空闲系统资源进行后台阵列重建
- 热插拔驱动器支持
- 自动 CPU 检测以利用某些 CPU 功能,例如流 SIMD 支持
- 自动修复阵列中磁盘的坏扇区
- 定期对RAID数据进行一致性检查,保证阵列的健康
- 通过将重要事件的电子邮件警报发送到指定的电子邮件地址来主动监控阵列
- 写入意图位图允许内核准确地知道磁盘的哪些部分需要重新同步,而不必重新同步整个阵列,从而大大提高重新同步事件的速度
在 CentOS 8/RHEL 8 上设置 RAID
通过简单的介绍,让我们进入问题的关键并在 CentOS 8/RHEL 8 中设置各种 RAID 级别。在继续之前,我们需要 mdadm 工具来帮助配置各种 RAID 级别。
sudo dnf -y update
sudo dnf -y install mdadm
在 CentOS 8/RHEL 8 上配置 RAID 级别 0
正如前面提到的,RAID 0 提供无奇偶校验的条带化,并且需要至少两个硬盘。与其他产品相比,它在速度方面表现出色,因为它不存储任何奇偶校验数据并同时执行读写操作。
让我们查看服务器上的磁盘:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 128G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 127G 0 part
├─cl_centos8-root 253:0 0 50G 0 lvm /
├─cl_centos8-swap 253:1 0 2G 0 lvm [SWAP]
└─cl_centos8-home 253:2 0 75G 0 lvm /home
sdb 8:16 0 1G 0 disk
sdc 8:32 0 1G 0 disk
sdd 8:48 0 1G 0 disk
如上所示,服务器连接了三个原始磁盘(sdb、sdc 和 sdd)。我们首先要清理磁盘,然后对它们进行分区,然后再在它们之上创建 RAID。
for i in sdb sdc sdd; do
sudo wipefs -a /dev/$i
sudo mdadm --zero-superblock /dev/$i
done
在磁盘上各创建一个分区并设置 RAID 标志。
for i in sdb sdc sdd; do
sudo parted --script /dev/$i "mklabel gpt"
sudo parted --script /dev/$i "mkpart primary 0% 100%"
sudo parted --script /dev/$i "set 1 raid on"
done
您应该看到创建的新分区(sdb1、sdc1、sdd1):
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 128G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 127G 0 part
├─cl_centos8-root 253:0 0 50G 0 lvm /
├─cl_centos8-swap 253:1 0 2G 0 lvm [SWAP]
└─cl_centos8-home 253:2 0 75G 0 lvm /home
sdb 8:16 0 1G 0 disk
└─sdb1 8:17 0 1022M 0 part
sdc 8:32 0 1G 0 disk
└─sdc1 8:33 0 1022M 0 part
sdd 8:48 0 1G 0 disk
└─sdd1 8:49 0 1022M 0 part
分区准备就绪后,继续创建 RAID 0 设备。级别条带与 RAID 0 相同,因为它只提供数据条带化。
sudo mdadm --create /dev/md0 --level=stripe --raid-devices=3 /dev/sd[b-d]1
使用以下任意命令找出您的 RAID 设备状态:
$ cat /proc/mdstat
Personalities : [raid0]
md0 : active raid0 sdd1[2] sdc1[1] sdb1[0]
3133440 blocks super 1.2 512k chunks
unused devices: <none>
或者
$ sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Aug 26 21:20:57 2020
Raid Level : raid0
Array Size : 3133440 (2.99 GiB 3.21 GB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Wed Aug 26 21:20:57 2020
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0
Layout : -unknown-
Chunk Size : 512K
Consistency Policy : none
Name : centos8.localdomain:0 (local to host centos8.localdomain)
UUID : 2824d400:1967473c:dfa0938f:fbb383ae
Events : 0
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
2 8 49 2 active sync /dev/sdd1
如果一切看起来都不错,请在新的 RAID 设备上创建您选择的文件系统。
sudo mkfs.ext4 /dev/md0
接下来,我们需要将新设备挂载到文件系统上,以便它开始保存文件和目录。创建一个新的挂载点:
sudo mkdir /mnt/raid0
通过键入以下内容挂载文件系统:
sudo mount /dev/md0 /mnt/raid0
保存数组
调整“/etc/mdadm.conf ”以确保阵列在启动时自动重新组装。您可以通过执行以下操作自动扫描活动阵列并附加文件:
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf
稍后,更新初始 RAM 文件系统(initramfs),以便该阵列在早期启动过程中可用:
sudo update-initramfs -u
在 /etc/fstab 中配置挂载:
$ sudo vi /etc/fstab
/dev/md0 /mnt/raid0 ext4 defaults 0 0
如果您不确定文件系统类型,请发出以下命令并使用将显示的类型更改 ext4。
$ sudo blkid /dev/md0
/dev/md0: UUID="e6fe86e5-d241-4208-ab94-3ca79e59c8b6" TYPE="ext4"
确认可以正确安装:
$ sudo mount -a
$ df -hT
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 865M 0 865M 0% /dev
tmpfs tmpfs 882M 0 882M 0% /dev/shm
tmpfs tmpfs 882M 17M 865M 2% /run
tmpfs tmpfs 882M 0 882M 0% /sys/fs/cgroup
/dev/mapper/cl_centos8-root xfs 50G 2.1G 48G 5% /
/dev/sda1 ext4 976M 139M 770M 16% /boot
/dev/mapper/cl_centos8-home xfs 75G 568M 75G 1% /home
tmpfs tmpfs 177M 0 177M 0% /run/user/1000
/dev/md0 ext4 2.9G 9.0M 2.8G 1% /mnt/raid0 ##Our New Device.
在 CentOS 8/RHEL 8 上配置 RAID 级别 1
RAID 1 提供磁盘镜像或奇偶校验,无需条带化。它只是将所有数据写入两个磁盘上,因此,如果一个磁盘出现故障或弹出,所有数据将在另一磁盘上可用。由于它在两个磁盘上写入,RAID 1 需要双硬盘,因此如果您想使用 2 个磁盘,则必须安装 4 个磁盘进行设置。
在开始之前,让我们先清除所有磁盘,然后再开始 RAID 配置,以确保我们从干净的磁盘开始。
for i in sdb sdc sdd; do
sudo wipefs -a /dev/$i
sudo mdadm --zero-superblock /dev/$i
done
在磁盘上各创建一个分区并设置 RAID 标志。
for i in sdb sdc sdd; do
sudo parted --script /dev/$i "mklabel gpt"
sudo parted --script /dev/$i "mkpart primary 0% 100%"
sudo parted --script /dev/$i "set 1 raid on"
done
创建 RAID 1 设备:
sudo mdadm --create /dev/md1 --level=raid1 --raid-devices=2 /dev/sd[b-c]1 --spare-devices=1 /dev/sdd1
检查新阵列的状态:
$ sudo mdadm --detail /dev/md1
/dev/md1:
Version : 1.2
Creation Time : Wed Aug 26 21:32:52 2020
Raid Level : raid1
Array Size : 1045504 (1021.00 MiB 1070.60 MB)
Used Dev Size : 1045504 (1021.00 MiB 1070.60 MB)
Raid Devices : 2
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Wed Aug 26 21:33:02 2020
State : clean
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1
Consistency Policy : resync
Name : centos8.localdomain:1 (local to host centos8.localdomain)
UUID : 9ca1da1d:a0c0a26b:6dd27959:a84dec0e
Events : 17
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
2 8 49 - spare /dev/sdd1
一旦 RAID 设备准备就绪,如果它上面没有文件系统,我们就无法使用它。要解决此问题,请创建您需要的文件系统。下面显示了正在设置 xfs 的示例。
sudo mkfs.xfs /dev/md1
之后,创建一个将安装设备的安装点:
sudo mkdir /mnt/raid1
通过在终端上键入以下命令来挂载文件系统:
sudo mount /dev/md1 /mnt/raid1
保存数组
调整“/etc/mdadm.conf ”以确保阵列在启动时自动重新组装。您可以通过执行以下操作自动扫描活动阵列并附加文件:
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf
稍后,更新初始 RAM 文件系统(initramfs),以便该阵列在早期启动过程中可用:
sudo update-initramfs -u
再次在 /etc/fstab 中配置挂载:
$ sudo vi /etc/fstab
/dev/md1 /mnt/raid1 xfs defaults 0 0
确认可以正确安装:
$ sudo mount -a
$ df -hT
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 865M 0 865M 0% /dev
tmpfs tmpfs 882M 0 882M 0% /dev/shm
tmpfs tmpfs 882M 17M 865M 2% /run
tmpfs tmpfs 882M 0 882M 0% /sys/fs/cgroup
/dev/mapper/cl_centos8-root xfs 50G 2.1G 48G 5% /
/dev/sda1 ext4 976M 139M 770M 16% /boot
/dev/mapper/cl_centos8-home xfs 75G 568M 75G 1% /home
tmpfs tmpfs 177M 0 177M 0% /run/user/1000
/dev/md1 xfs 1016M 40M 977M 4% /mnt/raid1
在 CentOS 8/RHEL 8 上配置 RAID 级别 10
RAID 10 结合了磁盘镜像(复制数据)来保护数据和磁盘条带化(将数据划分为块并将它们分布在磁盘上)来提高数据吞吐量。 RAID 10 需要至少 4 个磁盘,跨镜像对对数据进行条带化。通过这种配置,只要每个镜像对中的一个磁盘正常工作,就可以检索数据。
与之前已完成的 RAID 级别一样,首先清除所有原始磁盘。
for i in sdb sdc sdd sde; do
sudo wipefs -a /dev/$i
sudo mdadm --zero-superblock /dev/$i
done
在磁盘上各创建一个分区并设置 RAID 标志。
for i in sdb sdc sdd sde; do
sudo parted --script /dev/$i "mklabel gpt"
sudo parted --script /dev/$i "mkpart primary 0% 100%"
sudo parted --script /dev/$i "set 1 raid on"
done
然后继续创建 RAID 10 设备并检查其状态:
sudo mdadm --create /dev/md10 --level=10 --raid-devices=4 dev/sd[b-e]1
sudo mdadm -–query --detail /dev/md10
设置 RAID 设备后,创建您特定需求所需的文件系统。下面显示了正在设置 xfs 的示例。
sudo mkfs.xfs /dev/md10
之后,创建一个将安装设备的安装点:
sudo mkdir /mnt/raid10
通过键入以下内容挂载文件系统:
sudo mount /dev/md10 /mnt/raid10
保存数组
调整“/etc/mdadm.conf ”以确保阵列在启动时自动重新组装。您可以通过执行以下操作自动扫描活动阵列并附加文件:
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf
像往常一样,更新初始 RAM 文件系统(initramfs),以便该阵列在早期启动过程中可用:
sudo update-initramfs -u
在 /etc/fstab 中配置挂载:
$ sudo vi /etc/fstab
/dev/md10 /mnt/raid10 xfs defaults 0 0
确认可以正确安装:
$ sudo mount -a
$ df -hT
停止并删除 RAID 阵列
如果您希望从系统中删除 RAID 设备,只需卸载挂载点,停止它并使用以下命令删除即可。请记住将 /mnt/raid0 替换为您的挂载点,将 /dev/md0 替换为您的 RAID 设备。
sudo umount /mnt/raid0
sudo mdadm --stop /dev/md0
sudo mdadm --remove /dev/md0
庆祝结束语
软件 RAID 因其多功能性和易于设置而非常出色。正如您所见,配置 RAID 只需要几个命令,您的阵列就可以再次恢复正常状态。根据业务需求,您可以实现高级别备份,以在发生灾难时协助备份。