Linux磁盘阵列(RAID)概述与实战

前言

硬件磁盘阵列(Hardware RAID)

简单来说就是全部通过用硬件来实现RAID功能的就是硬RAID,比如:各种RAID卡,还有主板集成能够做的RAID都是硬RAID。 所以硬 RAID 就是用专门的RAID控制器(RAID 卡)将硬盘和电脑连接起来,RAID控制器负责将所有的RAID成员磁盘配置成一个虚拟的RAID磁盘卷。对于操作系统而言,他只能识别到由RAID控制器配置后的虚拟磁盘,而无法识别到组成RAID的各个成员盘。硬RAID全面具备了自己的RAID控制/处理与I/O处理芯片,甚至还有阵列缓冲(Array Buffer),对CPU的占用率以及整体性能中最有优势。

软件磁盘阵列(Software RAID)

反而言之,通过用操作系统来完成RAID功能的就是软RAID,比如:在Linux操作系统下,用3块硬盘做RAID5。也就是不使用RAID控制器(业界称其为RAID 协处理器―RAID Co-Processor )与I/O芯片,直接通过软件层实现的RAID,所有功能都是操作系统(OS)与CPU来完成,可想而知这是效率最低的一种RAID。 与硬RAID不同的是,软RAID的各个成员盘对于操作系统来说是可见的,但操作系统并不把各个成员盘呈现给用户,而只是把通过软件层配置好的虚拟RAID卷呈现给用户,使用户可以像使用一个普通磁盘一样使用RAID卷。

一、服务器及 RAID 磁盘阵列介绍

RAID 将一组硬盘连结成来,组成一个阵列,以避免单个硬盘损坏而带来的数据损失, 同时亦提供了比单个硬盘高的可用性及容错性。常见的组合方式有:RAID0、RAID1、RAID5、RAID6、RAID01、RAID10,下面分别介绍它们的特性。

1、RAID 0

RAID0 俗称“条带”,它将两个或多个硬盘组成一个逻辑硬盘,容量是所有硬盘之和, 因为是多个硬盘组合成一个,故可并行写操作,写入速度提高,但此方式硬盘数据没有冗余, 没有容错,一旦一个物理硬盘损坏,则所有数据均丢失。因而,RAID0 适合于对数据量大, 但安全性要求不高的场景,比如音像、视频文件的存储等

2、RAID 1

RAID1 俗称“镜像”,它最少由两个硬盘组成,且两个硬盘上存储的数据均相同,以实现数据冗余。RAID1 读操作速度有所提高,写操作理论上与单硬盘速度一样,但由于数据需要同时写入所有硬盘,实际上稍为下降。容错性是所有组合方式里最好的,只要有一块硬盘正常,则能保持正常工作。但它对硬盘容量的利用率则是最低,只有 50%,因而成本也是最高。RAID1 适合对数据安全性要求非常高的场景,比如存储数据库数据文件之类。

3、RAID 5

RAID5 最少由三个硬盘组成,它将数据分散存储于阵列中的每个硬盘,并且还伴有一个数据校验位,数据位与校验位通过算法能相互验证,当丢失其中的一位时,RAID 控制器能通过算法,利用其它两位数据将丢失的数据进行计算还原。因而 RAID5 最多能允许一个硬盘损坏,有容错性。RAID5 相对于其它的组合方式,在容错与成本方面有一个平衡,因而受到大多数使用者的欢迎。一般的磁盘阵列,最常使用的就是 RAID5 这种方式

4、RAID 6

RAID6 是在 RAID5 的基础上改良而成的,RAID6 再将数据校验位增加一位,所以允许损坏的硬盘数量也由RAID5 的一个增加到二个。由于同一阵列中两个硬盘同时损坏的概率非常少,所以,RAID6 用增加一块硬盘的代价,换来了比 RAID5 更高的数据安全性

5、RAID 1+0

RAID1+0 是先将数据进行镜像操作,然后再对数据进行分组,RAID 1 在这里就是一个冗余的备份阵列,而RAID 0 则负责数据的读写阵列。至少要四块盘,两块做 raid0,另两块做raid1,RAID 10 对存储容量的利用率和 RAID 1 一样低,只有 50%. Raid1+0 方案造成了 50%的磁盘浪费,但是它提供了 200%的速度和单磁盘损坏的数据安全性,并且当同时损坏的磁盘不在同一 Raid1 中,就能保证数据安全性、RAID 10 能提供比RAID 5 更好的性能。这种新结构的可扩充性不好,使用此方案比较昂贵

