如何在Linux上设置RAID 10确保高性能

   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:将测试结果存储在某个指定的文件。

时间: 2024-09-08 12:39:23

如何在Linux上设置RAID 10确保高性能的相关文章

如何在Linux上构建 RAID 10阵列

如何在Linux上构建 RAID 10阵列 RAID 10阵列(又名RAID 1+0 或先镜像后分区)通过结合RAID 0 (读写操作在多个磁盘上同时并行执行)和RAID 1(数据被完全相同地写入到两个或更多的磁盘)两者的特点实现高性能和高容错性的磁盘I/O. 这篇文章会指导你如何使用五块相同的8GB磁盘来组成一个软件RAID 10阵列.因为组成一个RAID 10阵列至少需要4块磁盘(比如,两个镜像各有一对分区组合),而且需要添加一块额外的备用磁盘以防某块主要的磁盘出错.本文也会分享一些工具,在

在 Linux 下使用 RAID(六):设置 RAID 10 或 1 + 0(嵌套)

RAID 10 是组合 RAID 1 和 RAID 0 形成的.要设置 RAID 10,我们至少需要4个磁盘.在之前的文章中,我们已经看到了如何使用最少两个磁盘设置 RAID 1 和 RAID 0. 在这里,我们将使用最少4个磁盘组合 RAID 1 和 RAID 0 来设置 RAID 10.假设我们已经在用 RAID 10 创建的逻辑卷保存了一些数据.比如我们要保存数据 "TECMINT",它将使用以下方法将其保存在4个磁盘中. 在 Linux 中创建 Raid 10(LCTT 译注:

如何在Linux上自动设置JAVA_HOME环境变量

问题:我需要在我的 Linux 机器上编译 Java 程序.为此我已经安装了 JDK (Java Development Kit),而现在我正试图设置 JAVA_HOME 环境变量使其指向安装好的 JDK .关于在 Linux 上设置 JAVA_HOME 环境变量,最受推崇的办法是什么? 许多 Java 程序或基于 Java 的集成开发环境 (IDE)都需要设置好 JAVA_HOME 环境变量.该变量应指向 Java 开发工具包 (JDK)或Java 运行时环境 (JRE)的安装目录.JDK 不

如何在 Linux 上使用 Gmail SMTP 服务器发送邮件通知

如何在 Linux 上使用 Gmail SMTP 服务器发送邮件通知 假定你想配置一个 Linux 应用,用于从你的服务器或桌面客户端发送邮件信息.邮件信息可能是邮件简报.状态更新(如 Cachet).监控警报(如 Monit).磁盘时间(如 RAID mdadm)等等.当你要建立自己的 邮件发送服务器 传递信息时 ,你可以替代使用一个免费的公共 SMTP 服务器,从而避免遭受维护之苦. 谷歌的 Gmail 服务就是最可靠的 免费 SMTP 服务器 之一.想要从应用中发送邮件通知,你仅需在应用中

Linux有问必答:如何在Linux上安装内核头文件

Linux有问必答:如何在Linux上安装内核头文件 提问:我在安装一个设备驱动前先要安装内核头文件.怎样安装合适的内核头文件? 当你在编译一个设备驱动模块时,你需要在系统中安装内核头文件.内核头文件同样在你编译与内核直接链接的用户空间程序时需要.当你在这些情况下安装内核头文件时,你必须确保内核头文件精确地与你当前内核版本匹配(比如:3.13.0-24-generic). 如果你的内核是发行版自带的内核版本,或者使用默认的包管理器的基础仓库升级的(比如:apt-ger.aptitude或者yum

如何在 Linux 上配置点对点 VPN

如何在 Linux 上配置点对点 VPN 一个传统的 VPN(如 OpenVPN.PPTP)由一个 VPN 服务器和一个或多个连接到这台服务器的客户端组成.当任意两个 VPN 客户端彼此通信时,VPN 服务器需要中继它们之间的 VPN 数据流量.这样一个中心辐射型的 VPN 拓扑结构存在的问题是,当连接的客户端增多以后,VPN 服务器很容易成为一个性能上的瓶颈.从某种意义上来说,中心化的 VPN 服务器也同样成为一个单点故障的来源,也就是当 VPN 服务器出现故障的时候,整个 VPN 都将无法被

如何在 linux 上配置持续集成服务 - Drone

如何在 linux 上配置持续集成服务 - Drone 如果你对一次又一次的克隆.构建.测试和部署代码感到厌倦了,可以考虑一下持续集成.持续集成简称 CI,是一种像我们一样的频繁提交的代码库,构建.测试和部署的软件工程实践.CI 可以帮助我们快速的集成新代码到已有的代码库.如果这个过程是自动化进行的,那么就会提高开发的速度,因为这可以减少开发人员手工构建和测试的时间.Drone 是一个自由开源项目,用来提供一个非常棒的持续集成服务的环境,采用 Apache 2.0 协议发布.它已经集成近很多代码

如何在 Linux 上设置密码策略

用户帐号管理是系统管理员最重要的工作之一.而密码安全是系统安全中最受关注的一块.在本教程中,我将为大家介绍如何在 Linux 上设置密码策略. 假设你已经在你的 Linux 系统上使用了 PAM (Pluggable Authentication Modules,插入式验证模块),因为这些年所有的 Linux 发行版都在使用它. 准备工作 安装 PAM 的 cracklib 模块,cracklib 能提供额外的密码检查能力. Debian.Ubuntu 或 Linux Mint 系统上: $ s

如何在Mac上安装Windows 10预览版

  本月初,微软正式发布了Windows 10系统及首个预览版,供所有用户下载体验.经过我们测试,Windows 10在数年前的酷睿2笔记本上依然可以流畅运行,同时针对不同设备的版本划分更加清晰,尤其是针对传统桌面的强化,有望挽回Windows 8所流失的用户. 不过,如果你是苹果Mac用户.又想体验一下Windows 10预览版,可能会稍微麻烦一些.那么,如何在Mac上安装Windows 10预览版呢?感兴趣的朋友不妨参考一下这篇文章. 决定安装形式 在Mac上安装Windows,基本上可以通