亚马逊AWS官方博客
利用 GP3 EBS 卷组建 RAID 0 提升磁盘性能:设置与快照恢复指南
![]() |
风险提示:使用 gp3 卷组建 Raid 0 虽然可以低成本有效提高 I/O 性能。但由于其没有冗余性,任何一个卷遭遇意外故障导致不可用,都将使整个 Raid 0 阵列失效。这会造成当前时间至最近一个多卷备份时间间隔内的数据丢失。因此,出于最佳实践的考量,我们强烈建议通过使用 io2 和 io1 EBS 卷实现高 I/O。
背景
在云计算环境中,存储性能往往成为许多应用的瓶颈。特别是对于数据密集型工作负载,如大数据处理、数据库应用和高性能计算等,单一存储卷的 I/O 性能可能无法满足需求。AWS 提供了多种 EBS 卷类型,其中 GP3(General Purpose SSD)卷凭借其可调整的性能参数和相对较低的成本,成为构建高性能存储系统的理想选择。然而,单个 GP3 卷(最高可提供 16,000 IOPS 和 1,000MB/s 的吞吐量)在某些场景下可能无法满足需求。这时,通过组合多个 EBS 卷来组建 RAID 0 就成为了低成本提升存储性能的有效方案。在本篇文章中,我们将探讨如何使用 AWS GP3 EBS 卷设置 RAID 0 阵列,如何进行故障恢复,以及如何对恢复的磁盘进行预热来保障磁盘性能。
什么是 RAID 0?为什么要使用 GP3 EBS 卷搭建 RAID 0?
RAID(Redundant Array of Independent Disks,磁盘阵列)是一种将多个磁盘组合起来形成一个逻辑存储单元的技术。通过多个磁盘的组合,从而可以提供比单个磁盘更高的存储性能。RAID 有多种级别,而 RAID 0 是其中性能最高的一种。RAID 0 采用数据条带化技术,将数据均匀地分布在多个磁盘上。当进行读写操作时,多个磁盘可以并行工作,从而显著提升 I/O 性能。理论上,N 个磁盘的 RAID 0 阵列可以提供接近 N 倍于单个磁盘的性能。因此,RAID 0 非常适合需要高 IOPS 的应用场景。
然而,RAID 0 不提供任何数据冗余。如果阵列中的任何一块磁盘发生故障,整个阵列将无法使用并导致数据丢失。因此,RAID 0 虽然能显著提升性能,但是必须配合可靠的备份策略使用。
AWS 的 GP3 卷是最新一代的通用 SSD 支持的 EBS 卷,提供了成本与性能的平衡,可以独立配置 IOPS 和吞吐量,单卷最高可达 16,000 IOPS 和 1,000 MB/s。通过将多块 GP3 EBS 卷组成 RAID 0,您可以低成本显著提升磁盘性能,适合性能敏感但对冗余要求不高的场景。
EC2 实例与 EBS 性能考量
在构建高 IOPS 的 RAID 0 阵列前,需要注意 EC2 实例类型对 EBS 性能的限制。不同 EC2 实例类型支持的 EBS 带宽和 IOPS 上限各不相同。例如:m8g.large,基准吞吐量 78.75MB/s,基准 IOPS 为 3600,最大 IOPS 为 40000。每 24 小时可以维持一次 30 分钟的最大性能,之后会恢复到基线性能。因此,该实例无法持续维持在最大 IOPS 40000 的性能上。而 m8g.8xlarge,最大 IOPS 为 40000,并且可以长期维持在 40000 的水平上。更多详细的实例性能限额请参考官方文档: https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/ebs-optimized.html。
![]() |
因此,在配置 RAID 0 阵列前,请务必查阅实例性能限额来确认您的 EC2 实例类型支持的最大 EBS 性能是否满足您的最终需求。如果 RAID 0 阵列的理论性能超过 EC2 实例的 EBS 性能上限,您将无法充分利用 RAID 0 的性能优势。
逐步指南:使用 GP3 EBS 卷设置 RAID 0
以下是以运行 Amazon Linux 2023 的 EC2 实例为例的使用多个 GP3 卷配置 RAID 0 阵列的步骤。
前提条件
- 一台 EC2 实例,其性能足以支持 RAID 0阵列的合并 IOPS 和吞吐量。本文将以 m8g.12xlarge 为例构建由 3 块 GP3 EBS 卷组成的 RAID 0 阵列并进行性能测试。
- 基本的 Linux 命令和 AWS 管理控制台操作知识。
步骤
1. 创建 EC2 实例
创建 m8g.12xlarge 实例并挂载根卷和额外三块 GP3 卷。磁盘大小可以根据实际需求进行修改。例如,根卷为 30GB;其余三块 GP3 磁盘每个 1TB,每块磁盘更改 IOPS 为 16000,并更改 Throughput 为 1000。
![]() |
![]() |
2. 为 EC2 实例组建 RAID 0 阵列
EC2 实例创建完成后,通过 ssh 登陆到实例上,并通过以下 linux 指令搭建 RAID 0:
性能测试
由于三块 GP3 磁盘的 IOPS 均为最大值 16000,因此,理论上 RAID 0 的读写 IOPS 可达到三块磁盘之和,即 48000。我们通过 fio 对 RAID 0 的读写性能进行测试。Fio (Flexible I/O Tester) 是一个开源的 I/O 性能测试工具,用于在 Linux、Windows 等系统上模拟和测量存储设备的性能,广泛用于测试磁盘、文件系统、RAID 阵列等的 IOPS、吞吐量和延迟等指标。
1. 在 EC2 实例里创建 fio 配置文件,如 vim raid0_test.fio
,并写入配置项,模拟随机读写负载以测试最大 IOPS:
2. 执行 fio raid0_test.fio
,得到如下结果:
![]() |
![]() |
分析结果可以发现,随机读的 IOPS 达到了48.6k,随机写的 IOPS 达到了48.1k,总体符合预期。
同时,分析 Disk stats 可以看到,各个磁盘的 I/O 请求数,以及利用率都非常接近,这表明磁盘的读写负载分布均匀。
- nvme3n1:读写 I/O 请求数 = 971568/974776,利用率 = 99.24%
- nvme2n1:读写 I/O 请求数 = 970073/974285,利用率 = 98.97%
- nvme1n1:读写 I/O 请求数 = 971976/973746,利用率 = 99.30%
至此,我们成功验证了通过 GP3 组建 RAID 0 带来的性能提升。
创建快照以实现数据恢复
由于 RAID 0 缺乏冗余,备份至关重要。如果要使用快照备份 RAID 阵列中 EBS 卷上的数据,则必须确保快照的一致性。原因在于这些卷的快照是独立创建的,从不同步的快照恢复 RAID 阵列中的 EBS 卷会降低阵列的完整性。
AWS EBS 多卷快照提供了一种创建 RAID 阵列所有卷一致性、时间点备份的方法。无需停止实例就可以在各个卷之间进行协调以确保一致性,因为快照会自动跨多个 EBS 卷拍摄。
创建多卷快照
1. 在 EC2 控制台左侧导航栏点击 “快照”,并在打开的窗口选择“创建快照”。
2. 随后,源选择“实例”,并选择组建 RAID 0 的 EC2 实例。
![]() |
3. 点击“创建快照”,AWS 将确保跨所有卷自动生成快照。快照的创建需要一定时间,创建成功后,在快照状态一览将显示“已完成”。
![]() |
*小贴士:在实际操作中,建议通过 AWS Backup 对 EBS 卷进行自动定期快照备份。通过自定义备份周期和数据保留时长,来确保故障时数据损失最小化。
恢复多卷快照
1. 从相应快照依次创建新 EBS 卷,并重新按照需求配置磁盘大小、IOPS 和吞吐量,如将 IOPS 设置为 16000,吞吐量 1000MiB/s。请确保新卷与实例都在同一目标可用区(例如 us-east-1a)。
![]() |
![]() |
2. 参考文档步骤将 EBS 卷依次附加到 EC2 实例上。然后 SSH 进入实例,通过 mount 指令挂载文件系统。
3. 基于重新挂载的 EBS 磁盘重建 RAID 0 阵列。
4. 验证数据:检查/dev/md0
中的数据是否与备份时的数据保持一致。
磁盘预热
在通过快照恢复 EBS 卷后,直接访问该卷可能会导致性能瓶颈。这是因为 EBS 快照存储于 S3 中,而恢复的 EBS 卷本质上是一个指向快照的逻辑映射。当应用程序首次访问某个数据块时,EBS 需要从 S3 中提取该数据块并将其写入卷。这个过程需要时间,并且可能会导致首次访问每个块时 I/O 操作的延迟显著增加。当所有块均已下载并写入卷后,卷性能才能达到最佳。因此,我们可以通过预热来提前触发所有数据块的加载,确保卷在正式使用前达到最佳性能状态。
为了执行磁盘预热,可以使用以下方法:
手动预热
将新还原的卷附加到您的 Linux 实例上后,可以通过 dd 指令或者 fio 指令对设备上的所有数据块进行读取。
dd 指令:应将 if
(输入文件)参数设置为要初始化的驱动器。应将 of
(输出文件)参数设置为 Linux 空虚拟设备 /dev/null
。bs
参数设置读取操作的数据块大小;要获得最佳性能,这应设置为 1 MB。如:
fio 指令:如果您的实例上尚未安装 fio,请首先安装 fio,如通过 sudo yum install fio -y
在 Amazon Linux 上进行安装。然后使用以下命令初始化您的卷。应将 --filename
(输入文件)参数设置为要初始化的驱动器。
详细说明请参考初始化 Amazon EBS 卷。
自动预热
在快照上启用 Amazon EBS fast snapshot restore (FSR) 快速快照还原功能,以确保从中创建的 EBS 卷在创建时已完全初始化。这会消除首次访问块时对其执行 I/O 操作的延迟。使用快速快照还原创建的卷可以立即交付其所有预置性能,详细步骤请参考 Amazon EBS 快速快照还原。
结论
使用 AWS GP3 EBS 卷设置 RAID 0 阵列是为 I/O 密集型工作负载提升磁盘性能的有效方法。通过将数据条带化到多个卷上,您可以获得超过单一卷限制的 IOPS 和吞吐量。然而,缺乏冗余意味着快照对于数据保护不可或缺。借助多卷快照,您可以维护一致性备份并在故障时快速恢复。无论您是运行高性能数据库还是媒体处理管道,这种设置都提供了一种在 AWS 上扩展存储性能的成本效益高的方法——只要确保仔细规划您的备份策略!
参考资料
- Amazon EBS 和 RAID 配置:https://docs.aws.amazon.com/zh_cn/ebs/latest/userguide/raid-config.html
- Amazon EBS 优化的实例类型:https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/ebs-optimized.html
- 对 Amazon EBS 卷进行基准测试:https://docs.aws.amazon.com/zh_cn/ebs/latest/userguide/benchmark_procedures.html
- 初始化 Amazon EBS 卷:https://docs.aws.amazon.com/zh_cn/ebs/latest/userguide/ebs-initialize.html
- Amazon EBS 快速快照还原:https://docs.aws.amazon.com/zh_cn/ebs/latest/userguide/ebs-fast-snapshot-restore.html
- 将 Amazon EBS 卷附加到 Amazon EC2 实例:https://docs.aws.amazon.com/zh_cn/ebs/latest/userguide/ebs-attaching-volume.html