最近小编买入一台阿里云大数据型服务器,拥有4块5T的硬盘,但是本地盘存在数据安全的问题,所以需要做raid,所以最近也是每天研究linux中如何组建raid的文章。

原文: http://xmodulo.com/setup-raid10-linux.html 作者: Gabriel Cánepa

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

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

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

Raid 10 阵列如何工作?

如果你需要实现一种支持I/O密集操作(比如数据库、电子邮件或web服务器)的存储解决方案,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,并运行着相应的守护进程。也假设每个磁盘上已经划分出一个主分区sd[bcdef]1 (LCTT 译注:共计五块磁盘,这里是从sdb - sdf)。使用命令:

ls -l /dev | grep sd[bcdef]

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

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

 # 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是每一个镜像中磁盘的数目。在本文的情形下,这个值等于(4*8GiB)/2 = 16GiB。

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


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

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

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

跟在布局选项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比传统(机械旋转)磁盘更能带来出性能提升

使用DD进行RAID性能测试

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

1. 写操作

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

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

写入1000次512字节:

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

在CentOS/RHEL 7上安装Iozone

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

# yum install iozone

在Debian 7上安装Iozone

# aptitude install iozone3

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

# iozone -Ra /dev/md0 -b /tmp/md0.xls
  • -R:往标准输出生成兼容Excel的报告

  • -a:以全自动模式运行所有的测试,并测试各种记录/文件大小。记录大小范围:4K-16M,文件大小范围:64K-512M。

  • -b /tmp/md0.xls: 把测试结果存储到一个指定的文件中

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

转载于:https://blog.51cto.com/dnuser/2169098

如何在Linux上构建 RAID 10阵列相关推荐

  1. linux so 发布,如何在Linux上构建发布包含.so动态库的snap安装包

    Linux上要发布源码包比较容易,只要做个压缩包.tar.gz就可以.但是如果要做一个包含库和可执行文件的安装包,就比较麻烦.Linux的版本很多,需要做不同格式的安装包,比如.deb和.rpm,同时 ...

  2. linux上安装osg_如何在 Linux 上安装并启用 Flatpak 支持? | Linux 中国

    Flatpak 提供了一种通用的包封装格式,可以在任何 Linux 发行版中使用.它提供了一个沙箱(隔离的)环境来运行应用程序,不会影响其他应用程序和发行版核心软件包.-- Magesh Maruth ...

  3. linux怎么打开pak文件怎么打开,如何在 Linux 上安装并启用 Flatpak 支持?

    目前,我们都在使用 Linux 发行版的官方软件包管理器来安装所需的软件包. 在 Linux 中,它做得很好,没有任何问题.(它不打折扣地很好的完成了它应该做的工作) 但在一些方面它也有一些限制,所以 ...

  4. linux 赚钱游戏服务器,在Linux上构建游戏服务器所需的一切

    与多个玩家玩游戏一直以来都比较有趣.它始于Atari 2600和街机机柜.当互联网时代到来时,游戏服务器使远程多人游戏成为现实. 使用当前一代的PC游戏,您可以连接到服务器或自己运行.Minecraf ...

  5. linux程序测试工具gprof,gprof-如何在Linux上分析多线程C ++应用程序?

    gprof-如何在Linux上分析多线程C ++应用程序? 我曾经使用gprof进行所有Linux分析. 但是,对于我的多线程应用程序,它的输出似乎不一致. 现在,我将其挖掘出来: [HTTP://S ...

  6. linux中fstab文件的作用,如何在Linux上写入fstab文件 | MOS86

    在Linux计算机上添加新的硬盘驱动器或固态驱动器? 您需要编辑fstab文件. 很多人觉得这个主意很吓人. 是的,至关重要的是您要正确,但掌握了正确的知识,这确实并不困难. 我们将引导您完成编辑fs ...

  7. linux下安装sbt_如何在Linux上安装SBT

    linux下安装sbt 介绍 (Introduction) Hi! I am Sanjula, and in this guide I hope to teach you how to install ...

  8. 如何在Linux上找到包含特定文本的所有文件?

    我正在尝试找到一种方法来扫描整个Linux系统,查找包含特定文本字符串的所有文件. 只是为了澄清,我在文件中寻找文本,而不是文件名. 当我查找如何做到这一点时,我遇到了两次这个解决方案: find / ...

  9. 如何在 Linux 上安装服务器管理软件 Cockpit

    如何在 Linux 上安装服务器管理软件 Cockpit Cockpit 是一个自由开源的服务器管理软件,它使得我们可以通过它好看的 web 前端界面轻松地管理我们的 GNU/Linux 服务器.Co ...

  10. linux 当前活动用户,如何在Linux上自动记录所有用户的终端会话活动

    如何在Linux上自动记录所有用户的终端会话活动 不久前,我们写了一篇文章,使用script命令记录Linux终端会话活动. 今天,我们还将讨论相同的主题. 但是,本教程允许您自动记录所有用户的终端会 ...

最新文章

  1. 每日一题:leetcode1006.笨阶乘
  2. 收款神器!解读聚合收款码背后的原理,你都知道吗?
  3. favicon.ico是什么?
  4. Android学习——android命名规范
  5. php语言输出九九乘法表_PHP 输出九九乘法表
  6. 产品读书《创新者的窘境》
  7. matlab股票数据画图,matlab股票数据接口(一)
  8. Objective-C 信息传递模型 [ ] 发送消息
  9. Excel功能逻辑结构图
  10. 三星c9000刷android7.0,三星C9 Pro C9000官方原厂rom线刷包刷机包C9000ZCU1CRI1
  11. 使用它给 ​xxl-job 添加任务,太爽了
  12. Gossip in Cassandra
  13. 如何搭建一个自己的微信公众号
  14. 10827 - Maximum sum on a torus
  15. 3P(PS、PR、PDF编辑器Acrobat)中的基基本操作(一)
  16. 英语学习-综合英语(1)
  17. vr技术在计算机教学中的应用,VR/AR技术在中小学基础教学中的应用分析
  18. 【机器学习之向量求导】分子布局 分母布局
  19. 看完电视剧“天道“的第一次感想记录
  20. CGB2111-Day18

热门文章

  1. Atitit ati licenseService    设计原理
  2. Atitit.软件仪表盘(4)--db数据库子系统-监测
  3. paip.输入法编程---词频顺序order by py
  4. paip.SVN无法提交--提示冲突的解决
  5. paip.java-asp-php-.net互相调用方法大总结
  6. “超级买手”阿里:一年投资65笔,涉及金额高达5400亿
  7. 基金01、03文件,92、94文件、52、53、59等文件是指什么
  8. Julia :HDF5数据文件读写与更新
  9. 进入“后红海”时代,大数据体系到底是什么?
  10. OpenStack Queens版本Security项目介绍