Linux 上的 RAID 配置
通过 Amazon EBS,您可以使用可与传统裸机服务器结合使用的任何标准 RAID 配置,只要实例的操作系统支持该特定 RAID 配置。这是因为,所有 RAID 都是在软件级别上实现的。
Amazon EBS 卷的数据可在可用区内多个服务器间进行复制,以防由于任何单个组件发生故障导致数据丢失。此复制使得 Amazon EBS 卷的可靠程度比普通磁盘高 10 倍。更多信息,请参阅 Amazon EBS 产品详细信息页面中的 Amazon EBS 可用性与持久性
注意
您应避免从 RAID 卷启动。Grub 通常只安装在 RAID 阵列中的一台设备上,如果某台镜像设备发生故障,您可能无法启动操作系统。
如果您需要在 Windows 实例上创建一个 RAID 阵列,请参阅 Amazon EC2 用户指南(适用于 Windows 实例) 中的 Windows 上的 RAID 配置。
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 不提供任何写入性能改进。
在 Linux 上创建 RAID 0 阵列
本文档提供基本的 RAID 0 设置示例。
在执行此步骤之前,您需要确定 RAID 0 阵列的大小以及需要配置多少 IOPS。
使用以下过程创建 RAID 0 阵列。请注意,您可以从 Amazon EC2 用户指南(适用于 Windows 实例)中的在 Windows 上创建 RAID 0 阵列中获得有关 Windows 实例的说明。
在 Linux 上创建 RAID 0 阵列
-
为阵列创建 Amazon EBS 卷。有关更多信息,请参阅创建 Amazon EBS 卷。
重要
为阵列创建具有相等大小和 IOPS 性能值的卷。确保不创建超过 EC2 实例的可用带宽的阵列。有关更多信息,请参阅Amazon EBS 优化的实例。
-
将 Amazon EBS 卷附加到要承载该阵列的实例。有关更多信息,请参阅将 Amazon EBS 卷挂载到实例。
-
使用 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
。 -
给 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
-
在您的 RAID 阵列上创建一个文件系统,并为该文件系统分配一个稍后在装载该文件系统时使用的标签。例如,要使用标签
MY_RAID
创建 ext4 文件系统,请运行以下命令:[ec2-user ~]$
sudo mkfs.ext4 -L
MY_RAID
/dev/md0根据应用程序的要求或操作系统的限制,您可以使用其他文件系统类型,如 ext3 或 XFS(请参阅您的文件系统文档以了解相应的文件系统创建命令)。
-
要确保 RAID 阵列在启动时自动重组,请创建一个包含 RAID 信息的配置文件:
[ec2-user ~]$
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf
注意
如果您使用的是 Linux 发行版而非 Amazon Linux,您可能需要修改此命令。例如,您可能需要将文件放在不同的位置,或者添加
--examine
参数。有关更多信息,请在 Linux 实例上运行 man mdadm.conf。 -
创建新的 Ramdisk Image 以为新的 RAID 配置正确地预加载块储存设备模块:
[ec2-user ~]$
sudo dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)
-
为 RAID 阵列创建装载点。
[ec2-user ~]$
sudo mkdir -p /mnt/
raid
-
最后,在已创建的装载点上安装 RAID 设备:
[ec2-user ~]$
sudo mount LABEL=
MY_RAID
/mnt/raid
RAID 设备现已准备就绪,可供使用。
-
(可选)要在每次系统重启时装载此 Amazon EBS 卷,可在
/etc/fstab
文件中为该设备添加一个条目。-
创建
/etc/fstab
文件的备份,当您进行编辑时意外损坏或删除了此文件的情况下,可以使用该备份。[ec2-user ~]$
sudo cp /etc/fstab /etc/fstab.orig
-
使用您常用的文本编辑器(如
/etc/fstab
或 nano)打开 vim 文件。 -
注释掉任何以“
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
-
在您将新条目添加到
/etc/fstab
后,需要检查您的条目是否有效。运行 sudo mount -a 命令以在/etc/fstab
中装载所有文件系统。[ec2-user ~]$
sudo mount -a
如果上述命令未产生错误,说明您的
/etc/fstab
文件正常,您的文件系统会在下次启动时自动装载。如果该命令产生了任何错误,请检查这些错误并尝试更正/etc/fstab
。警告
/etc/fstab
文件中的错误可能显示系统无法启动。请勿关闭/etc/fstab
文件中有错误的系统。 -
(可选)如果您无法确定如何更正
/etc/fstab
错误,则始终可以使用以下命令还原您的备份/etc/fstab
文件。[ec2-user ~]$
sudo mv /etc/fstab.orig /etc/fstab
-
创建 RAID 阵列中卷的快照
如果要使用快照备份 RAID 阵列中 EBS 卷上的数据,则必须确保快照的一致性。原因在于这些卷的快照是独立创建的。从不同步的快照恢复 RAID 阵列中的 EBS 卷会降低阵列的完整性。
要为 RAID 阵列创建一组一致的快照,请使用 EBS 多卷快照。利用多卷快照,您可以跨附加到 EC2 实例的多个 EBS 卷拍摄时间点、数据协调和崩溃一致性快照。您不需要停止实例以在多个卷之间协调来确保一致性,因为快照将跨多个 EBS 卷自动拍摄。有关更多信息,请参阅创建 Amazon EBS 快照下的有关创建多卷快照的步骤。