阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

如何在Linux上构建 RAID 10阵列

128次阅读
没有评论

共计 6204 个字符,预计需要花费 16 分钟才能阅读完成。

RAID 10 阵列(又名 RAID 1+0 或先镜像后分区)通过结合 RAID 0(读写操作在多个磁盘上同时并行执行)和 RAID 1(数据被完全相同地写入到两个或更多的磁盘)两者的特点实现高性能和高容错性的磁盘 I /O。

这篇文章会指导你如何使用五块相同的 8GB 磁盘来组成一个软件 RAID 10 阵列。因为组成一个 RAID 10 阵列至少需要 4 块磁盘(比如,两个镜像各有一对分区组合),而且需要添加一块额外的备用磁盘以防某块主要的磁盘出错。本文也会分享一些工具,在稍后用来分析 RAID 阵列的性能。

注意 RAID 10 的优缺点和其它分区方法(在不同大小的磁盘和文件系统上)的内容不在本文讨论范围内。

如何在 Linux 上构建 RAID 10 阵列

Debian 软 RAID 安装笔记 – 使用 mdadm 安装 RAID1 http://www.linuxidc.com/Linux/2013-06/86487.htm

常用 RAID 技术介绍以及示例演示(多图) http://www.linuxidc.com/Linux/2013-03/81481.htm

Linux 实现最常用的磁盘阵列 – RAID5 http://www.linuxidc.com/Linux/2013-01/77880.htm

RAID0+ 1 和 RAID5 的性能测试结果 http://www.linuxidc.com/Linux/2012-07/65567.htm

Linux 入门教程:磁盘阵列(RAID)http://www.linuxidc.com/Linux/2014-07/104444.htm

Raid 10 阵列如何工作?

如果你需要实现一种支持 I / O 密集操作(比如数据库、电子邮件或 web 服务器)的存储解决方案,RAID 10 就是你需要的。来看看为什么这么说,请看下图。

如何在 Linux 上构建 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 1 阵列,然后使用它们组成 RAID 0)。本文会讲述复杂法创建 RAID 10 阵列的过程,因为这种方法能够使用偶数或奇数个磁盘去创建阵列,而且能以单个 RAID 设备的形式被管理,而嵌套法则恰恰相反(只允许偶数个磁盘,必须以嵌套设备的形式被管理,即分开管理 RAID 1 和 RAID 0)。

假设你的机器已经安装 mdadm,并运行着相应的守护进程,细节参见这篇文章。

Debian 软 Raid 安装笔记 – 使用 mdadm 安装 raid1 http://www.linuxidc.com/Linux/2013-06/86487.htm

Linux 软阵列 用 mdadm 做 RAID 实验 http://www.linuxidc.com/Linux/2011-05/36032.htm

也假设每个磁盘上已经划分出一个主分区 sd[bcdef]1(LCTT 译注:共计五块磁盘,这里是从 sdb – sdf)。使用命令:

  1. ls l /dev | grep sd[bcdef]

查看到的输出应该如下所示:

如何在 Linux 上构建 RAID 10 阵列

然后使用下面的命令创建一个 RAID 10 阵列(LCTT 译注:使用了四块磁盘 bcde 创建):

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

如何在 Linux 上构建 RAID 10 阵列

当阵列创建完毕后(最多花费几分钟),执行命令

  1. # mdadm –detail /dev/md0

的输出应如下所示:

如何在 Linux 上构建 RAID 10 阵列

在更进一步之前需要注意以下事项。

  1. Used Dev Space表示阵列所使用的每一块磁盘的容量。

  2. Array Size表示阵列的整体大小。RAID 10 阵列的大小通过(N*C)/ M 计算,其中 N 是活跃磁盘的数目,C 是每个活跃磁盘的容量,M 是每一个镜像中磁盘的数目。在本文的情形下,这个值等于(4*8GiB)/2 = 16GiB。

  3. Layout是整个数据布局的详细信息。可能的布局数值如下所示。


  • n(默认选项):代表就近(near)拷贝。一个数据块的多个拷贝在不同磁盘里有相同的偏移量。这种布局提供和 RAID 0 阵列相似的读写性能。

如何在 Linux 上构建 RAID 10 阵列

  • o代表偏移量(offset)拷贝。块并不是在条带里面复制的,而是整个条带一起复制,但是循环会打乱,所以同一个分区中复制的块会出现在不同的磁盘。因此,一个块的后续拷贝会出现在下一个磁盘中,一个块接着一个块。为了在 RAID 10 阵列中使用这种布局,在创建阵列的命令中添加 –layout=o2 选项。

