一、概述
我们再IT的运维及实践中,最常遇到的数据保护机制就是RAID了吧,RAID是(Redundant Arrays of Independent Disks,RAID独立磁盘冗余阵列)的简称,主要分为标准 RAID(RAID 0 ~ RAID 6)、混合 RAID(JBOD、RAID 7、RAID 10/0、RAID 50 等),常用的RAID技术有RAID0、RAID1、RAID10、RAID5、RAID6,另外还有RAID2、RAID3、RAID4、RAID7、RAID53、RAID 5E、RAID 5EE等。基于技术的实现能力,又分为软件磁盘阵列(软RAID)和硬件磁盘阵列(硬 RAID) 以及 硬件辅助磁盘阵列(半软、半硬)三种类型。
软件RAID:
使用基于主机的软件提供RAID 功能,是在操作系统级上实现的,与硬件RAID相比,软件RAID具有成本低廉和简单直观的优点。但是,软件RAID有以下不足。比如常见的一种方式:在Linux操作系统下,借助域软件用3块硬盘实现RAID5,而不使用RAID控制器与I/O芯片,仅直接通过软件层实现的RAID,所有功能都是操作系统(OS)与CPU来完成,这种额外需要cpu来完成RAID数据逻辑运算必然会拉低CPU性能。与硬RAID不同的是,软RAID的各个成员盘对于操作系统来说是可见的,但操作系统并不把各个成员盘呈现给用户,而只是把通过软件层配置好的虚拟RAID卷呈现给用户,使用户可以像使用一个普通磁盘一样使用RAID卷。软RAID实现具有如下主要特点:
(1)性能:软件RAID 会影响系统整体性能。这是因为软件RAID 需要CPU 来执行RAID 计算。
(2)功能:软件RAID 支持有限的RAID 级别。
(3)兼容性:软件RAID 与主机操作系统绑定,因此,需要对软件RAID或操作系统升级进行兼容性验证,只有当RAID 软件和操作系统兼容时,才能对其进行升级,这会降低数据处理环境的灵活性。
硬件RAID:
包括基于主机的硬件RAID和**基于阵列(RAID卡上的主控芯片)**的硬件RAID。基于主机的硬件RAID通常是将专用RAID控制器安装在主机上,并且所有磁盘驱动器都与主机相连,有的制造商还将RAID控制器 集成到主板上。如主板上的南桥芯片(又称之为输出/输入控制器中心(Input/Output Controller Hub,ICH),它负责I/O总线之间的通信,如PCI总线、USB、LAN、ATA、SATA、音频控制器、键盘控制器、实时时钟控制器、高级电源管理等,这些技术相对来说比较稳定,所以不同芯片组中南桥芯片可能是一样的,不一样的只是北桥芯片。)上也可实现RAID功能,由于南桥中的芯片不能靠CPU来完成他们的功能,所以这些芯片完全靠电路逻辑来自己运算,尽管速度很快,但是功能相对插卡式的RAID卡要弱。这种基于主机的硬件RAID 控制器在包含大量主机的数据中心环境下却不是高效的解决方案。而基于阵列的硬件RAID是使用 外部硬件RAID控制器,它充当主机与磁盘之间的接口,将存储卷呈现给主机,主机将这些卷作为物理驱动器进行管理。简单来说就是全部通过用硬件来实现RAID功能的就是硬RAID,需要依赖各种RAID卡,或主板集成的RAID功能,这都是硬RAID。RAID控制器负责将所有的RAID成员磁盘配置成一个虚拟的RAID磁盘卷。对于操作系统而言,他只能识别到由RAID控制器配置后的虚拟磁盘,而无法识别到组成RAID的各个成员盘;硬RAID全面具备了自己的RAID控制/处理与I/O处理芯片,甚至还有阵列缓冲(Array Buffer),对CPU的占用率以及整体性能中最有优势。硬件RAID控制器具有如下主要特点:
(1)管理与控制磁盘聚合;
(2)转换逻辑磁盘和物理磁盘之间的I/O 请求;首PCI总线带宽限制;
(3)在磁盘出故障时重新生成数据。
硬件辅助磁盘阵列(Hardware-Assisted RAID):
与硬 RAID 和 全软 RAID 相比,半软 RAID需要借助一张RAID卡,以及厂商所提供的驱动程序来实现。相比硬RAID,半软RAID 缺乏自己的I/O 处理芯片,所以这方面的工作仍要由CPU 与驱动程序来完成。而且,半软RAID 所采用的RAID 控制/处理芯片的能力一般都比较弱,不能支持高的RAID 等级。但这种RAID较易迁移到其他电脑。
二、RAID分类及原理
参看:RAID技术及应用总结。
上图中,n 代表硬盘总数。以下简述常用的几种RAID:
1)RAID0+1,RAID1+0(大多默认都将0放最后,即先镜像,后条带):它是综合raid1和raid0,方法是先用两个磁盘组成raid0,再用两块组成raid0,最后把两raid0组成一个raid1;
它具有raid0的优点,性能提升,也有raid1的优点,可以备份,还有raid1的缺点,容量会少一半来备份;
当RAID 10有一个硬盘受损,其余硬盘会继续运作。RAID 01只要有一个硬盘受损,同组RAID 0的所有硬盘都会停止运作,只剩下其他组的硬盘运作,可靠性较低。如果以六个硬盘建RAID 01,镜像再用三个建RAID 0,那么坏一个硬盘便会有三个硬盘离线。因此,RAID 10远较RAID 01常用,零售主板绝大部分支持RAID 0/1/5/10,但不支持RAID 01。
RAID 10是先分割数据再镜像,再将所有硬盘分为两组,视为以RAID 1作为最低组合,然后将每组RAID 1视为一个“硬盘”组合为RAID 0运作。每一组写一份数据,示意如下:
RAID01是先将数据分别写入两个磁盘组其中一块盘里,然后各组再对写入的数据做镜像处理。如下所示:
2)RAID5:性能与数据备份的均衡考虑。Raid5至少需要三块以上的磁盘才可以组成这种类型的磁盘阵列;他的写入方式与raid优点类似,不过每次循环写入的过程中,在每块吸盘中加入一个同位检查码,这个数据会记录其他磁盘的备份数据。他会使整体的磁盘数量减少一块。如果磁盘损毁的数量大于等于两块时,整组raid5的数据就全毁了。
他的读取性能还不错,写入性能不是很好,因为他每次写入都要计算同位检查码的关系。
RAID50:
它是RAID 5与RAID 0的组合,先作RAID 5,再作RAID 0,也就是对多组RAID 5彼此构成Stripe访问。由于RAID 50是以RAID 5为基础,而RAID 5至少需要3颗硬盘,因此要以多组RAID 5构成RAID 50,至少需要6颗硬盘。以RAID 50最小的6颗硬盘配置为例,先把6颗硬盘分为2组,每组3颗构成RAID 5,如此就得到两组RAID 5,然后再把两组RAID 5构成RAID 0。
RAID 50在底层的任一组或多组RAID 5中出现1颗硬盘损坏时,仍能维持运作,不过如果任一组RAID 5中出现2颗或2颗以上硬盘损毁,整组RAID 50就会失效。
RAID 50由于在上层把多组RAID 5构成Stripe,性能比起单纯的RAID 5高,容量利用率比RAID5要低。比如同样使用9颗硬盘,由各3颗RAID 5再组成RAID 0的RAID 50,每组RAID 5浪费一颗硬盘,利用率为(1-3/9),RAID 5则为(1-1/9)。
3)Raid6是容许两块磁盘同时损毁的。另外Spare(备用)磁盘起到预备磁盘的作用,当有磁盘坏了的话,他会被主动拉进磁盘阵列中并将坏掉的磁盘移除,;立即重建数据。
RAID 60:
它是RAID 6与RAID 0的组合:先作RAID 6,再作RAID 0。即对两组以上的RAID 6作Stripe访问。RAID 6至少需具备4颗硬盘,所以RAID 60的最小需求是8颗硬盘。
由于底层是以RAID 6组成,所以RAID 60可以容许任一组RAID 6中损毁最多2颗硬盘,而系统仍能维持运作;不过只要底层任一组RAID 6中损毁3颗硬盘,整组RAID 60就会失效,当然这种情况的概率相当低。
比起单纯的RAID 6,RAID 60的上层透过结合多组RAID 6构成Stripe访问,因此性能较高。不过使用门槛高,而且容量利用率低是较大的问题。
三、软 RAID 和硬 RAID的对比
1)通过上文,我们实际已了解RAID需要完成通过软件层面来实现,这样RAID的一些存储机制算法的负载就会依赖OS,即消耗CPU,导致发热等问题,这样对于CPU性能要求高的场合就会遇到瓶颈,限制RAID的性能且不够稳定;若主板损坏,可能难以购买同款主板重建RAID。另外,软RAID不能保护系统盘;即系统分区不能参与实现RAID。有些操作系统,RAID的配置信息存在系统信息中,而不是存在硬盘上;当系统崩溃,需重新安装时,RAID的信息也会丢失。尤其是软件RAID5是CPU的增强方式,会导致30%-40%I/O功能的降低,所以不建议使用软件 RAID在增强的处理器服务器中。
2)对于硬RAID,它有独立的控制硬件设备,厂商产品支持的功能也就更多,支持更多RAID级别,RAID性能也更好。设备建设成本较高;
3)软RAID常用实现软件:
1>mdadm
它是multiple devices admin 的简称,它是Linux下的一款标准的软件RAID 管理工具。
eg:mdadm –create /dev/md0 –level=0 –raid-devices=5 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf
、
#其中: /dev/md0 为自定义的盘符 , –level或者-l 为RAID 级别, –raid-devices=5 为设备个数, 后面为对应的盘号
rpm -qa|grep mdadm #验证
yum install mdam -y #安装
#比如拿/dev/sdb 和/dev/sdc创建RAID0
fdisk /dev/sdb //对sdb 进行分区,输入"n" 新建分区,修改分区类型为选择"fd Linux raid auto",即选择fd,后再输入"p" 验证分区情况,确认后输入"w" 保存分区;同样方法对/dev/sdc 进行分区操作
partprobe #使用partprobe 命令同步分区情况mdadm -C /dev/md0 -ayes -l0 -n2 /dev/sd[b,c]1 #创建RAID0,其中/dev/md0 阵列的设备名称;/dev/sd{b,c}1 参与创建阵列的磁盘名称;
mdadm -C /dev/md1 -ayes -l1 -n2 /dev/sd[d,e]1 #若参见raid1执行cat /proc/mdstat #查看raid0 状态验证
mdadm -D /dev/md0
#创建RAID 配置文件,RAID 的配置文件为/etc/mdadm.conf,默认是不存在的,需要手工创建
echo DEVICE /dev/sd{b,c}1 >> /etc/mdadm.conf
mdadm –Ds >> /etc/mdadm.conf
cat /etc/mdadm.conf #修改文件格式,内容如下所示DEVICE /dev/sdb1 /dev/sdc1ARRAY /dev/md0 level=raid0 num-devices=2 UUID=5160ea40:cb2b44f1:c650d2ef:0db09fd0mkfs.ext4 /dev/md0 #格式化磁盘阵列#拿dev/sdf, /dev/sdg, /dev/sdh, /dev/sdi 这四块硬盘来做RAID5,三块做为活动盘,另一块做为热备盘
mdadm -C /dev/md5 -ayes -l5 –n3 -x1 /dev/sd[f,g,h,i]1 #"-x1" 或"--spare-devices=1" 表示当前阵列中热备盘只有一块,若有多块热备盘,则将"--spare-devices" 的值设置为相应的数目cat /proc/mdstat #验证
mdadm -D /dev/md5#扩容文件系统:RAID 构建完毕后,阵列容量增加,但是文件系统还没有增加,这时需要对文件系统进行扩容。
df –TH #扩容前确认
resize2fs /dev/md5
df –TH #验证
命令参数:
-C –create 创建阵列;
-a –auto 同意创建设备,如不加此参数时必须先使用mknod 命令来创建一个RAID设备,不过推荐使用-a yes参数一次性创建;
-b, –brief:较少的细节。用于 –detail 和 –examine 选项
-c, –config= :指定配置文件,缺省为 /etc/mdadm.conf
-l –level 阵列模式,支持的阵列模式有 linear, raid0, raid1, raid4, raid5, raid6, raid10, multipath, faulty, container;
-n –raid-devices 阵列中活动磁盘的数目,该数目加上备用磁盘的数目应该等于阵列中总的磁盘数目;
-v 显示过程
-V, –version:打印mdadm的版本信息
-f 模拟设备损坏
-r 移除设备
-Q 查看摘要信息
-D –detail:查看详细信息,打印一个或多个 md device 的详细信息
-E, –examine:打印 device 上的 md superblock 的内容
-F, –follow, –monitor:选择监控(Monitor)模式
-G, –grow:改变激活阵列的大小或形态
-S 停止RAID磁盘阵列
-s, –scan:扫描配置文件或 /proc/mdstat以搜寻丢失的信息
维护说明:
实际中,当软RAID 检测到某个磁盘有故障时,会自动标记该磁盘为故障磁盘,并停止对故障磁盘的读写操作。在这里我们将/dev/sdh1 模拟为出现故障的磁盘,模拟命令:mdadm /dev/md5 -f /dev/sdh1;在上面创建RAID 5过程中,我们设置了一个热备盘,所以当有标记为故障磁盘的时候,热备盘会自动顶替故障磁盘工作,阵列也能够在短时间内实现重建。通过查看"/proc/mdstat" 文件可以看到当前阵列的状态,如下
以上信息表明阵列正在重建,当一个设备出现故障或被标记故障时,相应设备的方括号后将被标以(F),如 “sdh14”。
其中 “[3/2]” 的第一位数表示阵列所包含的设备数,第二位数表示活动的设备数,因为目前有一个故障设备,所以第二位数为2;
这时的阵列以降级模式运行,虽然该阵列仍然可用,但是不具有数据冗余;
而 “[UU_]” 表示当前阵列可以正常使用的设备是/dev/sdf1 和/dev/sdg1,如果是设备 “/dev/sdf1” 出现故障时,则将变成[_UU]。
最后验证查看之前写入的测试数据是否丢失;
移除刚才模拟出现故障的/dev/sdh1,执行:mdadm /dev/md5 -r /dev/sdh1 //-a新增盘加入阵列,比如新转让sdj1到阵列,可执行:mdadm /dev/md5 -a /dev/sdj1;默认情况下,我们向RAID 中增加的磁盘,会被默认当作热备盘,我们需要把热备盘加入到RAID 的活动盘中,执行:mdadm -G /dev/md5 -n4;也可查看/proc/mdstat来确认阵列状态。加入后还需扩容文件系统才能真正使用空间,待扩容完成后,修改RAID 配置文件/etc/mdadm.conf,将新加入的磁盘信息更新到文件中。
注意:mdadm会读取配置文件中所列的RAID信息;使用mdadm时,必须保证mdadm中的状态信息(/proc/mdstat)和/etc/mdadm.conf配置文件一致,否则重启操作系统后,会出现问题。
2>windows 实现软RAID
直接在磁盘管理器里就可制作,Windows Server 支持 RAID0、RAID1 和 RAID5 三种等级。
其中,带区卷对应RAID 0,可以添加多块盘。并且在磁盘管理器中,不同格式的卷颜色也不相同。镜像卷就是RAID 1,在新建镜像卷时,只能选择两块盘,应该就是1:1镜像。相关网络经验性能测试验证如下:
更多参见:软 RAID 和硬 RAID 各有什么优劣?
四、附录:
1)RAID卡:
RAID卡有多种,除主板集成能够做的RAID的硬RAID外,还有各种专门RAID卡。一般分为硬RAID卡和软RAID卡两种;二者的主要区别就是,硬件Raid实现的性能、冗余都比软Raid更好、更高。另硬Raid卡又分为两种,即:服务器板载Raid卡,仅支持Raid0和Raid1级别。独立Raid卡,支持更多的功能。
硬 RAID 卡:通过硬件来实现RAID功能的就是硬RAID,有独立的I/O处理器和RAID控制器,硬盘连接器和缓存等一些列组件构成;对于硬件的raid卡,操作系统无法感知底层物理磁盘,OS只能通过厂家提供的raid卡的管理软件来查看卡上所连接的物理磁盘。而且,配置raid卡的时候,也不能在操作系统下完成,而必须进入这个硬件来完成(或者在操作系统下通过raid卡配置工具来设置)。一般的raid卡都是在开机自检的时候,进入他的ROM配置程序来配置各种RAID功能。
软 RAID 卡:通过软件并使用CPU的RAID卡我们成为软RAID,因为软RAID占用CUP资源比较高,所以绝大部分的服务器设备都使用的硬RAID。
RAID 卡的功能:
1)RAID卡:扩展磁盘容量,提供比单个硬盘更高的存储性能和提供数据冗余的技术,可以达到单个磁盘驱动器的几倍,几十倍甚至上百倍的速率,这也是RAID最初想要解决的问题;
2)RAID卡:提供了数据/磁盘容错能力,现在服务器基本上集成了RAID卡;
缓存(Cache)是RAID卡与外部总线交换数据的场所,它是RAID卡电路板上的一块存储芯片,与硬盘盘片相比,具有极快的存取速度。RAID卡现将数据传送到缓存,再经由缓存和外边数据总线交换数据。当系统断点后,存在cache里的数据下次开机后会自动刷到硬盘;缓存的大小与速度是直接关系到RAID卡的实际传输速度的重要因素,大缓存能够大幅度的提高数据命中率从而提高RAID卡整体性能;不同的RAID卡出厂时配备的内存容量不同,一般为几兆到数百兆容量不等;
更多参见RAID卡简介;
HBA卡:主机总线适配器(Host Bus Adapter,HBA),是一个在服务器和存储装置间提供输入/输出(I/O)处理和物理连接的电路板和/或集成电路适配器,这种位于服务器上与存储网络连接的设备一般就称为主机总线适配卡(Host Bus Adaptor)HBA,用于连接计算机内部总线和存储网络的设备。因为HBA减轻了主处理器在数据存储和检索任务的负担,它能够提高服务器的性能。一个HBA和与之相连的磁盘子系统有时一起被称作一个磁盘通道。内部有一个小的中央处理器,一些内存作为数据缓存以及连接光纤通道和总线的连接器件等。HBA卡上有个小的中央处理器,负责PCI和光纤通道两种协议的转换。它还有其他的一些功能,如初始化与光纤通道网络连接的服务器端口,支持上层协议例如TCP/IP,SCSI等,8B/10B的编码解码等;HBA卡按接口分为:FC-HBA卡(俗称:光纤网卡)、iSCSI-HBA卡(RJ45接口)。
常见的服务器和存储设备之间的数据通讯协议是IDE,SCSI和光纤通道。为了实现服务器和存储设备之间的通讯,通讯的两端都需要实现同样的通讯协议。存储设备上通常都有控制器,控制器实现了一种或几种通讯协议,它可以实现IDE,SCSI或光纤通道等存储协议到物理存储设备的操作协议之间的转换。而服务器的通讯协议是由扩展卡或主板上的集成电路实现的,它负责实现服务器内总线协议和IDE,SCSI等存储协议的转换。
SAS卡:SAS卡就是在某些不支持sas的服务器上面额外增加的一块pcie卡。便于服务器安装sas硬盘。一般支持做Raid0、1、10、1E或者直接识别sas硬盘。同时也兼容sata硬盘。Raid卡可以支持SAS、SATA硬盘组成raid653110等。比sas卡的功能更强大。性能更优,价格更贵。
2)磁盘阵列维护
加强磁盘阵列的日常管理与维护,是保证磁盘阵列正常、高效工作的重要手段。日常维护中应该关注以下:
①设置热备源盘
将一只硬盘设置为热备源盘,会造成一定的浪费,但从安全角度考虑是值得的。大容量的磁盘阵列使用RAID5,但有一个硬盘的冗余。如果一个硬盘损坏,整个阵列的安全会处于一种临界状态,此时任何一个硬盘的一点点闪失都会造成灾难性的后果,使数据全部丢失。设置有热备源盘,当硬盘发生故障时,系统会自动用热备源盘去替换故障盘并重建阵列,随后数据又会处于完全保护之中。②重要数据勤备份
应该经常对特别重要的数据进行备份,这样就不至于将“鸡蛋放在一个篮子里”,即使是安全性较高的磁盘阵列也不会绝对安全。③建立巡视检查制度
磁盘阵列还能够工作,并不表示没有发生故障。当磁盘阵列发生故障时,磁盘阵列存储系统的数据读写通常是正常的。这正是磁盘阵列的一种安全性措施,但往往又让管理人员产生一种错觉,以为磁盘阵列没有故障发生。对磁盘阵列定时的巡视检查,既可以发现已经发生的故障,还可以了解设备的工作状态,起到防患于未然的作用。