Linux系统设置RAID 10,确保高性能和容错的磁盘输入/输出的图文教程,linuxraid


在本教程中,我将介绍如何使用5只相同的8 GiB磁盘,构建一个软件RAID 10阵列。我们将增添一只额外的备用驱动器,以防其中一个主驱动器出现故障。我们还将介绍一些工具,你以后可以用来分析RAID阵列的性能

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

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

请注意:全面深入地介绍RAID 10及其他分区方案(以及不同尺寸的驱动器和文件系统)的所有优缺点不在本文的探讨范围之内。

RAID 10阵列是如何工作的?

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

镜像1和镜像2的条带

设想一下某个文件由上图中的数据块A、B、C、D和E组成。每个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 1和RAID 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选项中n、f和o后面所跟的数字表明了所需的每个数据块的副本数量。默认值是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*15000(3.9 GB)从阵列拷贝到/dev/null:

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

使用Iozone测试RAID性能

Iozone(http://www.iozone.org)是一种文件系统基准测试工具,让我们可以测量的众多磁盘输入/输出操作,包括随机读取/写入、顺序读取/写入和重新读取/重新写入。它可以将结果导出到微软Excel或LibreOffice 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,涵盖所有测试和可能的记录/文件大小。记录大小:4k至16M,文件大小:64k至512M。

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

但愿本文有所帮助。如果您对于提升RAID 10的性能方面有何想法或高招,欢迎交流。谢谢阅读,希望能帮到大家,请继续关注帮客之家,我们会努力分享更多优秀的文章。

英文:http://xmodulo.com/setup-raid10-linux.html


RAID 0, 1, 5, 10

RAID 是“独立磁盘冗余阵列”(最初为“廉价磁盘冗余
阵列”)的缩略语,1987 年由Patterson, Gibson 和Katz 在
加州大学伯克利分院的一篇文章中定义。RAID 阵列技术允许
将一系列磁盘分组,以实现提高可用性的目的,并提供为实现
数据保护而必需的数据冗余,有时还有改善性能的作用。
我们将对七个RAID 级别: 0,1,3,5,10,30 和50 作些
说明。最前面的4 个级别(0,1,3,5,)已被定为工业标
准,10 级、30 级和50 级则反应了ACCSTOR2000 磁盘阵列可
以提供的功能。了解每个级别的特征将有助于您判断哪个级别
最适合您的需要,本文的最后一部分将提供一份指导方针,帮
助您选择最适合您需要的RAID 级别。RAID 级别可以通过软件或硬件实现。许多但不是全部网
络操作系统支持的RAID 级别至少要达到5 级,RAID10、30
和50 在ACCSTOR2000 磁盘阵列控制下才能实现。基于软件
的RAID 需要使用主机CPU 周期和系统内存,从而增加了系
统开销,直接影响系统的性能。磁盘阵列控制器把RAID 的计
算和操纵工作由软件移到了专门的硬件上,一般比软件实现
RAID 的系统性能要好。

RAID-0
RAID-0 使用一种名为“条带”(striping)的技术把数据
分布到各个磁盘上,在那里每个“条带”被分散到连续“块”
上。条带允许从多个磁盘上同时存取信息,可以平衡磁盘间的
输入/输出负载,从而达到最大的数据容量,最快的存取速
度。RAID-0 是唯一没有冗余的一级RAID。没有冗余使
RAID-0 除了速度外还有低成本的优点,但这也意味着如果阵
列中某个磁盘失败,该阵列上的所有数据都将丢失。在RAID-
0 中,从磁盘故障恢复必须更换出错的磁盘,并从备份中恢复
所有驱动器上的数据。
对于可以承受因从磁盘故障中恢复而造成的时间损失的网
络来说,RAID-0 提供了一个高性能选择。既可以通过软件,
也可以通过硬件实现。
RAID-0(striping)
+最大数据容量;低成本;速度快
-没有冗余

RAID-1
RAID-1 也被称为镜像,因为一个磁盘上的数据被完全
复制到另一个磁盘上。如果一个磁盘失效,另一个还可用,
因此由于磁盘故障而造成的数据损失和系统中断实际上被去
除了。镜像缺点是复制每个磁盘或驱动器的费用较高,在大
型服务器上,这可能是一项很大的花销。RAID-l 可以由软件
或硬件方式实现。
RAID-1(镜像、双工)
+ 冗余最大; 快速恢复
-昂贵
-需要两个磁盘驱动器

RAID-3
RAID-3,也被称为带有专用奇偶位的条带,每个条带
片上都有相当于一“块”那么大的空间用来有效存储冗余信
息,即奇偶位。奇偶位是编码信息,如果某个磁盘发生故
障,可以用来恢复数据。
RAID3(Striping with Dedicated Parity)
+平衡可用性,费用和性能
-因需要进行奇偶计算而使速度下降;一般5 级更好需3
个或更多的驱动器

RAID-5
RAID-5 也被叫做带分布式奇偶位的条带,每个条带片
上都有相当于一个“块”那么大的地方被用来存放奇偶位。
与RAID-3 不同的是,RAID-5 象分布条带片上的数据那样把
奇偶位信息也分布在所有的磁盘上。尽管有一些容量上的损
失,RAID-5 能提供最佳的整体性能,因而也是被广泛的......余下全文>>
 

硬盘阵列模式RAID 0,RAID 1,RAID 5,RAID 10是什?

二楼说的很专业
我来说个简单的:
raid0 就是把多个(最少2个)硬盘合并成1个逻辑盘使用,数据读写时对各硬盘同时操作,不同硬盘写入不同数据,速度快。
raid1就是同时对2个硬盘读写(同样的数据)。强调数据的安全性。比较浪费。
raid5也是把多个(最少3个)硬盘合并成1个逻辑盘使用,数据读写时会建立奇偶校验信息,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。相当于raid0和raid1的综合。
raid10就是raid1+raid0,比较适合速度要求高,又要完全容错,当然¥也很多的时候。最少需要4块硬盘(注意:做raid10时要先作RAID1,再把数个RAID1做成RAID0,这样比先做raid0,再做raid1有更高的可靠性)