Linux RAID磁盘阵列

文章目录

  • RAID简介
  • 什么是磁盘阵列
  • RAID的实现方式
  • 标准的RAID
    • RAID 0
    • RAID 1
    • RAID 4
    • RAID 5
    • RAID 6
    • RAID 10 或 RAID 01
  • 软 RAID 和 硬 RAID
  • RAID 实现
  • 个人用户该选那种RAID模式
  • 软RAID实现方式

RAID简介

RAID(Redundant Array of Independent Disks),翻译过来就是廉价的、具有冗余功能的磁盘阵列。其原理是通过软件或硬件将多块较小的分区组合成一个容量较大的磁盘组。这个较大的磁盘组读写性能更好,更重要的是具有冗余功能。

那什么是数据冗余呢?从字面上理解,冗余就是多余的、重复的。在磁盘阵列中,冗余是指由多块硬盘组成一个磁盘组,在这个磁盘组中,数据存储在多块硬盘的不同地方,这样即使某块硬盘出现问题,数据也不会丢失,也就是磁盘数据具有了保护功能。

也可以这样理解,RAID 用于在多个硬盘上分散存储数据,并且能够“恰当”的重复存储数据,从而保证其中某块硬盘发生故障后,不至于影响整个系统的运。RAID 将几块独立的硬盘组合在一起,形成一个逻辑上的 RAID 硬盘,这块“硬盘”在外界看来,和真实的硬盘一样,没有任何区别。

RAID 的组成可以是几块硬盘,所以我们讲解原理时使用硬盘举例,但是不同的分区也可以组成 RAID

什么是磁盘阵列

RAID 全称是独立磁盘冗余阵列(Redundant Array of Independent Disks),基本思想就是把多个磁盘组合起来,组合一个磁盘阵列组,使得性能大幅提高。

RAID 分为几个不同的等级,各个不同的等级均在数据可靠性及读写性能做了不同的权衡。实际工作中根据自己的业务需求选择不同的 RAID 方案。

RAID的实现方式

1、外接式磁盘阵列:通过扩展卡提供适配能力内接的RAID
2、内接式RAID:主板集成 RAID 控制器安装 OS 前在 BIOS 里配置软件 RAID
3、软件RAID:通过 OS 实现

标准的RAID

RAID 0

RAID 0 也叫 stripe 或 striping(条带化),是 RAID 级别中存储性能最好的一个。
RAID 0 最好由相同容量的两块或两块以上的硬盘组成。如果组成 RAID 0 的两块硬盘大小不一致,则会影响 RAID 0 的性能。

这种模式下会先把硬盘分隔出大小相等的区块,当有数据需要写入磁盘时,会把数据也切割成相同大小的区块,然后分别写入各块磁盘。这就相当于把一个文件分成几个部分同时向不同的硬盘中写入,数据的读写速度当然就会非常快。

从理论上讲,由几块硬盘组成 RAID 0 ,比如由 3 块硬盘组成 RAID 0,数据的写入速度就是同样的数据向一块硬盘中写入速度的 3 倍。我们看一张 RAID 0 的示意图,如图 1 所示。
Linux RAID磁盘阵列_第1张图片
这张示意图。我们准备了 3 块硬盘组成了 RAID 0 ,每块硬盘都划分了相等的区块。当有数据写入 RAID 0 时,首先把数据按照区块大小进行分割,然后再把数据一次写入不同的硬盘。每块硬盘负责的数据写入量都是整体数据的 1/3 ,当然写入时间也只有原始时间的 1/3 。所以,从理论上讲,由几块硬盘组成 RAID 0,数据的写入速度就是数据只写入一块硬盘速度的几倍。

RAID 0 的优点如下:
1、通过把多块硬盘合并成一块大的逻辑硬盘,实现了数据跨硬盘存储。
2、通过数据分割成等大小的区块,分别存入不同的硬盘,加快了数据的读写速度。数据的读写性能是几种 RAID 中最好的。
3、多块硬盘合并成 RAID 0 ,几块小硬盘组成了更大容量的硬盘,而且没有容量损失。RAID 0 的总容量就是几块硬盘的容量之和

