简述:
本篇主要涉及RAID原理介绍,和CentOS 7 的软RAID的实现。
1. RAID类别、基本作用、实现及应用场景
1.1 RAID(Redundant Array of Independent Disks)独立硬盘冗余阵列,简称磁盘阵列。是利用虚拟化存储技术,将多个硬盘进行组合,提升性能或数据冗余的技术。
1.2 RAID的类别有许多种,常见的有RAID 0 、RAID 1、RAID 5、常见的组合RAID 01、RAID 10、RAID 50。一般来说由具体场景灵活选择RAID方案。
1.3 RAID的实现方式有两种,一种为机器上的硬件实现的硬件raid,一种是软件实现的软raid。
1.3.1硬件磁盘阵列(Hardware RAID)RAID卡上内置处理器,不需要服务器的CPU运算。优点是读写性能最快,不占用服务器资源,可用于任何操作系统,也能在系统断电后,透过备份电池模块(BBU, Backup Battery Unit)以及非易失性存储器 (NVRAM)将硬盘读写日志档(Journal)包含的剩余读写作业先记录在存储器中,等待电力供应撤销后,再由NVRAM取回日志档数据,接着再完成读写作业,将剩余读写作业安全完成以确保读写完整性。备份电池模块通常会配合数组卡的Write-Back缓存模式,借由此存储器缓存读写作业以得到更高的读写性能;但是没有备份电池模块的硬件磁盘阵列卡,切勿使用Write-Back缓存模式以免遭遇断电情形导致读写数据流失。此外,因为硬件磁盘阵列卡搭载内置处理器,所以可以与操作系统分离出来,对硬盘进行各种作业,还原作业的速度也比软件磁盘阵列快。缺点是其售价很高。
1.3.2软件磁盘阵列(Software RAID):主要由CPU处理数组存储作业,缺点为耗损较多CPU资源运算RAID,优点则是价格偏低。分类有3种:
- 基于主板的磁盘阵列:只需要主板支持即可(通常是芯片组内置的RAID功能,如Intel Matrix RAID,Intel Rapid Storage Technology),不需要任何磁盘阵列卡。若主板损坏,可能难以购买同款主板重建RAID。
- 硬件辅助磁盘阵列(Hardware-Assisted RAID):需要一张基于Fake RAID的RAID卡,以及厂商所提供的驱动程序,但此类RAID卡仍然通过CPU进行运算。这款RAID较易迁移到其他电脑。RAID功能靠运行于操作系统的厂商驱动程序和CPU运算提供。
- 操作系统的RAID功能:如Linux、FreeBSD、Windows Server等操作系统内置RAID功能。
2. 常见RAID原理分析
2.1 RAID 0
RAID 0 亦称为条带卷(striping),它需要两块硬盘及以上的硬盘,组成一个大容量的硬盘,在存储数据时,将数据分段后分散存储在所有硬盘中,因为多块磁盘读写可以并行进行,所有读写速度最快,但是无数据冗余能力,一个物理磁盘损坏后,就会破坏整体数据的完整性,所有数据都会丢失。
2.2 RAID 1
RAID 亦称为( mirror ),它需要两块及以上偶数的硬盘两两组成一块逻辑硬盘,其中一块盘是主盘,一块盘为备盘,理论上读取的速度为硬盘数量的倍数,但是写性能会降低,因为在写入数据时需要将一份数据复制成两份,分别存于主盘和备盘,但是冗余性能会大大提升,理论最大的坏盘数量可以达到整体磁盘数量的一半而不会影响数据完整。
2.3 RAID 5
RAID 5至少需要3块硬盘,RAID 5,使用的是Disk Striping(硬盘分割)技术(wiki说的)。RAID 5不是对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID 5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据发生损坏后,可以利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。写入数据的速度相对单独写入一块硬盘的速度略慢,读取速度,近似于RAID 0,RAID 5的磁盘空间容量是Size=(n-1)*min(sd[a-z])
2.4 RAID 10 和 RAID 01
RAID 10 和 RAID 01是两种不同的冗余方案,不可混为一谈
RAID 10是先分割数据再镜像,再将所有硬盘分为两组,视为以RAID 1作为最低组合,然后将每组RAID 1视为一个“硬盘”组合为RAID 0运作
RAID 01则是跟RAID 10的程序相反,是先镜像再将数据到分割两组硬盘。它将所有的硬盘分为两组,每组各自构成为RAID 0作为最低组合,而将两组硬盘组合为RAID 1运作
2.5 RAID 50
RAID 5与RAID 0的组合,先作RAID 5,再作RAID 0
2.6 JBOD
JBOD( Just a Bunch Of Disks),JBOD是将所有硬盘做成逻辑上的一块硬盘,由于存储方案是等上一颗物理磁盘存满后,再写下一块物理磁盘,所以和raid0并不相同,由于每次读写只访问一块硬盘,所以性能较raid0更弱,且如果硬盘损毁,则该颗硬盘上的所有数据将无法救回。若第一颗硬盘损坏,通常无法作救援(因为大部分文件系统将磁盘分割表(partition table)存在磁盘前端,即第一颗),失去磁盘分割表即失去一切数据,若遭遇磁盘阵列数据或硬盘出错的状况,危险程度较RAID 0更剧。
2.7 RAID性能、存储对比
设置场景12块硬盘,每块硬盘1T容量,读速率1G/s,写速率0.5G/s对各RAID策略进行最大化对比
读性能:RAID 0 > RAID 50 > RAID 10 > RAID 5 > RAID 1
写性能:RAID 0 > RAID 50 > RAID 10 > RAID 5 > RAID 1
存储容量:RAID 0 (12T) > RAID 5 (11T) > RAID 50(10T)> RAID 1(6T) = RAID 10(6T)
安全性(支持最大坏盘数/块):RAID 1 (6)>= RAID 10(6>=x>=2)> RAID 50 (4>=x>=2) > RAID 5(4>=x>=1) > RAID 0 (0)
综上,RAID 50各方面排名均靠前,所以RAID 50是在容量和安全性上,是较为可选的方案, 事实上,我现在所能接触到的环境中,RAID 50处于压倒性的地位。
3. 使用软件实现RAID
3.1 虚拟机添加磁盘
3.1.1 在虚拟的设置,添加了三块2G的硬盘,准备做一个RAID5。
3.1.2 开机后,lsblk能发现多了三块硬盘
3.2 CentOS 7使用mdadm创建软raid
3.2.1 mdadm 命令
-C:创建RAID
- l:指定RAID等级
-n:指定做RAID的物理磁盘
-D: 查看RAID的状态
3.2.2mdadm -C /dev/md0 -l 5 -n 3 /dev/sd[b-d] ,就能创建出一个软raid 5
3.2.3查看下md0设备的状态,将其格式化后,挂载到/mnt目录上就可以使用了
3.3 模拟实现磁盘掉线,设备盘及rebuild
3.3.1 mdadm管理命令
使用管理命令,可以将逻辑盘中的物理磁盘标记为坏盘,或者实现添加移除磁盘的操作
-f: 将磁盘标记为坏盘
-r:移除磁盘
-a:添加磁盘
3.3.2模拟坏盘,mdadm -f /dev/md0 /dev/sdb
3.3.3移除坏盘,mdadm -D /dev/md0
3.3.4添加好盘,观察同步,mdadm -a /dev/md0 /dev/sdb