Amazon EBS 和 RAID 配置 - Amazon EBS

Amazon EBS 和 RAID 配置

通过 Amazon EBS,您可以使用可与传统裸机服务器结合使用的任何标准 RAID 配置,只要实例的操作系统支持该特定 RAID 配置。这是因为,所有 RAID 都是在软件级别上实现的。

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

RAID 配置选项

相比在单个 Amazon EBS 卷上配置,通过创建 RAID 0 阵列,文件系统可以获得更高性能。如果 I/O 性能至关重要,请使用 RAID 0。I/O 通过 RAID 0 在卷内以条带状分布。如果您添加卷,则会直接增加吞吐量和 IOPS。但是,请记住,条带的性能仅限于集中性能最差的卷,并且集中的单个卷丢失会导致阵列数据完全丢失。

RAID 0 阵列的最终大小是阵列中各个卷的大小之和,带宽是阵列中各个卷的可用带宽之和。例如,预置 IOPS 为 4000 的两个 500 GiB io1 卷将创建可用带宽为 8000 IOPS、吞吐量为 1000 MiB/s 的 1000 GiB RAID 0 阵列。

重要

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

RAID 1 也不建议用于 Amazon EBS。RAID 1 需要比非 RAID 配置更大的 Amazon EC2 到 Amazon EBS 带宽,因为数据将同时写入多个卷。此外,RAID 1 不提供任何写入性能改进。

创建 RAID 0 阵列

使用以下过程创建 RAID 0 阵列。