RAID 0 有一个明显的缺点,那就是没有数据冗余功能,RAID 0 中的任何一块硬盘损坏,RAID 0 中所有的数据都将丢失。也就是说,由几块硬盘组成 RAID 0,数据的损毁概率就是指写入一块硬盘的几倍。

我们刚刚说了,组成 RAID 0 的硬盘大小最好都是一样的,那如果我只有两块不一样大小的硬盘,难道就不能组成 RAID 0 吗?
答案是可以的,假设有两块磁盘,一块大小是 100GB ,另一块大小是 200GB 。由这两块硬盘组成 RAID 0,那么当最初的 200 G 数据写入时,是分别存放在两个硬盘当中的;但是当数据大于 200GB 之后,第一块硬盘就写满了,以后的数据就只能写入第二块硬盘中,读写性能也就随之下降了。

一般不建议企业用户使用 RAID 0 ,因为数据损毁的概率更高。如果对数据的读写性能要求非常高,但对数据安全要求不高,RAID 0 就非常合适了。

RAID 1

RAID 1 也叫 mirror 或 mirroring (镜像卷),由两块硬盘组成。两块硬盘的大小最好一致,否则总容量以容量最小的那块硬盘为主。
RAID 1 就具备了数据冗余功能,因为这种模式是把同一份数据同时写入两块硬盘。

比如有两块硬盘,组成了 RAID 1 ,当有效数据写入时,相同的数据既写入了硬盘 1 ,也写入了硬盘 2。这样相当于给数据做了备份,所以任何一块硬盘损坏,数据都可以在另一块硬盘中找回。

RAID 1 的示意图如图 2 所示
Linux RAID磁盘阵列_第2张图片
RAID 1 具有了数据冗余功能,但是硬盘的容量却减少了 50% ,因为两块硬盘当中保存的数据是一样的,所以两块硬盘实际上只保存了一块硬盘那么多的数据,这就是我们把 RAID 1 称作为镜像卷到的原因。

RAID 1 的优点如下:
1、具备了数据冗余功能,任何一块硬盘出现故障,数据都不会丢失。
2、数据的读取性能虽然不如 RAID 0 ,但是比单一硬盘好,因为数据有两份备份在不同的硬盘上,当多个进程读取同一数据室,RAID 会自动分配读取进程。

RAID 1 的缺点也同样明显:
1、RAID 1 的容量只有两块硬盘容量的 50%,因为每块硬盘中保存的数据都一样
2.数据写入性能较差,因为相同的数据会写入两块硬盘中,相当于写入数据的总容量变大了。虽然 CPU 的速度足够快,但是负责数据写入的芯片只有一个。

RAID 4

RAID 4 是将数据条带化并分布于不同的磁盘上,但条块单位为块或记录。RAID 4 使用一块磁盘作为奇偶校验盘,每次写操作都需要访问奇偶校验盘,这是奇偶校验盘会成为写操作的瓶颈,因此 RAID 4 在商业中也很少使用
Linux RAID磁盘阵列_第3张图片

RAID 5

RAID 5 最少需要由 3 块硬盘组成,当然硬盘的容量也应当一致。当组成 RAID 5 时,同样需要把硬盘分割成大小相同的区块。当有数据写入时,数据也被划分成等大小的区块,然后循环向 RAID 5 中写入。
每次循坏写入数据的过程中,在其中一块硬盘中加入一个奇偶偶校验值(parity),这个奇偶校验值的内容是这次循环写入时其它硬盘数据的备份,当有一块硬盘损坏时,采用这个奇偶校验值进行数据恢复。
通过示意图来看看 RAID 5 的存储过程,如图 4 所示
Linux RAID磁盘阵列_第4张图片
在这张示意图中,我们使用三块硬盘组成了 RAID 5 。当有数据循环写入时,每次循坏都会写入一个奇偶校验值(parity),并且每次奇偶校验值都会写入不同的硬盘。这个奇偶校验值就是其它两块硬盘中的数据经过换算之后产生的。因为每次奇偶校验值都会写入不同的硬盘,所以任何一块硬盘损坏之后,都可以依赖其它两块硬盘中保存的数据恢复这块损坏的硬盘中的数据。