如何在 Linux 上构建 RAID 10 阵列

  • f代表远端(far)拷贝(多个拷贝在不同的磁盘中具有不同的偏移量)。这种布局提供更好的读性能但带来更差的写性能。因此,对于读远远多于写的系统来说是最好的选择。为了在 RAID 10 阵列中使用这种布局,在创建阵列的命令中添加 –layout=f2。

如何在 Linux 上构建 RAID 10 阵列

跟在布局选项 nfo后面的数字代表所需的每一个数据块的副本数目。默认值是 2,但可以是 2 到阵列中磁盘数目之间的某个值。提供足够的副本数目可以最小化单个磁盘上的 I / O 影响。

  1. Chunk Size,参考 Linux RAID wiki 的说明,是写入磁盘的最小数据单元。最佳的 chunk 大小取决于 I / O 操作的速率和相关的文件大小。对于大量的写操作,通过设置相对较大的 chunk 可以得到更低的开销,但对于主要存储小文件的阵列来说更小的 chunk 性能更好。为了给 RAID 10 指定一个 chunk 大小,在创建阵列的命令中添加–chunk=desiredchunksize

不幸的是,并没有设置一个大小就能适合全局的策略来提高性能,但可以参考下面的一些方案。

  • 文件系统:就整体而言,XFS 据说是最好的,当然 EXT4 也是不错的选择。
  • 最佳布局:远端布局能提高读性能,但会降低写性能。
  • 副本数目:更多的副本能最小化 I / O 影响,但更多的磁盘需要更大的花费。
  • 硬件:在相同的环境下,SSD 比传统(机械旋转)磁盘更能带来出性能提升

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2014-12/110318p2.htm

使用 DD 进行 RAID 性能测试

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

1. 写操作

往磁盘中写入大小为 256MB 的单个文件:

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

写入 1000 次 512 字节:

  1. # 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:

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

使用 Iozone 进行 RAID 性能测试

Iozone 是一款文件系统基准测试工具,用来测试各种磁盘 I / O 操作,包括随机读写、顺序读写和重读重写。它支持将结果导出为微软的 Excel 或 LibreOffice 的 Calc 文件。

在 CentOS/RHEL 7 上安装 Iozone

先保证 Repoforge 可用,然后输入:

  1. # yum install iozone

在 Debian 7 上安装 Iozone

  1. # aptitude install iozone3

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

  1. # iozone -Ra /dev/md0 -b /tmp/md0.xls
  • -R:往标准输出生成兼容 Excel 的报告
  • -a:以全自动模式运行所有的测试,并测试各种记录 / 文件大小。记录大小范围:4K-16M,文件大小范围:64K-512M。
  • -b /tmp/md0.xls: 把测试结果存储到一个指定的文件中

希望这篇文章对你有所帮助,如果想到任何想法或建议可能会提升 RAID 10 的性能,请讲出来。

RAID 10 阵列(又名 RAID 1+0 或先镜像后分区)通过结合 RAID 0(读写操作在多个磁盘上同时并行执行)和 RAID 1(数据被完全相同地写入到两个或更多的磁盘)两者的特点实现高性能和高容错性的磁盘 I /O。

这篇文章会指导你如何使用五块相同的 8GB 磁盘来组成一个软件 RAID 10 阵列。因为组成一个 RAID 10 阵列至少需要 4 块磁盘(比如,两个镜像各有一对分区组合),而且需要添加一块额外的备用磁盘以防某块主要的磁盘出错。本文也会分享一些工具,在稍后用来分析 RAID 阵列的性能。

注意 RAID 10 的优缺点和其它分区方法(在不同大小的磁盘和文件系统上)的内容不在本文讨论范围内。

如何在 Linux 上构建 RAID 10 阵列

Debian 软 RAID 安装笔记 – 使用 mdadm 安装 RAID1 http://www.linuxidc.com/Linux/2013-06/86487.htm

常用 RAID 技术介绍以及示例演示(多图) http://www.linuxidc.com/Linux/2013-03/81481.htm

Linux 实现最常用的磁盘阵列 – RAID5 http://www.linuxidc.com/Linux/2013-01/77880.htm

RAID0+ 1 和 RAID5 的性能测试结果 http://www.linuxidc.com/Linux/2012-07/65567.htm

Linux 入门教程:磁盘阵列(RAID)http://www.linuxidc.com/Linux/2014-07/104444.htm

Raid 10 阵列如何工作?

