Linux上设置RAID 10

RAID 10(又叫RAID 1+0或镜像条带)阵列结合了RAID 0RAID 1二者的功能特性,从而提供了高性能、容错的磁盘输入/输出操做。在RAID 0中,读取/写入操做跨多个驱动器并路执行;在RAID 1中,如出一辙的数据写入到两个或多个驱动器上。html

在本教程中,我将介绍如何使用5只相同的8 GiB磁盘,构建一个软件RAID 10阵列。虽然用来构建RAID 10阵列的最大磁盘数量是4只(好比一组条带化的两个镜像),但咱们将增添一只额外的备用驱动器,以防其中一个主驱动器出现故障。咱们还将介绍一些工具,你之后能够用来分析RAID阵列的性能。linux

请注意:全面深刻地介绍RAID 10及其余分区方案(以及不一样尺寸的驱动器和文件系统)的全部优缺点不在本文的探讨范围以内。数据库

RAID 10阵列是如何工做的?缓存

若是你须要实施一种支持输入/输出密集型操做(好比数据库、电子邮件和网站服务器)的存储解决方案,RAID 10是正确的选择。下面会介绍其中原委。不妨先看一看下图。服务器

镜像1和镜像2的条带并发

设想一下某个文件由上图中的数据块ABCDE组成。每一个RAID 1镜像集(好比镜像1或镜像2)将数据块复制到两个设备中的每个。因为这种配置,写入性能有所降低,由于每一个数据块都要写入两次,每只磁盘各写入一次,而相比从单只读盘读取数据,读取性能依然没有变化。优势在于,这种方案提供了冗余性,由于除非每一个镜像中的多只磁盘出现故障,不然能够维持正常的磁盘输入/输出操做。工具

RAID 0条带的工做原理是,把数据划分红多个数据块,并将数据块A写入到镜像1,同时将数据块B写入到镜像2,依次类推,于是提升了整体的读取和写入性能。另外一方面,没有一个镜像含有向主集提交的任何一部分数据的完整信息。这意味着,若是其中一个镜像出现故障,整个RAID 0组件(以及于是RAID 10集)就没法操做,数据出现没法恢复的丢失。布局

构建RAID 10阵列性能

RAID 10阵列有两种可能的构建方案:复杂方案(只要一步就能构建),或嵌套方案(构建方法是,先构建两个或多个RAID 1阵列,而后把它们用做RAID 0中的组件设备)。在本教程中,咱们将介绍构建复杂的RAID 10阵列,缘由在于这种阵列让咱们可使用数量为奇数或偶数的磁盘,而且能够做为单一RAID设备来加以管理,而不是介绍嵌套方案(只容许数量为偶数的驱动器,必须做为嵌套设备来加以管理, RAID 1RAID 0分开来处理)。测试

假设你已安装了mdadm,该后台程序在你的系统上运行。想了解详细内容,请参阅这篇教程:http://xmodulo.com/create-software-raid1-array-mdadm-linux.html。另外假设已在每只磁盘上建立了主分区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(默认选项):意味着 near拷贝。一个数据块的多个拷贝在不一样的设备中处于类似的偏移(offset)。这种布局提供的读取和写入性能与RAID 0阵列的性能类似。

•o代表offset拷贝。不是数据段在条带里面复制,而是整个条带被复制,但由一个设备轮转,那样重复数据块分布在不一样的设备上。于是,随后的数据块拷贝在下一个驱动器中,下移一个数据段。想让你的RAID 10阵列使用这种布局,将--layout=o2添加到用来构建阵列的命令。

•f 代表far拷贝(偏移全然不一样的多个拷贝)。这种布局提供了较好的读取性能,却提供了较差的写入性能。于是,这种方案最适合须要支持的读取操做比写入操做多得多的系统。想让你的RAID 10阵列使用这种布局,将--layout=f2添加到用来构建阵列的命令。

--layout选项中nfo后面所跟的数字代表了所需的每一个数据块的副本数量。默认值是2,但它能够是磁盘中设备数量的2倍数。经过提供数量足够的副本,你就能尽可能减小单个驱动器的输入/输出影响。

4. Chunk Size,按照Linux RAID维基,数据段大小(chunk size)指写入到设备的最小单位的数据。最优化的数据段大小取决于输入/输出操做的速度以及相关文件的大小。若是写入大文件,只要确保数据段至关大,有望看到较低的开销,而主要存储小文件的阵列有望更加得益于较小的数据段。想为你的RAID 10阵列指定某个数据段大小,将--chunk=desired_chunk_size添加到用来构建阵列的命令。

遗憾的是,没有包罗万象的方法能够提高性能。下面是值得考虑的几个指导准则。

文件系统:总的来讲,XFS听说是最好的文件系统,而EXT4仍然是个不错的选择。

最佳化布局:far布局提高了读取性能,但下降了写入性能。

副本数量:更多的副本尽可能减少了输入/输出影响,但须要更多的磁盘时也增长了成本。

硬件:固态硬盘比传统的旋转磁盘更有可能显示性能提高的优势(在同一环境下)。

使用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*150003.9 GB)从阵列拷贝到/dev/null

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

使用Iozone测试RAID性能

Iozonehttp://www.iozone.org)是一种文件系统基准测试工具,让咱们能够测量的众多磁盘输入/输出操做,包括随机读取/写入、顺序读取/写入和从新读取/从新写入。它能够将结果导出到微软ExcelLibreOffice Calc文件。

Iozone安装到CentOS/RHEL 7

启用Repoforge软件库,而后执行下列命令:

# yum install iozone

Iozone安装到Debian 7

# aptitude install iozone3

下面这个iozone命令将在RAID-10阵列中执行全部测试:

# iozone -Ra /dev/md0 -b /tmp/md0.xls

•-R生成与Excel兼容的报告,并发送到标准输出设备。

•-a在全自动模式下运行iozone,涵盖全部测试和可能的记录/文件大小。记录大小:4k16M,文件大小:64k512M

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

希望本文有所帮助。若是您对于提高RAID 10的性能方面有何想法或高招,欢迎交流。

 



相关文章
相关标签/搜索