需要注意的是,每次数据循环写入时,都会有一块硬盘用来保存奇偶校验值,所以在 RAID 5 中可以使用的总容量是硬盘总数减去一块的容量之和。

比如,在这张示意图中,由 3 块硬盘组成 RAID 5,但是真正可用的容量是两块硬盘的容量之和,也就是说,越多的硬盘组成 RAID 5 ,损失的容量占比越小,因为不管由多少块硬盘组成 RAID 5,奇偶校验值加起来只占用一块硬盘。而且还要注意,RAID 5 不管由几块硬盘组成的,只有损坏一块硬盘的情况才能恢复数据,因为奇偶校验值加起来占用了一块硬盘,如果损坏的硬盘超过一块,那么数据就不能再恢复了。

RAID 5 的优点如下:
1、因为奇偶校验值的存在,RAID 5 具有了数据冗余功能
2、硬盘容量损失比 RAID 1 小,而且组成 RAID 5 的硬盘数量越多,容量损失占比越小。
3、RAID 5 的数据读写性能要比 RAID 1 更好,但是在数据写入性能上比 RAID 0 差。

RAID 5 的缺点如下:
1、不管由多少块硬盘组成 RAID 5,只支持一块硬盘损坏之后的数据恢复
2、RAID 5 的实际容量是组成 RAID 5的硬盘总数减去一块的容量之和,也就是一块硬盘用来保存奇偶校验值,但不能保存数据。

从总体上来说,RAID 5 更像 RAID 0 和 RAID 1 的折中,性能比 RAID 1 好,但是不如 RAID 0 ;数据冗余比 RAID 0 好,而且不像 RAID 1 那样浪费了 50% 的硬盘容量。

RAID 6

与 RAID 5 相比,RAID 6 增加了第二个独立的奇偶校验信息块。两个独立的奇偶系统使用不同的算法,数据的可靠性非常高,即使两块磁盘同时失效也不会影响数据的使用。但 RAID 6 需要分配给奇偶校验信息更大的磁盘空间,相对于 RAID 5有更大的“写损失”,因此“写性能”非常差。较差的性能和复杂的实施方式使得 RAID 6 很少得到实际应用

RAID 10 或 RAID 01

我们发现,RAID 0 虽然数据读写性能非常好,但是没有数据冗余功能;而 RAID 1 虽然具有了数据冗余功能,但是数据写入速度实在是太慢了(尤其是软 RAID)。

把么,我们能不能把 RAID 0 和 RAID 1 组合起来使用呢? 当然可以,这样我们就即拥有了 RAID 0 的性能,又拥有了 RAID 1 的数据冗余功能。

我们先用两块硬盘组成 RAID 1 ,再用 两块硬盘 组成另一个 RAID 1,最后把这两个 RAID 1 组成 RAID 0 ,这种 RAID 方法称作 RAID 10 ,那先组成 RAID 0 ,再组成 RAID 1 的方法我们称作为 RAID 01。
我们通过示意图 3 来看看 RAID 10。
Linux RAID磁盘阵列_第5张图片
我们把硬盘 1 和 硬盘 2 组成了第一个 RAID 1 ,把硬盘 3 和硬盘 4 组成了第二个 RAID 1,这两个 RAID 1 组成了 RAID 0。因为先组成 RAID 1,再组成 RAID 0,所以这个 RAID 是 RAID 10。
当有数据写入时,首先写入的是 RAID 0(RAID 0 后组成,所以数据先写入),所以数据 1 和 数据 3 写入了第一个 RAID 1,而数据 2 和 数据 4 写入了 第二个 RAID 1。当数据 1 和数据 3 写入第一个 RAID 1时,因为写入的是 RAID 1 ,所以在硬盘 1 和硬盘 2 中各写入了一份。数据 2 和数据 4 也一样。
这样的组成方式,既有了 RAID 0 的性能有点,也有了 RAID 1 的数据冗余优点。但是大家要注意,虽然我们有了 4 块磁盘,但是由于 RAID 1 的缺点,所以真正的容量只有 4 块硬盘的 50%,另外一半都是用来备份的。

