Amazon Elastic Compute Cloud
Linux 实例用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

Linux 上的 RAID 配置

通过 Amazon EBS,您可以使用可与传统裸机服务器结合使用的任何标准 RAID 配置,只要实例的操作系统支持该特定 RAID 配置。这是因为,所有 RAID 都是在软件级别上实现的。为取得比通过单个卷取得的 I/O 性能更高的 I/O 性能,RAID 0 可将多个卷组合在一起;为取得实例上的冗余,RAID 1 可将两个卷镜像在一起。

Amazon EBS 卷的数据可在可用区内多个服务器间进行复制,以防由于任何单个组件发生故障导致数据丢失。此复制使得 Amazon EBS 卷的可靠程度比普通磁盘高 10 倍。更多信息,请参阅 Amazon EBS 产品详细信息页面中的 Amazon EBS 可用性与持久性

注意

您应避免从 RAID 卷启动。Grub 通常只安装在 RAID 阵列中的一台设备上,如果某台镜像设备发生故障,您可能无法启动操作系统。

如果您需要在 Windows 实例上创建一个 RAID 阵列,请参阅 Amazon EC2 用户指南(适用于 Windows 实例) 中的 Windows 上的 RAID 配置

RAID 配置选项

下表比较常见的 RAID 0 和 RAID 1 选项。

配置 使用 优点 缺点

RAID 0

当 I/O 性能比容错能力更重要时;例如在频繁使用的数据库中 (其中,已单独设置数据复制)。

I/O 在卷内以条带状分布。如果您添加卷,则会直接增加吞吐量。

条带的性能受限于该集合中的最差的执行卷。丢失单个卷会导致完全丢失阵列的数据。

RAID 1

当容错能力比 I/O 性能更重要时;例如在关键应用程序中。

在数据持久性方面更具安全性。

不提供写入性能改进;需要比非 RAID 配置更大的 Amazon EC2 到 Amazon EBS 带宽,因为数据将同时写入多个卷。

重要

不建议对 Amazon EBS 使用 RAID 5 和 RAID 6,因为这些 RAID 模式的奇偶校验写入操作会使用您的卷的一些可用 IOPS。根据您的 RAID 阵列配置,这些 RAID 模式提供的可用 IOPS 比 RAID 0 配置少 20-30%。成本增加也是与这些 RAID 模式有关的一个因素;在使用相同的卷大小和速度时,一个 2 卷 RAID 0 阵列明显胜过两倍成本的 4 卷 RAID 6 阵列。

相比在单个 Amazon EBS 卷上配置,通过创建 RAID 0 阵列,文件系统可以获得更高性能。为获得额外冗余性,RAID 1 阵列提供了数据的一个“镜像”。在执行此步骤之前,您需要确定 RAID 阵列的大小以及需要配置多少 IOPS。

RAID 0 阵列的最终大小是阵列中各个卷的大小之和,带宽是阵列中各个卷的可用带宽之和。RAID 1 阵列的最终大小和带宽等于 阵列中各个卷的大小和带宽。例如,预配置 IOPS 为 4000 的两个 500 GiB Amazon EBS 卷将创建可用带宽为 8000 IOPS、吞吐量为 640 MB/s 的 1000 GiB RAID 0 阵列,或创建可用带宽为 4000 IOPS、吞吐量为 320 MB/s 的 500 GiB RAID 1 阵列。

本文档提供基本的 RAID 设置示例。有关 RAID 配置、性能和恢复的更多信息,请参阅 Linux RAID Wiki,网址为 https://raid.wiki.kernel.org/index.php/Linux_Raid

在 Linux 上创建 RAID 阵列

使用以下过程创建 RAID 阵列。请注意,您可以从 Amazon EC2 用户指南(适用于 Windows 实例) 中的在 Windows 上创建 RAID 阵列获得有关 Windows 实例的说明。