以上是当前主流的 RAID 组合方式,至于如何选择,则是结合到使用者对数据安全性、数据冗余、数据可用性、投入成本等各方面的综合衡量。

二、阵列卡介绍

阵列卡的全称叫磁盘阵列卡 是用来做 RAID 的。磁盘阵列是一种把若干硬磁盘驱动器按照一定要求组成一个整体,整个磁盘阵列由阵列控制器管理的系统。冗余磁盘阵列RAID(Redundant Array of Independent Disks)技术 1987 年由加州大学伯克利分校提出, 最初的研制目的是为了组合小的廉价磁盘来代替大的昂贵磁盘,以降低大批量数据存储的费用(当时 RAID 称为 dundant Array of Inexpensive Disks 廉价的磁盘阵列),同时也希望采用冗余信息的方式,使得磁盘失效时不会使对数据的访问受损失,从而开发出一定水平的数据保护技术。

1、阵列卡接口类型

接口类型目前主要有几种:IDE 接口、SCSI 接口、SATA 接口和 SAS 接口。

(1)IDE 接口

IDE 的英文全称为“Integrated Drive Electronics”,即“电子集成驱动器”,它的本意是指把“硬盘控制器”与“盘体”集成在一起的硬盘驱动器。把盘体与控制器集成在一起的做法减少了硬盘接口的电缆数目与长度,数据传输的可靠性得到了增强,硬盘制造起来变得更容易,因为硬盘生产厂商不需要再担心自己的硬盘是否与其它厂商生产的控制器兼容,对用户而言,硬盘安装起来也更为方便。IDE 这一接口技术从诞生至今就一直在不断发展,性能也不断的提高,其拥有的价格低廉、兼容性强的特点,为其造就了其它类型硬盘无法替代的地位。 IDE 代表着硬盘的一种类型,但在实际的应用中,人们也习惯用 IDE 来称呼最早出现 IDE 类型硬盘 ATA-1,这种类型的接口随着接口技术的发展已经被淘汰了,而其后发展分支出更多类型的硬盘接口,比如 ATA、Ultra ATA、DMA、Ultra DMA 等接口都属于 IDE 硬盘。此外, 由于 IDE 口属于并行接口,因此为了和 SATA 口硬盘相区别,IDE 口硬盘也叫PATA 口硬盘。

(2)SCSI 接口

SCSI 的英文全称为“Small Computer System Interface”(小型计算机系统接口), 是同 IDE 完全不同的接口,IDE 接口是普通 PC 的标准接口,而 SCSI 并不是专门为硬盘设计的接口,是一种广泛应用于小型机上的高速数据传输技术。SCSI 接口具有应用范围广、多任务、带宽大、CPU 占用率低,以及支持热插拔等优点,但较高的价格使得它很难如 IDE 硬盘般普及,因此 SCSI 硬盘主要应用于中、高端和高档工作站中。SCSI 硬盘和普通 IDE 硬盘相比有很多优点:接口速度快,并且由于主要用于服务器,因此硬盘本身的性能也比较高, 硬盘转速快,缓存容量大,CPU 占用率低,扩展性远优于 IDE 硬盘,并且支持热插拔。

(3)3.SATA 接口

