软件磁盘阵列(Software RAID)介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/AhhSong/article/details/77898687

简介

  • RAID,英文全称为:Redundant Arrays of Independent Disks,中文译为:独立容错式磁盘阵列,以前也叫作容错式廉价磁盘阵列,现在一般都称为磁盘阵列。这个东西是由加州大学伯克利分校提出来的,可以把多块较小的硬盘整合成一块较大的盘使用,也可用做保护数据的安全。现在磁盘阵列分为:软件RAID和硬件RAID;在应用中若是企业的要求比较高,一般都是用硬件RAID,因为软件的速度,怎么也比不上硬件的速度的,当然硬件太烂的话就算了,不过一般企业也不会用很烂的硬件的!!

    这里由于资源有限,介绍的是软RAID!!

一、RAID等级及功能

    1、RAID-0 (等级模式, stripe):效能最佳
    首先要介绍的是RAID-0,这种模式的RAID要求要使用至少两块以上的硬盘,而且硬盘的型号、容量大小什么的最好都是一致的。这种级别的RAID会把每一块磁盘分成一小块一小块的大小相同、数量相等的 chunk (大小可以自己设定,一般在4K—1M之间),当有文件要写入磁盘时,系统会依据划分好的chunk大小,依次存入各个磁盘,不过这种存储不是一个盘一个盘的去存,而是进行交错的存储,并不会将数据集中存入到一个磁盘中,具体情况如下图所示:
    这里写图片描述
    图中并没有将chunk画出来,但也能大致体现RAID-0的数据存储模式。当有文件要存入RAID-0时,文件会首先被切分成与chunk一样的大小,然后依次存入不同的磁盘中去。由于文件是被切分成小块儿存储在不同的磁盘上(不是一整份文件存在同一块磁盘上),所以每个磁盘的存储负担也就降了下来,文件的存储速度也就自然而然的得到提升了。当组成RAID-0的磁盘数量越多时,数据的存储速度也会也来越快,效率也会越来越高,存储总容量也会跟着磁盘的数量一起增长。
  • 但这样也会造成一个很明显的问题,那就是虽然磁盘的数据存储速度提升,磁盘的容量也变大了,但是数据的安全性就明显的降低了,磁盘的数量越多,数据的安全性就越低,因为RAID-0这种模式是没有数据备份的,同时同一个文件又被切分存在了不同的磁盘上,数据变得非常零散,一旦有一块盘出了问题,那么RAID-0磁盘上的所有数据都可能会被损坏,磁盘的数量与数据的安全性是成反比的(我瞎说的,具体的数学关系我也不知道,只是感觉这样好表达一些!)。
  • 在组成RAID-0时,虽然要求保证磁盘的型号、容量什么的尽量保持一致,但由于现实问题仍然可能使用的磁盘在容量什么方面不一致,当磁盘的容量不一致时,特别是容量较小的磁盘被存满时,系统会自动将数据存放入容量较大的磁盘中去,但是这样做就会造成存储效率的下降,在使用时要考虑清楚!
2、RAID-1 (映射模式, mirror):完整备份
    RAID-1对磁盘的要求与RAID-0一样,最好都是型号、大小相同的两块以上的磁盘,若是磁盘容量不同时,系统将会以容量较小的磁盘容量为基准。这样做的原因是和RAID-1的数据存储方式有关,RAID-1在存储数据时会将数据分别存储在每一个磁盘上,相当于每一块磁盘上都会有一份完全相同的数据,有多少块磁盘就会有多少份数据,数据的安全性就会得到大大的提升。RAID-1的数据存储方式如下图所示:
    这里写图片描述 如图所示,使用RAID-1在进行文件存储时,系统会自动地将文件分别存进两块磁盘中,也就是说会有一个磁盘用作冗余备份,数据的安全性会大大地得到提升。图中用的只是两块磁盘,其实还可以使用更多的磁盘组成RAID-1,但是这些磁盘所存储的数据是完全相同的;一块磁盘的损坏,并不会损坏数据的完整性,所以这种模式很适合于那些对数据安全要求非常高的场合。
    RAID-1对于数据的安全性确实得到了很好的保证,但同时也暴露了一些问题,就是数据的存储效率却大大地降低了,毕竟我们的磁盘在同一时刻是只能进行一个磁盘的读写操作的,所以组成RAID-1的磁盘数量越多,数据的存储效率也就越低,这是一个令人很头疼的问题,毕竟鱼和熊掌不可同时得焉!!