注意事项
  • 在执行此过程之前,您必须确定 RAID 0 阵列的大小以及预调配多少 IOPS。

  • 为阵列创建具有相等大小和 IOPS 性能值的卷。确保不创建超过 EC2 实例的可用带宽的阵列。

  • 您应避免从 RAID 卷启动。如果有一台设备出现故障,您可能无法启动操作系统。

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

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

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

    注意

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

    要创建 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
    提示

    如您遇到 mdadm: command not found 错误,请使用以下命令安装 mdadm:sudo yum install mdadm

  4. 给 RAID 阵列一些时间进行初始化和同步。您可以借助下面的命令跟踪这些操作的进度:

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

    下面是示例输出:

    Personalities : [raid0] md0 : active raid0 xvdc[1] xvdb[0] 41910272 blocks super 1.2 512k chunks unused devices: <none>

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

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

    下面是示例输出:

    /dev/md0: Version : 1.2 Creation Time : Wed May 19 11:12:56 2021 Raid Level : raid0 Array Size : 41910272 (39.97 GiB 42.92 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Wed May 19 11:12:56 2021 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Chunk Size : 512K Consistency Policy : none Name : MY_RAID UUID : 646aa723:db31bbc7:13c43daf:d5c51e0c Events : 0 Number Major Minor RaidDevice State 0 202 16 0 active sync /dev/sdb 1 202 32 1 active sync /dev/sdc
  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,您可能需要修改此命令。例如,您可能需要将文件放在不同的位置,或者添加 --examine 参数。有关更多信息,请在 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. 使用您常用的文本编辑器(如 /etc/fstabnano)打开 vim 文件。

    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
在 Windows 上创建 RAID 0 阵列
  1. 为阵列创建 Amazon EBS 卷。有关更多信息,请参阅创建 Amazon EBS 卷

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

  3. 连接到您的 Windows 实例。有关更多信息,请参阅连接到您的 Windows 实例

  4. 打开命令提示符并键入 diskpart 命令。

    diskpart Microsoft DiskPart version 6.1.7601 Copyright (C) 1999-2008 Microsoft Corporation. On computer: WIN-BM6QPPL51CO
  5. DISKPART 提示符处,使用以下命令列出可用磁盘。

    DISKPART> list disk Disk ### Status Size Free Dyn Gpt -------- ------------- ------- ------- --- --- Disk 0 Online 30 GB 0 B Disk 1 Online 8 GB 0 B Disk 2 Online 8 GB 0 B

    标识您要在阵列中使用的磁盘并记下其磁盘编号。

  6. 您要在阵列中使用的每个磁盘都必须是不包含任何现有卷的联机动态磁盘。使用以下步骤可将基本磁盘转换为动态磁盘并删除任何现有卷。

    1. 使用以下命令选择您要在阵列中使用的磁盘(将 n 替换为磁盘编号)。

      DISKPART> select disk n Disk n is now the selected disk.
    2. 如果所选磁盘列为 Offline 状态,则通过运行 online disk 命令使它联机。

    3. 如果所选磁盘在前面的 Dyn 命令输出的 list disk 列中没有星号,则需要将它转换为动态磁盘。

      DISKPART> convert dynamic
      注意

      如果显示磁盘写保护错误,可以使用 ATTRIBUTE DISK CLEAR READONLY 命令清除只读标记,然后重试动态磁盘转换。

    4. 使用 detail disk 命令检查所选磁盘是否存在现有卷。

      DISKPART> detail disk XENSRC PVDISK SCSI Disk Device Disk ID: 2D8BF659 Type : SCSI Status : Online Path : 0 Target : 1 LUN ID : 0 Location Path : PCIROOT(0)#PCI(0300)#SCSI(P00T01L00) Current Read-only State : No Read-only : No Boot Disk : No Pagefile Disk : No Hibernation File Disk : No Crashdump Disk : No Clustered Disk : No Volume ### Ltr Label Fs Type Size Status Info ---------- --- ----------- ----- ---------- ------- --------- -------- Volume 2 D NEW VOLUME FAT32 Simple 8189 MB Healthy

      记下磁盘上的任何卷编号。在该示例中,卷编号是 2。如果没有卷,则您可以跳过下一步。

    5. (仅当上一步中标识了卷时才需要)选择并删除磁盘上在上一步中标识的所有现有卷。

      警告

      这会销毁卷上的所有现有数据。

      1. 选择卷(将 n 替换为卷编号)。

        DISKPART> select volume n Volume n is the selected volume.
      2. 删除卷。

        DISKPART> delete volume DiskPart successfully deleted the volume.
      3. 对所选磁盘上需要删除的每个卷重复这些子步骤。

    6. 对您要在阵列中使用的每个磁盘重复步骤 6

  7. 验证您要使用的磁盘现在是否为动态。在这种情况下,我们将磁盘 1 和磁盘 2 用于 RAID 卷。

    DISKPART> list disk Disk ### Status Size Free Dyn Gpt -------- ------------- ------- ------- --- --- Disk 0 Online 30 GB 0 B Disk 1 Online 8 GB 0 B * Disk 2 Online 8 GB 0 B *
  8. 创建 RAID 阵列。在 Windows 上,RAID 0 卷指条带卷。

    要在磁盘 1 和 2 上创建条带卷阵列,请使用以下命令(注意,stripe 选项用于将阵列条带化):

    DISKPART> create volume stripe disk=1,2 DiskPart successfully created the volume.
  9. 验证您的新卷。

    DISKPART> list volume DISKPART> list volume Volume ### Ltr Label Fs Type Size Status Info ---------- --- ----------- ----- ---------- ------- --------- -------- Volume 0 C NTFS Partition 29 GB Healthy System Volume 1 RAW Stripe 15 GB Healthy

    请注意,Type 列现在表示卷 1 是 stripe 卷。

  10. 选择并格式化您的卷,以便可以开始使用它。

    1. 选择您要格式化的卷(将 n 替换为卷编号)。

      DISKPART> select volume n Volume n is the selected volume.
    2. 格式化卷。

      注意

      要执行完整格式化,请省略 quick 选项。

      DISKPART> format quick recommended label="My new volume" 100 percent completed DiskPart successfully formatted the volume.
    3. 向卷分配可用驱动器号。

      DISKPART> assign letter f DiskPart successfully assigned the drive letter or mount point.

    新卷现在已准备就绪,可供使用。

创建 RAID 阵列中卷的快照

如果要使用快照备份 RAID 阵列中 EBS 卷上的数据,则必须确保快照的一致性。原因在于这些卷的快照是独立创建的。从不同步的快照恢复 RAID 阵列中的 EBS 卷会降低阵列的完整性。

要为 RAID 阵列创建一组一致的快照,请使用 EBS 多卷快照。利用多卷快照,您可以跨附加到 EC2 实例的多个 EBS 卷拍摄时间点、数据协调和崩溃一致性快照。您不需要停止实例以在多个卷之间协调来确保一致性,因为快照将跨多个 EBS 卷自动拍摄。有关更多信息,请参阅创建 Amazon EBS 快照下的有关创建多卷快照的步骤。