使用 SATA(Serial ATA)口的硬盘又叫串口硬盘,是目前 PC 硬盘的主流。2001 年,由Intel、APT、Dell、IBM、希捷、迈拓这几大厂商组成的 Serial ATA 委员会正式确立了 Serial ATA 1.0 规范,2002 年,虽然串行 ATA 的相关设备还未正式上市,但 Serial ATA 委员会已抢先确立了 Serial ATA 2.0 规范。Serial ATA 采用串行连接方式,串行 ATA 总线使用嵌入式时钟信号,具备了更强的纠错能力,与以往相比其最大的区别在于能对传输指令(不仅仅是数据)进行检查,如果发现错误会自动矫正,这在很大程度上提高了数据传输的可靠性。串行接口还具有结构简单、支持热插拔的优点。 串口硬盘是一种完全不同于并行 ATA 的硬盘接口类型,由于采用串行方式传输数据而知名。相对于并行 ATA 来说,就具有非常多的优势。首先,Serial ATA 以连续串行的方式传送数据,一次只会传送 1 位数据。这样能减少 SATA 接口的针脚数目,使连接电缆数目变少, 效率也会更高。实际上,Serial ATA 仅用四支针脚就能完成所有的工作,分别用于连接电缆、连接地线、发送数据和接收数据,同时这样的架构还能降低系统能耗和减小系统复杂性。其次,Serial ATA 的起点更高、发展潜力更大,Serial ATA 1.0 定义的数据传输率为 150MB/s,这比并行 ATA(即 ATA/133)所能达到 133MB/s 的最高数据传输率还高,而在 Serial ATA 2.0 的数据传输率达到 300MB/s,SATA Revision 3.0 可达到 750 MB/s 的最高数据传输率。

(4)SAS 接口

SAS 是新一代的 SCSI 技术,和现在流行的 Serial ATA(SATA)硬盘相同,都是采用串行

技术以获得更高的传输速度,并通过缩短连结线改善内部空间等。SAS 是并行 SCSI 接口之后开发出的全新接口。此接口的设计是为了改善存储系统的效能、可用性和扩充性,提供与串行 ATA (Serial ATA,缩写为 SATA)硬盘的兼容性。 SAS 的接口技术可以向下兼容 SATA。SAS 系统的背板(Backpanel)既可以连接具有双端口、高性能的 SAS 驱动器,也可以连接高容量、低成本的 SATA 驱动器。因为 SAS 驱动器的端口与 SATA 驱动器的端口形状看上去类似,所以 SAS 驱动器和 SATA 驱动器可以同时存在于一个存储系统之中。但需要注意的是,SATA 系统并不兼容 SAS,所以 SAS 驱动器不能连接到SATA 背板上。由于 SAS 系统的兼容性,IT 人员能够运用不同接口的硬盘来满足各类应用在容量上或效能上的需求,因此在扩充存储系统时拥有更多的弹性,让存储设备发挥最大的投资效益。 串行 SCSI 是点到点的结构,可以建立磁盘到控制器的直接连接。具有以下特点: –更好的性能 点到点的技术减少了地址冲突以及菊花链连结的减速; 为每个设备提供了专用的信号通路来保证最大的带宽; 全双工方式下的数据操作保证最有效的数据吞吐量; –简便的线缆连结 更细的电缆搭配更小的连接器; –更好的扩展性 可以同时连结更多的磁盘设备。

2、阵列卡的缓存

缓存(Cache)是 RAID 卡与外部总线交换数据的场所,RAID 卡先将数据传送到缓存, 再由缓存和外边数据总线交换数据。它是 RAID 卡电路板上的一块存储芯片,与硬盘盘片相比,具有极快的存取速度,实际上就是相对低速的硬盘盘片与相对高速的外部设备(例如内存)之间的缓冲器。缓存的大小与速度是直接关系到 RAID 卡的实际传输速度的重要因素,大缓存能够大幅度地提高数据命中率从而提高 RAID 卡整体性能。多数 RAID 卡都配备了一定数量的内存作为高速缓存使用。不同的 RAID 卡出厂时配备的内存容量不同,一般为几兆到数百兆容量不等,这取决于磁盘阵列产品的应用范围。

Write Through 和 Write Back 是阵列卡缓存的两种使用方式,也称为透写和回写。Write Through 也是 RAID 阵列卡的默认模式。当选用 write through 方式时,系统的写磁盘操作并不利用阵列卡的 Cache,而是直接与磁盘进行数据的交互。而 write Back 方式则利用阵列 Cache 作为系统与磁盘间的二传手,系统先将数据交给 Cache,然后再由 Cache 将数据传给磁盘。

三、硬RAID配置实战

在启动电脑的时候按CTRL+R 进入 RAID 设置见面如下图

1、创建逻辑磁盘

按照屏幕下方的虚拟磁盘管理器提示,在VD Mgmt菜单(可以通过CTRL+P/CTRL+N切换菜单),按F2展开虚拟磁盘创建菜单

2、在虚拟磁盘创建窗口,按回车键选择”Create New VD”创建新虚拟磁盘

