如何在 Linux 上设置 RAID 10 以实现高性能和容错磁盘 I/O如何在 Linux 上设置 RAID 10 以实现高性能和容错磁盘 I/O如何在 Linux 上设置 RAID 10 以实现高性能和容错磁盘 I/O如何在 Linux 上设置 RAID 10 以实现高性能和容错磁盘 I/O
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Linux 上设置 RAID 10 以实现高性能和容错磁盘 I/O

RAID 10(又名 RAID 1+0 或镜像条带)阵列通过结合 RAID 0(跨多个驱动器并行执行读/写操作)和 RAID 1(数据以相同方式写入两个或多个驱动器)的功能,提供高性能和容错磁盘 I/O 操作。

在本教程中,我将向您展示如何使用五个相同的 8 GiB 磁盘设置软件 RAID 10 阵列。虽然设置 RAID 10 阵列的最小磁盘数量为四个(例如,两个镜像的条带集),但如果其中一个主驱动器出现故障,我们将添加一个额外的备用驱动器。我们还将分享一些您稍后可以用来分析 RAID 阵列性能的工具。

请注意,详细了解 RAID 10 和其他分区方案(使用不同大小的驱动器和文件系统)的所有优缺点超出了本文的范围。

Raid 10 阵列如何工作?

如果您需要实施支持 I/O 密集型操作(例如数据库、电子邮件和 Web 服务器)的存储解决方案,则 RAID 10 是最佳选择。让我告诉你原因。我们参考下图。

假设一个文件由上图中的块 A、B、C、D、E 和 F 组成。每个 RAID 1 镜像集(例如,镜像 1 或 2)都会在其两个设备上复制块。由于这种配置,写入性能会降低,因为每个块必须写入两次,每个磁盘一次,而与从单个磁盘读取相比,读取性能保持不变。好的一面是,这种设置提供了冗余,除非每个镜像中的多个磁盘发生故障,否则可以维持正常的磁盘 I/O 操作。

RAID 0条带的工作原理是将数据分为块,同时将块A写入镜像1,块B写入镜像2(依此类推),从而提高整体读写性能。另一方面,没有一个镜像包含提交给主集的任何数据的完整信息。这意味着,如果其中一个镜像发生故障,整个 RAID 0 组件(以及 RAID 10 集)将无法运行,并且数据丢失无法恢复。

设置 RAID 10 阵列

RAID 10 阵列有两种可能的设置:复杂(一步构建)或嵌套(通过创建两个或更多 RAID 1 阵列构建,然后将它们用作 RAID 0 中的组件设备)。在本教程中,我们将介绍复杂 RAID 10 阵列的创建,因为它允许我们使用偶数或奇数数量的磁盘创建阵列,并且可以作为单个 RAID 设备进行管理,而不是嵌套设置(只允许偶数数量的驱动器,并且必须作为嵌套设备进行管理,分别处理 RAID 1 和 RAID 0)。

假设您已安装 mdadm,并且守护程序在您的系统上运行。有关详细信息,请参阅本教程。还假设每个磁盘上都创建了主分区 sd[bcdef]1。因此,输出:


$ ls -l /dev | grep sd[bcdef] 

应该是这样的:

让我们继续使用以下命令创建 RAID 10 阵列:


# mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/sd[bcde]1 --spare-devices=1 /dev/sdf1

创建数组后(不应超过几分钟),输出:


# mdadm --detail /dev/md0 

应该看起来像:

在我们继续下一步之前,有几件事需要注意。

1.“Used Dev Space”表示阵列使用的每个成员设备的容量。

2.“Array Size”是数组的总大小。对于 RAID 10 阵列,这等于 (N*C)/M,其中 N:活动设备数量,C:活动设备容量,M:每个镜像中的设备数量。因此,在本例中,(N*C)/M 等于 (4*8GiB)/2=16GiB。

3.“Layout”是指数据布局的细节。可能的布局值如下。

n(默认选项):表示n耳副本。一个数据块的多个副本在不同设备中的偏移量相似。此布局可产生与 RAID 0 阵列相似的读写性能。

o 表示o偏移副本。整个条带不是在条带内复制块,而是复制整个条带,但由一台设备旋转,因此重复的块位于不同的设备上。因此,块的后续副本位于下一个驱动器中,再往下一个块。要将此布局用于 RAID 10 阵列,请将 --layout=o2 添加到用于创建阵列的命令中。

f 表示 far 副本(具有不同偏移量的多个副本)。这种布局提供了更好的读取性能,但写入性能较差。因此,对于需要支持比写入多得多的读取的系统来说,它是最佳选择。要将此布局用于 RAID 10 阵列,请将 --layout=f2 添加到用于创建阵列的命令中。

--layout选项中的n、f、o后面的数字表示每个数据块需要的副本数量。默认值为 2,但可以为 2 至阵列中的设备数量。通过提供足够数量的副本,您可以最大限度地减少对各个驱动器的 I/O 影响。

4. 根据 Linux RAID wiki,块大小是可以写入设备的最小数据单位。最佳块大小取决于 I/O 操作的速率和所涉及的文件的大小。对于大型写入,您可能会通过使用相当大的块来看到较低的开销,而主要保存小文件的数组可能会从较小的块大小中受益更多。要为 RAID 10 阵列指定特定块大小,请将 --chunk=desired_chunk_size 添加到用于创建阵列的命令中。

不幸的是,没有一种万能的公式可以提高性能。以下是一些需要考虑的准则。

  • 文件系统:总体而言,XFS 据说是最好的,而 EXT4 仍然是一个不错的选择。

  • 最佳布局:远布局提高了读取性能,但降低了写入性能。

  • 副本数量:更多副本可以最大限度地减少 I/O 影响,但会因为需要更多磁盘而增加成本。

  • 硬件:与传统(旋转)磁盘相比,SSD(在相同环境下)更有可能表现出更高的性能。

使用 dd 进行 RAID 性能测试

以下基准测试可用于检查 RAID 10 阵列 (/dev/md0) 的性能。

1. 写操作

将 256MB 的单个文件写入设备:


# dd if=/dev/zero of=/dev/md0 bs=256M count=1 oflag=dsync

512 字节被写入 1000 次:


# dd if=/dev/zero of=/dev/md0 bs=512 count=1000 oflag=dsync

使用dsync标志,dd绕过文件系统缓存,并对RAID阵列执行同步写入。该选项用于消除 RAID 性能测试期间的缓存效应。

2、读操作

256KiB*15000 (3.9 GB) 从数组复制到 /dev/null:


# dd if=/dev/md0 of=/dev/null bs=256K count=15000

使用 Iozone 进行 RAID 性能测试

在 CentOS/RHEL 7 上安装 Iozone

启用 Repoforge。然后:


# yum install iozone

在 Debian 7 或更高版本上安装 Iozone


# aptitude install iozone3

下面的 iozone 命令将执行 RAID-10 阵列中的所有测试:


# iozone -Ra /dev/md0 -b /tmp/md0.xls
  • -R:生成标准输出的 Excel 兼容报告。

  • -a:以全自动模式运行iozone,包含所有测试和可能的记录/文件大小。记录大小:4k-16M,文件大小:64k-512M。

  • -b /tmp/md0.xls:将测试结果存储在指定文件中。

希望这可以帮助。请随意添加您的想法或添加有关如何提高 RAID 10 性能的提示。

©2015-2025 艾丽卡 support@alaica.com