本文以京东云Ubuntu 20.04 64位云主机为例,介绍如何使用Linux系统内置的mdadm命令为多块数据盘创建一个300 GiB的RAID阵列,本文以三块数据盘为例。
独立冗余磁盘阵列RAID(Redundant Array of Independent Disks)是将多块云盘按一定的方式组成一个磁盘阵列组。相比单块云盘,RAID能够有效的提高磁盘的容量、读写带宽、可靠性和可用性。
建议您使用RAID0模式,每块云盘采用相同大小的分区,从而减少云盘空间浪费。由于云盘本身已经采用3副本的冗余策略,使用RAID1会使副本数量翻为6倍占用过多存储空间;由于RAID5或者RAID6模式的奇偶校验数据会占用云盘IOPS,带来性能阻碍,因此不推荐使用RAID5或者RAID6模式。可根据实际场景选择不同的RAID模式。
下表对比了RAID0、RAID1、RAID5、RAID6、RAID10模式的优缺点。
模式 | 优势 | 劣势 |
---|---|---|
RAID0(条带化) | 高性能:RAID 0通过将数据分成块并分布在多个硬盘上,可以实现卓越的读写性能。数据可以同时从多个硬盘读取和写入。 高容量:总容量等于所有硬盘的容量之和,因为没有数据冗余。 成本效益:由于不需要冗余硬盘,成本相对较低。 | 零容错:RAID 0没有冗余数据,一块硬盘损坏会导致数据完全丢失。 不适合关键数据:不建议用于关键数据存储,因为没有容错机制。 |
RAID1(镜像) | 高容错性:数据被完全镜像到另一个硬盘,提供了极高的容错能力。即使一块硬盘损坏,数据仍然可用。 高可用性:系统可以在一个硬盘出现问题时继续运行。 良好的读性能:因为数据可以从多个硬盘中同时读取。 | 50%的容量利用率:总容量等于一个硬盘的容量,因为数据被完全复制。 写性能:写性能略低于RAID 0,因为数据必须同时写入两个硬盘。 |
RAID5 | 良好的性能:提供了良好的读性能和适度的写性能,因为数据被分布在多个硬盘上。 容错能力:使用分布的奇偶校验信息,可以容忍一块硬盘的故障。 合理的容量:总容量等于(N-1)个硬盘的容量之和,其中N是硬盘的数量。 | 长时间的重建:在硬盘故障后,需要较长时间来重建数据,因为需要计算奇偶校验信息。 写性能:写性能不如RAID 0,因为需要计算奇偶校验信息。 |
RAID6 | 更强的容错性:相比RAID 5,RAID 6可以容忍两块硬盘的故障。 性能与容错平衡:提供了较好的性能和容错平衡。 合理的容量:总容量等于(N-2)个硬盘的容量之和,其中N是硬盘的数量。 | 长时间的重建:在硬盘故障后,需要更长时间来重建数据,因为需要计算两份奇偶校验信息。 写性能:写性能不如RAID 0。 |
RAID 10(1+0) | 高性能:提供了高性能的读和写能力,因为数据被条带化并镜像。 高容错性:可以容忍多块硬盘的故障,只要不是同一镜像组中的两块硬盘。 快速重建:重建时间相对较短,因为只需从镜像复制数据。 | 50%的容量利用率:总容量等于镜像组中一个硬盘的容量之和,因为数据被完全复制。 成本高:RAID 10需要较多的硬盘,因此成本较高。 |
在使用京东云云硬盘产品时,底层已经使用了三副本的冗余策略,可以完美解决RAID0模式零容错的问题,同时可以获得卓越的读写性能,较为建议。本文也将介绍使用3块云硬盘组建RAID0阵列的方法和步骤。
您已经创建一台挂载多块数据盘的云主机。建议多块数据盘拥有相同的容量和相同类型。本文以g.n3.6xlarge(24核96GB 通用 标准型)云主机为例,挂载一块40GB通用型SSD云盘系统盘和三块100GB通用型SSD云盘数据盘。数据盘的吞吐上限为115MB/s,IOPS上限为3000。
1、远程连接云主机。
2、运行以下命令,查看云主机上所有的云盘信息。
lsblk
结果如下所示。
3、运行以下命令,查看mdadm
帮助。
madam -h
结果如下所示。
4、使用mdadm
命令创建RAID阵列/dev/md0。
mdadm --create /dev/md0 --level=0 --raid-devices=3 /dev/vd[bcd]
结果如下所示。
5、运行以下命令,查看创建的RAID阵列/dev/md0信息。
mdadm --detail /dev/md0
结果如下所示。
6、运行以下命令,使用fio简单验证RAID0阵列的效果
fio -ioengine=libaio -numjobs=1 -bs=1M -direct=1 -rw=randread -size=20G -filename=/dev/md0 -name=test -iodepth=64 -runtime=120 --group_reporting
fio -ioengine=libaio -numjobs=1 -bs=1M -direct=1 -rw=randwrite -size=20G -filename=/dev/md0 -name=test -iodepth=64 -runtime=120 --group_reporting
结果如下所示。读写性能为单盘的3倍。
7、运行以下命令,在RAID阵列上创建一个文件系统,例如ext4文件系统。
mkfs.ext4 /dev/md0
结果如下所示。
8、运行以下命令,创建一份包含RAID信息的配置文件,设置RAID阵列在启动ECS实例时自动重组。
mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
9、挂载RAID阵列的文件系统。
9.1 创建挂载点(可选)
mkdir /mnt/raid0
9.2 运行以下命令挂载文件系统,例如将/dev/md0挂载至/mnt/rad0。
mount /dev/md0 /mnt/raid0
9.3 运行以下命令,查看RAID阵列的挂载信息。
df -h
结果如下所示。
10、配置开机自动挂载
10.1 运行以下命令,向/etc/fstab配置文件写入RAID阵列信息。
echo `blkid /dev/md0 | awk '{print $2}' | sed 's/\"//g'` /mnt/raid0 ext4 defaults 0 0 >> /etc/fstab
/dev/md0:磁盘阵列名称。
/media/raid0:挂载点信息,您需要根据实际环境进行替换。如果需要挂载到其他路径,您需要修改成对应路径。
ext4:RAID阵列的文件系统类型,您需要根据已创建的文件系统类型修改。
10.2 运行以下命令,查询RAID阵列的挂载信息是否添加成功。
cat /etc/fstab
结果如下所示,返回结果里出现了/mnt/raid0
的信息,说明已添加挂载信息至/etc/fstab
文件。
10.3 运行以下命令,挂载/etc/fstab配置文件中的所有文件系统。如果无报错输出,表示您的/etc/fstab配置无误。
mount -a
10.4 运行以下命令,检查挂载结果是否符合您的预期。
df -h
结果如下所示,出现新建文件系统的信息,表示文件系统挂载成功。
我们的产品专家为您找到最合适的产品/解决⽅案
1v1线上咨询获取售前专业咨询
专业产品顾问,随时随地沟通