3、在RAID Level选项按回车,可以出现能够支持的RAID级别,RAID卡能够支持的级别有RAID0/1/5/10/50/60,根据具体配置的硬盘数量不同,这个位置可能出现的选项也会有所区别。 选择不同的级别,选项会有所差别。选择好需要配置的RAID级别(我们这里以RAID5为例),按回车确认。

4、确认RAID级别以后,按向下方向键,将光标移至Physical Disks列表中,上下移动至需要选择的硬盘位置,按空格键来选择(移除)列表中的硬盘,当选择的硬盘数量达到这个RAID级别所需的要求时,Basic Settings的VD Size中可以显示这个RAID的默认容量信息。有X标志为选中的硬盘。 选择完硬盘后按Tab键,可以将光标移至VD Size栏,VD Size可以手动设定大小,也就是说可以不用将所有的容量配置在一个虚拟磁盘中。

6、上述的配置确认完成后,按Tab键,将光标移至OK处,按回车,会出现如下的提示,如果是一个全新的阵列,建议进行初始化操作,如果配置阵列的目的是为了恢复之前的数据,则不要进行初始化。按回车确认即可继续

7、配置完成后,会返回至VD Mgmt主界面,将光标移至图中Virtual Disk 0处,按回车

8、可以看到刚才配置成功的虚拟磁盘信息,查看完成后按esc键可以返回主界面

9、在此界面,将光标移至图中Virtual Disk 0处,按F2键可以展开对此虚拟磁盘操作的菜单。 注:左边有+标志的,将光标移至此处,按向右方向键,可以展开子菜单,按向左方向键,可以关闭子菜单

10、如下图红框所示,可以对刚才配置成功的虚拟磁盘(Virtual Disk 0)进行初始化(Initialization),一致性校验(Consistency Check),删除,查看属性等操作

2、配置热备(Hot spare)

首先要已经有存在的磁盘组(阵列),我们这里举例为已经配置了两个阵列,阵列0是由0、1、2三块物理磁盘配置的RAID5,阵列1是由4、5两块物理磁盘配置的RAID1,如图:

2、按CTRL+N 切换至PD Mgmt界面,可以看到4号硬盘的状态是Ready。

3、将光标移至4号硬盘,按F2,在弹出的菜单中,选择Make Global HS,配置全局的热备盘

四、软RAID配置试验

1、管理软RAID基本命令

软RAID创建及管理命令mdadm详解
一、创建模式
选项:-C
专用选项:
-l 级别
-n 设备个数
-a {yes|no} 自动为其创建设备文件
-c 指定数据块大小(chunk)
-x 指定空闲盘(热备磁盘)个数,空闲盘(热备磁盘)能在工作盘损坏后自动顶替
-v  指定目录

查看RAID级别的两个方法
第一个方法
cat /proc/mdstat		//查看状态

第二个方法
mdadm -D 目录		//查看更详细信息

2、软RAID配置实验

(1)RAID0配置试验

需要两块磁盘

1、磁盘分区格式需要改为fd(raid格式)

[root@localhost ~]# fdisk /dev/sdb
命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p                                     ‘基本分区’
分区号 (1-4,默认 1):1
起始 扇区 (2048-2097151,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-2097151,默认为 2097151):
将使用默认值 2097151
分区 1 已设置为 Linux 类型,大小设为 1023 MiB
命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):fd
已将分区“Linux”的类型更改为“Linux raid autodetect”

2.创建RAID0

[root@localhost ~]# mdadm -C -v /dev/md0 -l0 -n2 /dev/sd[b-c]1		'//在/dev/md0目录下创建RAID 0'

[root@localhost ~]# cat /proc/mdstat		'//查看raid 第一种方法'

[root@localhost ~]# mdadm -D /dev/md0		'//查看raid 第二种方法'
3.格式化分区并挂载
[root@localhost ~]# mkfs.xfs /dev/md0
[root@localhost ~]# mkdir /raid0		'//创建raid0挂载目录'
[root@localhost ~]# mount /dev/md0 /raid0/		'//将/dev/md0 挂载到/raid0'
[root@localhost ~]# df -hT		'//查看挂载是否成功'

(2)RAID1配置

1.创建raid1 将磁盘类型换成fd 这个参照上面raid0的操作步骤