如果你需要实现一种支持 I / O 密集操作(比如数据库、电子邮件或 web 服务器)的存储解决方案,RAID 10 就是你需要的。来看看为什么这么说,请看下图。

如何在 Linux 上构建 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 1 阵列,然后使用它们组成 RAID 0)。本文会讲述复杂法创建 RAID 10 阵列的过程,因为这种方法能够使用偶数或奇数个磁盘去创建阵列,而且能以单个 RAID 设备的形式被管理,而嵌套法则恰恰相反(只允许偶数个磁盘,必须以嵌套设备的形式被管理,即分开管理 RAID 1 和 RAID 0)。

假设你的机器已经安装 mdadm,并运行着相应的守护进程,细节参见这篇文章。

Debian 软 Raid 安装笔记 – 使用 mdadm 安装 raid1 http://www.linuxidc.com/Linux/2013-06/86487.htm

Linux 软阵列 用 mdadm 做 RAID 实验 http://www.linuxidc.com/Linux/2011-05/36032.htm

也假设每个磁盘上已经划分出一个主分区 sd[bcdef]1(LCTT 译注:共计五块磁盘,这里是从 sdb – sdf)。使用命令:

  1. ls l /dev | grep sd[bcdef]

查看到的输出应该如下所示:

如何在 Linux 上构建 RAID 10 阵列

然后使用下面的命令创建一个 RAID 10 阵列(LCTT 译注:使用了四块磁盘 bcde 创建):

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

如何在 Linux 上构建 RAID 10 阵列

当阵列创建完毕后(最多花费几分钟),执行命令

  1. # mdadm –detail /dev/md0

的输出应如下所示:

如何在 Linux 上构建 RAID 10 阵列

在更进一步之前需要注意以下事项。

  1. Used Dev Space表示阵列所使用的每一块磁盘的容量。

  2. Array Size表示阵列的整体大小。RAID 10 阵列的大小通过(N*C)/ M 计算,其中 N 是活跃磁盘的数目,C 是每个活跃磁盘的容量,M 是每一个镜像中磁盘的数目。在本文的情形下,这个值等于(4*8GiB)/2 = 16GiB。

  3. Layout是整个数据布局的详细信息。可能的布局数值如下所示。


  • n(默认选项):代表就近(near)拷贝。一个数据块的多个拷贝在不同磁盘里有相同的偏移量。这种布局提供和 RAID 0 阵列相似的读写性能。

如何在 Linux 上构建 RAID 10 阵列

  • o代表偏移量(offset)拷贝。块并不是在条带里面复制的,而是整个条带一起复制,但是循环会打乱,所以同一个分区中复制的块会出现在不同的磁盘。因此,一个块的后续拷贝会出现在下一个磁盘中,一个块接着一个块。为了在 RAID 10 阵列中使用这种布局,在创建阵列的命令中添加 –layout=o2 选项。

如何在 Linux 上构建 RAID 10 阵列

  • f代表远端(far)拷贝(多个拷贝在不同的磁盘中具有不同的偏移量)。这种布局提供更好的读性能但带来更差的写性能。因此,对于读远远多于写的系统来说是最好的选择。为了在 RAID 10 阵列中使用这种布局,在创建阵列的命令中添加 –layout=f2。

如何在 Linux 上构建 RAID 10 阵列

跟在布局选项 nfo后面的数字代表所需的每一个数据块的副本数目。默认值是 2,但可以是 2 到阵列中磁盘数目之间的某个值。提供足够的副本数目可以最小化单个磁盘上的 I / O 影响。

  1. Chunk Size,参考 Linux RAID wiki 的说明,是写入磁盘的最小数据单元。最佳的 chunk 大小取决于 I / O 操作的速率和相关的文件大小。对于大量的写操作,通过设置相对较大的 chunk 可以得到更低的开销,但对于主要存储小文件的阵列来说更小的 chunk 性能更好。为了给 RAID 10 指定一个 chunk 大小,在创建阵列的命令中添加–chunk=desiredchunksize

不幸的是,并没有设置一个大小就能适合全局的策略来提高性能,但可以参考下面的一些方案。

  • 文件系统:就整体而言,XFS 据说是最好的,当然 EXT4 也是不错的选择。
  • 最佳布局:远端布局能提高读性能,但会降低写性能。
  • 副本数目:更多的副本能最小化 I / O 影响,但更多的磁盘需要更大的花费。
  • 硬件:在相同的环境下,SSD 比传统(机械旋转)磁盘更能带来出性能提升

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2014-12/110318p2.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计6204字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中