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,该后台程序在你的系统上运行。想了解详细内容,请参阅这篇教程:。另外假设已在每只磁盘上创建了主分区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添加到用来构建阵列的命令。