软 RAID 和 硬 RAID

我们想要在服务器上实现 RAID ,可以采用磁盘阵列卡(RAID 卡)来组成 RAID,也就是硬 RAID。RAID 卡上有专门的芯片负责 RAID 任务,因此性能要好得多,而且不占用系统性能,缺点是 RAID 卡比较昂贵。

如果我们既不想花钱又想使用 RAID,那就只能使用软 RAID 了。然 RAID 是通过软件实现 RAID 功能,没有多余的费用,但是更加消耗服务器系统性能,而数据的写入速度比硬 RAID 慢。

RAID 实现

磁盘阵列有两种方式可以实现,那就是“软件阵列”和“硬件阵列”

软件阵列:是指通过网络操作系统自身提供的磁盘管理功能将连接的普通 SCSI 卡上的多块硬盘配置成逻辑硬盘,组成阵列。软件阵列可以提供数据冗余功能,但是磁盘子系统的性能会有所降低,有的降低幅度还比较大,达 30% 左右。

硬件阵列:是使用专门的磁盘阵列卡来实现的。硬件阵列能够提供在线扩容、动态修改阵列级别、自动数据恢复、驱动器漫游、超高速缓冲等功能。它能提供性能、数据保护、可靠性、可用性和可管理性的解决方案。阵列卡专用的处理单元来进行操作,它的性能要远远高于常规非阵列硬盘,并且更安全更稳定。

磁盘阵列其实也分为软阵列(Software Raid)和硬阵列(Hardware Raid)两种,软阵列即通过软件程序并由计算机的 CPU 提供运行能力缩所成,由于软件程序不是一个完整的系统故只能提供最基本的 RAID 容错功能,其它如 热备用硬盘设置,远程管理等功能均一一欠奉,硬阵列是由独立操作的硬件提供整个磁盘阵列的控制和计算功能,不依靠系统的 CPU 资源。

个人用户该选那种RAID模式

首先要分析清楚,我们需要存储的文件有什么样的属性。这其中需要大量存储的和占用存储量大的文件是两回事儿。
从使用角度粗略分,个人需要存储的文件大致有文本文件、照片录像、影音文件、应用程序等。

1、文本文件:大量长期存放,阶段性更新,但其占用空间小,安全性要求个别较高,大部分一般;

2、照片录像:大量长期存放,永久性记录,占用空间大,安全性要求高,一旦损失很难弥补;

3、影音文件:一部分大量长期存放,一部分大量短期存放,阶段性更新,占用空间大,安全性要求一般,即便损失了,也可以再从网络上下载恢复;

4、应用程序:这其中包括一些软件和硬件的驱动等,对于软件,目前基本可以从网络上获得,驱动程序有时需要预先备份,安装设备时随时可用,属于量少但要长期存放的,阶段性更新,安全性要求一般。

软RAID实现方式

centos 6 上的软 RAID 的实现 结合内核中的 md(multi devices)模块

mdadm(模式化的工具)命令
命令的语法格式:mdadm [mode]  [options] 

支持的 RAID 级别:LINEAR,RAID0,RAID1,RAID4,RAID5,RAID6,RAID10;

模式:
	创建:-C
	装配:-A
	监控:-F
	管理:-f,-r,-a

	-C:创建模式
		-n #:使用#个块设备来创建此RAID
		-l #:指明要创建的RAID级别
		-a {yes | no}:是否自动创建目标RAID设备的设备文件
		-c CHUNK_SIZE:指明块大小
		-x #:指明空闲盘的个数

	-D:显示RAID的详细信息
		mdadm -D /dev/md#
	
	管理模式:
		-f:标记指定磁盘为损坏
		-a:添加磁盘
		-r:移除磁盘
	观察md的状态:
		cat /prco/mdstat
	停止md设备:
		mdadm -S /dev/md#

你可能感兴趣的:(Linux)