3、RAID-10 和 RAID-01
    RAID-10 和RAID-01这两种模式是根据 RAID-0 和 RAID-1 两种模式的特点优势组合而成的,在很大程度上可以克服 RAID-0 和 RAID-1 单种模式的不足之处,但是在实际使用中一般使用较多的还是 RAID-10 这种组合模式,原因就在于这种组合模式在造价、数据冗余和数据存取效率上来说能够达到一种较为理想的状态,下图为 RAID-10 这种组合模式的数据存储方式:
    这里写图片描述
    如上图所示,RAID-10模式是先组成RAID-1,再组成RAID-0的。Disk A + Disk B 组成第一组RAID 1,Disk C + Disk D 组成第二组RAID-1, 然后这两组再整合成为一组RAID-0。如果有1G 的数据要写入,则由于RAID-0 的关系, 两组RAID-1 都会写入512MB,又由于RAID-1 的关系,因此每颗磁盘就会写入512MB 而已。如此一来不论哪一组RAID-1 的磁盘损毁,由于是RAID-1 的映像资料,因此就不会有任何问题发生了!这也是目前储存设备厂商最推荐的方法!
4、RAID-5:效能与资料备份的均衡考量
    要想组成RAID-5至少需要三块磁盘!这种磁盘阵列的数据写入方式类似于RAID-0,与RAID-0不一样的地方在于每个循环写入的过程中(striping),都会在每个磁盘中写入一个数据校验的数据,这个校验的数据记录着一起写入磁盘的数据的信息,可以在其他磁盘损坏时,用于磁盘数据的恢复。具体的读写情况如下图所示:
    这里写图片描述
    如上图所示,RAID-5在进行数据存储时与RAID-0的方式是有点类似的,不同之处就在于RAID-5多了一个数据校验的部分(记录着同时存入数据的信息,可以叫做:同位校验码),这个同位校验码随着每一次磁盘存储,其存放位置都会不同,分散在各个磁盘中,可以降低数据损毁的概率;在磁盘有损坏的情况下,通过将未损坏的磁盘数据与这个数据校验的部分进行计算,便可以恢复丢失的数据,在数据安全性上要比RAID-0好很多。
    RAID-5在磁盘的读性能上与RAID-0差不了太多,但是在相同硬件环境下,在写性能上RAID-5比RAID-0可能就会差点了。因为在写的时候,RAID-5要计算同为校验码,在进行这个计算的时候,是会占用计算机的计算资源,而RAID-0由于没有同位校验码,所以也就不需要这一步的计算了,效率上会稍微比RAID-5高些(关键要看硬件环境)!读的时候没有这些操作,所以读性能差别不大!
    还有一种RAID-6的模式,与RAID-5相似,都是通过同位校验码来保证数据的安全,不同的是RAID-6是有两份同位校验码的,并且校验码的存储方式与RAID-5一样,都是分散存储的。这种模式比RAID-5好的地方在于RAID-6允许系统中有两块磁盘可以同时损坏,依然能保证数据可以被恢复(因为有两份冗余校验),而RAID-5只能同时损坏一块磁盘。
5、Spare Disk:预备磁盘的功能
    Spare Disk也可以叫做热备盘,它的作用就是在磁盘阵列中的磁盘发生损坏时,系统会自动启用热备盘,并自动重建磁盘阵列中损坏磁盘的数据,这也会是热备盘的优点。热备盘可以有一块,也可以有多块!当然若要使用热备盘,首先使用的磁盘阵列要支持热备盘的功能,同时硬件系统最好能支持热拔插,否则还要手动卸下损坏的磁盘,再手动安装新的磁盘,而且手动安装的话还要关机才能进行!
6、磁盘阵列的优点
    磁盘阵列的应用主要要考虑以下几点: 数据安全与可靠性:指的并非网络数据安全,而是当磁盘损毁时,数据是否还能够被安全的救援或使用之意; 读写效能:例如RAID 0 可以加强读写效能,让你的系统I/O 部分得以改善; 容量:可以让多颗磁盘组合起来,所以单一文件系统可以有相当大的容量。 重点是保证数据的可靠性和安全性(完整性)是RAID使用的重点考虑,毕竟在企业中数据是异常重要的,在日常生活中一般也没有使用这个的必要!
    下表为几种RAID级别的各自特点:(n为假定有n块磁盘组成)
