RAID10(也称为RAID1+0或镜像条带)阵列结合了RAID0和RAID1的功能特性,提供高性能、容错的磁盘输入/输出操作。在RAID0中,读/写操作在多个驱动器上并行进行;在RAID1中,相同的数据被写入两个或多个驱动器。在本教程中,我将向您展示如何使用五个相同的8GiB磁盘构建软件RAID10阵列。虽然用于构建RAID10阵列的最大磁盘数量是4(就像一组两个镜像的条带化),但我们将添加一个额外的备用驱动器以防其中一个主驱动器发生故障。我们还将介绍一些您稍后可以用来分析RAID阵列性能的工具。请注意:对RAID10和其他分区方案(以及不同大小的驱动器和文件系统)的所有优缺点进行全面深入的描述超出了本文的范围。RAID10阵列如何工作?如果您需要实施支持I/O密集型操作(如数据库、电子邮件和Web服务器)的存储解决方案,RAID10是正确的选择。下面将介绍整个故事。请看下面的图片。镜像1和镜像2的条带化想象一个文件,由上图中的数据块A、B、C、D、E组成。每个RAID1镜像集(例如镜像1或镜像2)都将数据块复制到两个设备中的每一个。由于这种配置,写入性能会下降,因为每个数据块被写入两次,每个磁盘一次,而与从单个只读磁盘读取相比,读取性能保持不变。优点是这种方案提供了冗余,因为可以维持正常的磁盘I/O操作,除非每个镜像中有多个磁盘发生故障。RAID0条带化的工作原理是将数据分成多个数据块,将数据块A写入镜像1,同时将数据块B写入镜像2,以此类推,从而提高整体读写表现。另一方面,没有镜像包含有关提交给主服务器的数据的任何部分的完整信息。这意味着,如果其中一个镜像发生故障,整个RAID0组件(以及RAID10组)将无法运行,数据将无法恢复地丢失。构建RAID10阵列RAID10阵列有两种可能的构建方案:复杂方案(一步构建)或嵌套方案(通过首先构建两个或多个RAID1阵列并将它们作为组成设备来构建RAID0)。在本教程中,我们将介绍构建复杂的RAID10阵列,因为它们允许我们使用奇数或偶数个磁盘并将它们作为单个RAID设备进行管理,而不是引入嵌套方案(仅允许偶数个驱动器并且必须作为嵌套设备进行管理,RAID1和RAID0分开处理)。假设您已经安装了mdadm,这是在您的系统上运行的守护进程。详情请参考本教程:http://xmodulo.com/create-software-raid1-array-mdadm-linux.html。还假设主分区sd[bcdef]1已在每个磁盘上创建。因此,ls-l/dev|的输出grepsd[bcdef]应该如下所示:接下来使用以下命令构建RAID10阵列:#mdadm--create--verbose/dev/md0--level=10--raid-devices=4/dev/sd[bcde]1--spare-devices=1/dev/sdf1构建阵列后(构建过程应该不会花费几分钟),#mdadm--detail/dev/md0输出应该如下所示:在我们继续下一步之前,有几件事需要注意。1.UsedDevSpace表示阵列使用的每个成员设备的容量。2.ArraySize是指数组的总大小。对于RAID10阵列,这相当于(N*C)/M,其中N是活动设备的数量,C是活动设备的容量,M是每个镜像中的设备数量。所以在这里,(N*C)/M相当于(4*8GiB)/2=16GiB。3.布局是指数据布局的具体细节。可能的布局值如下。?n(默认选项):表示接近复制。块的多个副本在不同设备上具有相似的偏移量。此布局提供类似于RAID0阵列的读写性能。?o表示偏移副本。不是在条带内复制数据段,而是复制整个条带,但由一个设备轮换,以便重复的数据块分布在不同的设备上。因此,后续数据块副本位于下一个驱动器中,一个数据段向下。要使您的RAID10阵列使用此布局,请将--layout=o2添加到用于构建阵列的命令中。?f表示远副本(偏移量完全不同的多个副本)。这种布局提供了良好的读取性能,但写入性能较差。因此,该方案最适合需要支持比写操作多得多的读操作的系统。要将此布局用于RAID10阵列,请将--layout=f2添加到用于构建阵列的命令中。--layout选项中n、f和o后面的数字表示每个数据块所需的副本数。默认值为2,但它可以是磁盘中设备数的2的倍数。通过提供足够数量的副本,您可以最大限度地减少单个驱动器的I/O影响。4.ChunkSize,根据LinuxRAIDwiki,数据段大小(chunksize)是指写入设备的最小数据单位。最佳数据段大小取决于I/O操作的速度和关联文件的大小。如果您写入大文件,只要确保您的数据段相当大,您就可以期望看到较低的开销,而主要存储小文件的数组可以期望从较小的数据段中获益更多。要为RAID10阵列指定特定块大小,请将--chunk=desired_chunk_size添加到用于构建阵列的命令中。不幸的是,没有一种通用的方法可以提高性能。以下是一些值得考虑的准则。?文件系统:总的来说,XFS被认为是最好的文件系统,而EXT4仍然是一个不错的选择。?优化布局:far布局提高了读取性能,但降低了写入性能。?副本数量:更多副本可最大限度地减少I/O影响,但在需要更多磁盘时也会增加成本。?硬件:SSD比传统的旋转磁盘更有可能显示出性能优势(在相同的环境中)。#p#使用DD测试RAID性能以下基准可用于检查我们的RAID10阵列(/dev/md0)的性能。1.单个大小为256MB的文件写入设备:#ddif=/dev/zeroof=/dev/md0bs=256Mcount=1oflag=dsync512字节写入1000次:#ddif=/dev/zeroof=/dev/md0bs=512count=1000oflag=dsync由于dsync标志,dd会绕过系统文件缓存,对RAID阵列进行同步写入。此选项用于消除RAID性能测试期间的缓存效应。2.读操作256KiB*15000(3.9GB)从数组复制到/dev/null:#ddif=/dev/md0of=/dev/nullbs=256Kcount=15000使用Iozone测试RAID性能Iozone(http://www.iozone.org)是一个文件系统基准测试工具,它允许我们测量大量磁盘I/O操作,包括随机读/写、顺序读/写和重读/重写输入。它可以将结果导出到MicrosoftExcel或LibreOfficeCalc文件。要在CentOS/RHEL7上安装Iozone,请启用Repoforge存储库,然后执行以下命令:#yuminstalliozone在Debian7上安装Iozone#aptitudeinstalliozone3以下iozone命令将在RAID-10阵列上执行所有测试:#iozone-ra/dev/md0-b/tmp/md0.xls-R:生成与Excel兼容的报告并将其发送到标准输出设备。?-a:以全自动模式运行iozone,涵盖所有测试和可能的记录/文件大小。记录大小:4k到16M,文件大小:64k到512M。?-b/tmp/md0.xls:将测试结果存放在指定文件中。希望本文有所帮助。如果您对提高RAID10的性能有什么想法或者高招,欢迎交流。英文:http://xmodulo.com/setup-raid10-linux.html