在 Linux 上创建 RAID 阵列

  1. 为阵列创建 Amazon EBS 卷。有关更多信息,请参阅 创建 Amazon EBS 卷

    重要

    为阵列创建具有相等大小和 IOPS 性能值的卷。确保不创建超过 EC2 实例的可用带宽的阵列。有关更多信息,请参阅 Amazon EC2 实例配置

  2. 将 Amazon EBS 卷附加到要承载该阵列的实例。有关更多信息,请参阅 将 Amazon EBS 卷附加到实例

  3. 使用 mdadm 命令从新附加的 Amazon EBS 卷创建逻辑 RAID 设备。用阵列中的卷数替换 number_of_volumes,用阵列中每个卷的设备名称 (例如 /dev/xvdf) 替换 device_name。您还可以将 MY_RAID 替代为阵列的唯一名称。

    注意

    您可以使用 lsblk 命令列出实例上的设备以找到设备名称。

    (仅限 RAID 0) 要创建 RAID 0 阵列,请执行以下命令 (注意,--level=0 选项用于将阵列条带化):

    [ec2-user ~]$ sudo mdadm --create --verbose /dev/md0 --level=0 --name=MY_RAID --raid-devices=number_of_volumes device_name1 device_name2

    (仅限 RAID 1) 要创建 RAID 1 阵列,请执行以下命令 (注意,--level=1 选项用于将阵列镜像化):

    [ec2-user ~]$ sudo mdadm --create --verbose /dev/md0 --level=1 --name=MY_RAID --raid-devices=number_of_volumes device_name1 device_name2
  4. 给 RAID 阵列一些时间进行初始化和同步。您可以借助下面的命令跟踪这些操作的进度:

    [ec2-user ~]$ sudo cat /proc/mdstat

    下面是示例输出:

    Personalities : [raid1] md0 : active raid1 xvdg[1] xvdf[0] 20955008 blocks super 1.2 [2/2] [UU] [=========>...........] resync = 46.8% (9826112/20955008) finish=2.9min speed=63016K/sec

    通常,您可以通过下面的命令显示有关 RAID 阵列的详细信息:

    [ec2-user ~]$ sudo mdadm --detail /dev/md0

    下面是示例输出:

    /dev/md0: Version : 1.2 Creation Time : Mon Jun 27 11:31:28 2016 Raid Level : raid1 Array Size : 20955008 (19.98 GiB 21.46 GB) Used Dev Size : 20955008 (19.98 GiB 21.46 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Mon Jun 27 11:37:02 2016 State : clean ... ... ... Number Major Minor RaidDevice State 0 202 80 0 active sync /dev/sdf 1 202 96 1 active sync /dev/sdg
  5. 在您的 RAID 阵列上创建一个文件系统,并为该文件系统分配一个稍后在装载该文件系统时使用的标签。例如,要使用标签 MY_RAID 创建 ext4 文件系统,请执行以下命令:

    [ec2-user ~]$ sudo mkfs.ext4 -L MY_RAID /dev/md0

    根据应用程序的要求或操作系统的限制,您可以使用其他文件系统类型,如 ext3 或 XFS (请参阅您的文件系统文档以了解相应的文件系统创建命令)。

  6. 要确保 RAID 阵列在启动时自动重组,请创建一个包含 RAID 信息的配置文件:

    [ec2-user ~]$ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf

    注意

    如果您使用的是 Linux 发行版而不是 Amazon Linux,此文件可能需要被放在不同的位置。有关更多信息,请参阅您的 Linux 系统上的 man mdadm.conf

  7. 创建新的 Ramdisk Image 以为新的 RAID 配置正确地预加载块储存设备模块:

    [ec2-user ~]$ sudo dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)
  8. 为 RAID 阵列创建装载点。

    [ec2-user ~]$ sudo mkdir -p /mnt/raid
  9. 最后,在已创建的装载点上安装 RAID 设备:

    [ec2-user ~]$ sudo mount LABEL=MY_RAID /mnt/raid

    RAID 设备现已准备就绪,可供使用。

  10. (可选) 要在每一次系统重启时装载此 Amazon EBS 卷,可在 /etc/fstab 文件中为该设备添加一个条目。

    1. 创建 /etc/fstab 文件的备份,当您进行编辑时意外损坏或删除了此文件的情况下,可以使用该备份。

      [ec2-user ~]$ sudo cp /etc/fstab /etc/fstab.orig
    2. 使用您常用的文本编辑器 (如 nanovim) 打开 /etc/fstab 文件。

    3. 注释掉任何以“UUID=”开头的行,然后,在文件末尾,使用以下格式为您的 RAID 卷添加新行:

      device_label mount_point file_system_type fs_mntops fs_freq fs_passno

      此行的最后三个字段分别是文件系统装载选项、文件系统转储频率和启动时的文件系统检查顺序。如果您不知道这些值应该是什么值,请使用下面的示例中的值 (defaults,nofail 0 2)。有关 /etc/fstab 条目的更多信息,请参阅fstab手册页 (通过在命令行上输入 man fstab)。例如,要在设备上的装载点 /mnt/raid 装载带 MY_RAID 标签的 ext4 文件系统,请将以下条目添加到 /etc/fstab

      注意

      如果您要在未附加该卷的情况下启动实例 (例如,以便该卷可以在不同实例之间向后和向前移动),则应添加 nofail 装载选项,该选项允许实例即使在卷装载过程中出现错误时也可启动。Debian 衍生物 (如 Ubuntu) 还必须添加 nobootwait 装载选项。

      LABEL=MY_RAID /mnt/raid ext4 defaults,nofail 0 2
    4. 在您将新条目添加到 /etc/fstab 后,需要检查您的条目是否有效。运行 sudo mount -a 命令,以便安装 /etc/fstab 中的所有文件系统。

      [ec2-user ~]$ sudo mount -a

      如果上述命令未产生错误,说明您的 /etc/fstab 文件正常,您的文件系统会在下次启动时自动装载。如果该命令产生了任何错误,请检查这些错误并尝试更正 /etc/fstab

      警告

      /etc/fstab 文件中的错误可能显示系统无法启动。请勿关闭 /etc/fstab 文件中有错误的系统。

    5. (可选) 如果您无法确定如何更正 /etc/fstab 错误,则始终可以使用以下命令还原您的备份 /etc/fstab 文件。

      [ec2-user ~]$ sudo mv /etc/fstab.orig /etc/fstab