项目 RAID-0 RAID-1 RAID-10 RAID-5 RAID-6
最少磁盘数 2 2 4 3 4
最大容错磁盘数 n-1 n/2 1 2
数据安全性 完全没有 最佳 最佳 比RAID-5好
理论写入效率 n 1 n/2
理论读出效率 n n n n
磁盘实际可使用量 n 1 n/2 n-1 n-2
一般应用 强调效率但数据重要性要求不高的环境 数据存储与备份 服务器与云系统中常用 数据存储与备份 数据存储与备份

注:因为RAID-5和 RAID-6读写都需要经过parity 的计算机制,因此读/写效能都不会刚好满足于使用的磁碟数量!
另外,根据使用的情况不同,一般推荐的磁盘阵列等级也不太一样,需要根据自己的使用环境进行选择。

二、 软件RAID与硬件RAID

  • 前面也都提到过RAID分为软件RAID和硬件RAID,以下将会介绍什么是软件RAID,什么又是硬件RAID,以及二者又有什么区别是什么。
  • 硬件磁盘阵列(hardwareRAID)是通过磁盘阵列卡来创建磁盘阵列的。在磁盘阵列卡上会有一个专门的芯片来处理RAID任务,可以大大减轻原来系统的计算压力和I/O压力,效率也会得到很好的提升;同时现在相当一部分的磁盘阵列卡都支持热拔插,所以在更换损坏磁盘时是非常方便的。但是不好的一点是磁盘阵列卡比较贵,特别是那些好一点的磁盘阵列卡就会特别贵,而且功能还不能保证特别齐全,所以在这种情况下就出现了软件RAID,来模拟硬件RAID。
  • 软降RAID是一种模拟硬件RAID的产物,是要运行在系统上面的,是要占用一定的系统资源的,特别是计算和I/O资源,所以在效率上跟硬件RAID相比还是有有相当的差距的。虽然说现在的机器计算速度都非常快了,但是对于一些要求较高的场景或企业,一般最好还是尽量不要选择软件RAID的,毕竟在总的使用成本上来说硬件RAID还是很划算的!

三、软件磁盘阵列的设定

本次实验环境使用的CentOS7的系统,使用官方原装镜像安装的系统是内置mdadm软件来实现磁盘阵列设置的。这套软件是支持partition或disk为磁盘的单位,所以我们是可以针对分区(partition)进行磁盘阵列设计的,同时mdadm软件的功能是非常强大的,它不仅能支持前面介绍的几种RAID模式,而且还能模拟出热拔插的功能,可以直接在系统正常使用时进行分区的更换。

在实际中,硬件磁盘阵列在Linux下是以一整块实际大小的磁盘存在的,所以在系统中显示的设备名称也是按照/dev/sd[a-z],而软件RAID则是由系统模拟出来的,并不是实际存在的,所以在系统中显示的设备名称就是/dev/md0,/dev/md1...。二者在设备名上就是不同的。
  • 1、软件RAID的指令介绍
    软件RAID的设置很简单,就一个指令,但是这个指令和在CentOS7中设置quota的xfs_quota指令类似,都是一条指令后面跟很多可选选项。
    指令格式:
    mdadm –create /dev/md[0-9] –auto=yes –level=[015] –chunk =NK –raid-devices=N –spare-devices=N /dev/sdx /dev/hdx…

常用选项与参数:

option 描述
–create 创建磁盘阵列(RAID)
–auto 建立后面接的软件磁盘阵列(RAID)设备,比如/dev/md0,/dev/md1…
–chunk 设置设备的chunk大小,也可以当做stripe大小,一般为64K或者512K
–raid-devices 设置组成磁盘阵列(RAID)的磁盘数量
–spare-devices 设置热备盘的数量
–level 设置磁盘阵列(RAID)的等级,一般建议0,1,5即可
–detail 显示后接磁盘阵列(RAID)的详细信息
  • 2、创建磁盘阵列:
    mdadm –create /dev/md0 –auto=yes –level=5 –chunk=256K –raid-devices=4 –spare-devices=1 /dev/sdc {1,2,3,4,5}
    这里写图片描述

    按照上图中的指令,将会创建一个设备名称为:/dev/md0,级别为:RAID-5级别,chunk大小为256K,由四块磁盘和一块热备盘组成的磁盘阵列。需要注意的地方是组成RAID的磁盘数与热备盘数必须要与后面的磁盘设备数相等才行!!

    3、查看创建RAID的信息:mdadm –detail /dev/md0
这里写图片描述