[root@localhost ~]# mdadm -C -v /dev/md1 -l1 -n2 /dev/sd[d-e]1 -x1 /dev/sdf1		'//创建将sdd1,sde1创建raid1,并将sdf1作为备用磁盘'

2.查看状态信息

[root@localhost ~]# cat /proc/mdstat		'//查看状态信息'

[root@localhost ~]# mdadm -D /dev/md1		'//查看详细信息'

3.格式化并挂载

[root@localhost ~]# mkfs.xfs /dev/md1		'//格式化分区'
[root@localhost ~]# mkdir /raid1		'//创建raid1挂载目录'
[root@localhost ~]# mount /dev/md1 /raid1		'//挂载'
[root@localhost ~]# df -hT

(3)RAID5配置

1.创建raid5

[root@localhost ~]# mdadm -C -v /dev/md5 -l5 -n3 /dev/sd[g-j]1 -x1 /dev/sdk1 '//用sdg1,sdh1,sdj1创建raid5,将sdk1作为备用磁盘'

2.查看磁盘信息

[root@localhost ~]# cat /proc/mdstat		'//查看状态信息'
[root@localhost ~]# mdadm -D /dev/md5		'//查看详细信息'

3.删除一块磁盘,看备用磁盘是否自动顶替掉坏掉的磁盘

[root@localhost ~]# mdadm -f /dev/md5 /dev/sdg1		'//删除sdg1'
mdadm: set /dev/sdg1 faulty in /dev/md5		'//提示sdg1已经损坏'
[root@localhost ~]# mdadm -D /dev/md5		'//查看详细信息'
/dev/md5:
           Version : 1.2
     Creation Time : Mon Nov  4 23:53:59 2019
        Raid Level : raid5
        Array Size : 41908224 (39.97 GiB 42.91 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 3
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Tue Nov  5 00:00:54 2019
             State : clean, degraded, recovering 
    Active Devices : 2
   Working Devices : 3
    Failed Devices : 1
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

    Rebuild Status : 22% complete

              Name : localhost.localdomain:5  (local to host localhost.localdomain)
              UUID : e473255b:68d70fc5:3e26dce3:9a98f13e
            Events : 23

    Number   Major   Minor   RaidDevice State
       3       8      161        0      spare rebuilding   /dev/sdk1		'//发现备用sdk1已经顶替上来'
       1       8      113        1      active sync   /dev/sdh1
       4       8      145        2      active sync   /dev/sdj1

       0       8       97        -      faulty   /dev/sdg1

4.格式化并挂载

[root@localhost ~]# mkdir /raid5		'//创建挂载点目录'
[root@localhost ~]# mkfs.xfs /dev/md5		'//格式化'
[root@localhost ~]# mount /dev/md5 /raid5		'//挂载'

4、RAID 1+0 实验

RAID 1+0 先做raid1再做raid0 1.连续创建两个raid1

[root@localhost ~]# mdadm -C -v /dev/md0 -l1 -n2 /dev/sd[b-c]1		'//创建第一个raid1'
[root@localhost ~]# mdadm -C -v /dev/md1 -l1 -n2 /dev/sd[d-e]1		'//创建第二个raid1'

2.查看详细信息

[root@localhost ~]# mdadm -D /dev/md0
[root@localhost ~]# mdadm -D /dev/md1

3.创建raid1+0

[root@localhost ~]# mdadm -C -v /dev/md10 -l0 -n2 /dev/md0 /dev/md1

4.查看详细信息

[root@localhost ~]# mdadm -D /dev/md10
/dev/md10:
           Version : 1.2
     Creation Time : Tue Nov  5 00:19:07 2019
        Raid Level : raid0
        Array Size : 41875456 (39.94 GiB 42.88 GB)		'//创建成功'
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Tue Nov  5 00:19:07 2019
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

        Chunk Size : 512K

Consistency Policy : none

              Name : localhost.localdomain:10  (local to host localhost.localdomain)
              UUID : 6c3209a3:71bece7a:9b3129be:05a436e0
            Events : 0

    Number   Major   Minor   RaidDevice State
       0       9        0        0      active sync   /dev/md0
       1       9        1        1      active sync   /dev/md1

https://cloud.tencent.com/developer/article/1690997

 

posted @ 2020-09-30 16:52  大数据从业者FelixZh  阅读(860)  评论(0编辑  收藏  举报