由图中可知,磁盘阵列md0由分区/dev/sdc1、/dev/sdc2、/dev/sdc3、/dev/sdc4组成,/dev/sdc5设置成了热备盘。若是创建时没有报错,但是使用该指令却无法查询时,可以先等几分钟,然后再使用此指令查询,因为创建时,系统是需要时间去进行创建的,创建慢一点的话,可能查的时候查不出来!

这里写图片描述

通过上图中的 cat /proc/mdstat 可以查看系统软件磁盘阵列的文件来查看系统中软件磁盘阵列的状态:

上图标注的第一行:指示的是md0为RAID-5,组成的磁盘为:sdc4,sdc3,sdc2,sdc1四块磁盘;每块磁盘设备名后面的中括号表示的是该磁盘在磁盘阵列中的顺讯,sdc5后面小括号里的“S”表示该设备为热备盘的意思。
第二行的意思为:此磁盘阵列拥有3142656个block,使用的是RAID-5,chunk大小为256K,使用的是algorithm 2磁盘阵列演算法。后面的[4/4]中的第一个“4”代表的是该磁盘阵列装置需要4块磁盘装置,后一个“4”表示的是该磁盘阵列中的4块磁盘都在正常运行。最后面的[UUUU]代表的是该磁盘阵列所需的四块磁盘的启动情况,“U”代表的是正常运行,若为“_”则代表的是不正常。
    4、RAID的格式化与挂载使用:

这里写图片描述

上图中进行格式化的参数含义为:

    su:表示chunk大小为256K;
    sw:表示被格式化的磁盘数量,设置为3,所以格式化了三块磁盘,所以df查询出来的大小为3GB;
    extsize:表示由上面两项计算出来的数据宽度:256K*3=768K。

四、模拟RAID错误的救援模式

这个救援模式主要用于磁盘阵列里的设备发生意外时使用的,在一些情况下,这个救援模式是支持在线使用的!
    指令格式:mdadm –manage /dev/md[0-9] [–add 设备] [–remove 设备] [–fail 设备]
option 描述
–add 将后面跟的设备添加到该RAID中
–remove 将后面跟的设备从该RAID中移除
–fail 将后面跟的设备设置成出错状态

1)将磁盘状态设置成出错状态:
这里写图片描述
2)查看:mdadm –detail /dev/md0
这里写图片描述
3)将出错的设备移除并添加新的设备:
这里写图片描述
4)查看:mdadm –detail /dev/md0
这里写图片描述

注意:以上操作都是在线完成的

五、开机自动启动RAID并自动挂载

现在新的系统发布版本大都会在开机时自动搜索/dev/md[0-9],并开启预设的功能,虽然如此,但还是建议在配置文件中对设置进行修改,否则在开机时虽然会自动开启挂载,但是系统那是随机进行的,可能会不便于我们管理。

修改的内容很简单,同时只需修改两处配置文件即可!一处是要修改/etc/fstab文件,这是设置开机自动挂载的配置文件;另一处是要修改/etc/mdadm.conf,这个是软件RAID的配置文件。
  • 1)查询md0的UUID识别码及UUID号:
    这里写图片描述
  • 2)修改/etc/fstab:(该文件中添加的是UUID号)
    这里写图片描述
  • 3)修改/etc/mdadm.conf:(该文件中添加的是UUID识别码)
    这里写图片描述
  • 4)查看:
    这里写图片描述

六、关闭软件RAID

由于本次实验是以磁盘分区进行的,所以为了避免以后我在分区时会出现麻烦,所以在这里就将之前设定的软件RAID关闭掉。
  • 以下为关闭的步骤:
    1)首先要先卸载掉该RAID设备:umount /srv/raid;
    2)将/etc/fstab文件中的有关该RAID设备的那一行删除掉;
    3)覆盖该RAID设备的元数据块及superblock:dd if=/dev/zero of=/dev/md0 bs=1M count=50;
    4)关闭该RAID设备:mdadm –stop /dev/md0;
    5)将组成该RAID设备的各磁盘的RAID相关数据:dd if=/dev/zero of=/dev/sdc{1..5} bs=1M count=10
    6)将/etc/mdadm.conf文件中关于该RAID设备的那一行数据删除或注释掉即可
    7)查看:cat /proc/mdstat

    注:上述的dd指令是为了将磁盘中所有有关该RAID设备的信息覆盖掉;若不进行覆盖,在开机时,系统还是会自动将该RAID设备建立起来,名称是随机指定的!

展开阅读全文

没有更多推荐了,返回首页