Centos 中的RAID详解

分类:CentOS教程 阅读:62472 次

大纲:

一、 RAID 是什么?

二、 RAID 优缺点?

三、 RAID 样式?

四、 RAID 分类?

五、常见RAID总结?

六、mdadm 工具介绍?

七、创建 RAID?

八、RAID 的管理?

九、RAID 优化?

十、RAID 监控?

十一、RAID 扩展?

注:测试机 CentOS 5.5 X86_64 位

一、RAID是什么?

简单描述:

RAID:(Redundant Array of indenpensive Disk) 独立磁盘冗余阵列: 磁盘阵列是把多个磁盘组成一个阵列,当作单一磁盘使用,它将数据以分段或条带(striping)的方式储存在不同的磁盘中,存取数据时,阵列中的相关磁盘一起动作,大幅减低数据的存取时间,同时有更佳的空间利用率。磁盘阵列利用的不同的技术,称为RAID level,不同的level针对不同的系统及应用,以解决数据安全的问题。简单来说,RAID把多个硬盘组合成为一个逻辑扇区,因此,操作系统只会把它当作一个硬盘。

二、RAID 优缺点?

优点:

1. 提高传输速率。RAID通过在多个磁盘上同时存储和读取数据来大幅提高存储系统的数据吞吐量(Throughput)。在RAID中,可以让很多磁盘驱动器同时传输数据,而这些磁盘驱动器在逻辑上又是一个磁盘驱动器,所以使用RAID可以达到单个磁盘驱动器几倍、几十倍甚至上百倍的速率。这也是RAID最初想要解决的问题。因为当时CPU的速度增长很快,而磁盘驱动器的数据传输速率无法大幅提高,所以需要有一种方案解决二者之间的矛盾。RAID最后成功了。

2. 通过数据校验提供容错功能。普通磁盘驱动器无法提供容错功能,如果不包括写在磁盘上的CRC(循环冗余校验)码的话。RAID容错是建立在每个磁盘驱动器的硬件容错功能之上的,所以它提供更高的安全性。在很多RAID模式中都有较为完备的相互校验/恢复的措施,甚至是直接相互的镜像备份,从而大大提高了RAID系统的容错度,提高了系统的稳定冗余性。

缺点:

1. 做不同的RAID,有RAID模式硬盘利用率低,价格昂贵。

2. RAID0 没有冗余功能,如果一个磁盘(物理)损坏,则所有的数据都无法使用。

3. RAID1 磁盘的利用率却只有50%,是所有RAID级别中最低的。

4. RAID5 可以理解为是RAID 0和RAID 1的折中方案。RAID5 可以为系统提供数据安全保障,但保障程度要比 RAID1 低而磁盘空间利用率要比 RAID1 高。

三、RAID 样式?

  • 外接式磁盘阵列柜:最常被使用大型服务器上,具可热抽换(Hot Swap)的特性,不过这类产品的价格都很贵。

  • 内接式磁盘阵列卡:因为价格便宜,但需要较高的安装技术,适合技术人员使用操作。

  • 利用软件来仿真:由于会拖累机器的速度,不适合大数据流量的服务器。

四、RAID 分类?

RAID 0 数据分条(条带)盘 --- 只需要2块以上的硬盘,成本低,可以提高整个磁盘的性能和吞吐量

striping(条带模式),至少需要两块磁盘,做RAID分区的大小最好是相同的(可以充分发挥并优势);而数据分散存储于不同的磁盘上,在读写的时候可以实现并发,所以相对其读写性能最好;但是没有容错功能,任何一个磁盘的损坏将损坏全部数据;

Centos 中的RAID详解

RAID 1 磁盘镜像盘 --- 数据在写入一块磁盘的同时,会在另一块闲置的磁盘上生成镜像文件

mirroring(镜像卷),至少需要两块硬盘,raid大小等于两个raid分区中最小的容量(最好将分区大小分为一样),可增加热备盘提供一定的备份能力;数据有冗余,在存储时同时写入两块硬盘,实现了数据备份;但相对降低了写入性能,但是读取数据时可以并发,几乎类似于raid-0的读取效率;


Centos 中的RAID详解
RAID 2与RAID 3类似 海明码检验盘 --- 在数据发生错误的情况下将错误校正,以保证输出的正确性


RAID 3 奇偶校验码的并行传送 --- 只能查错不能纠错

Centos 中的RAID详解
RAID 4 带奇偶校验码的独立磁盘结构 --- 对数据的访问是按数据块进行的,也就是按磁盘进行的,RAID3是一次一横条,而RAID4一次一竖条

Centos 中的RAID详解
RAID 5 分布式奇偶校验的独立磁盘结构

需要三块或以上硬盘,可以提供热备盘实现故障的恢复;采用奇偶效验,可靠性强,且只有同时损坏两块硬盘时数据才会完全损坏,只损坏一块硬盘时,系统会根据存储的奇偶校验位重建数据,临时提供服务;此时如果有热备盘,系统还会自动在热备盘上重建故障磁盘上的数据;

Centos 中的RAID详解
RAID 6 带有两种分布存储的奇偶校验码的独立磁盘结构

RAID 7 优化的高速数据传送磁盘结构 --- 高速缓冲存储器

这是一种新的RAID标准,其自身带有智能化实时操作系统和用于存储管理的软件工具,可完全独立于主机运行,不占用主机CPU资源。RAID 7可以看作是一种存储计算机(Storage Computer),它与其他RAID标准有明显区别。

RAID 1+0 高可靠性与高效磁盘结构

Centos 中的RAID详解

RAID 0+1 高效率与高性能磁盘结构

Centos 中的RAID详解

RAID1+0与RAID0+1的区别:

RAID 1+0是先镜射再分区数据,再将所有硬盘分为两组,视为是RAID 0的最低组合,然后将这两组各自视为RAID 1运作。RAID 0+1则是跟RAID 1+0的程序相反,是先分区再将数据镜射到两组硬盘。它将所有的硬盘分为两组,变成RAID 1的最低组合,而将两组硬盘各自视为RAID 0运作。性能上,RAID 0+1比RAID 1+0有着更快的读写速度。可靠性上,当RAID 1+0有一个硬盘受损,其余三个硬盘会继续运作。RAID 0+1 只要有一个硬盘受损,同组RAID 0的另一只硬盘亦会停止运作,只剩下两个硬盘运作,可靠性较低。因此,RAID 10远较RAID 01常用,零售主板绝大部份支持RAID 0/1/5/10,但不支持RAID 01。

五、常见 RAID 总结?

RAID Level性能提升冗余能力空间利用率磁盘数量(块)
RAID 0读、写提升100%至少2
RAID 1读性能提升,写性能下降50%至少2
RAID 5读、写提升(n-1)/n%至少3
RAID 1+0读、写提升50%至少4
RAID 0+1读、写提升50%至少4
RAID 5+0读、写提升(n-2)/n%至少6

六、mdadm 工具介绍?

简介

mdadm(multiple devices admin)是 linux下标准的的软raid管理工具,是一个模式化工具(在不同的模式下);程序工作在内存用户程序区,为用户提供RAID接口来操作内核的模块,实现各种功能;

查看

12345678910[root@localhost ~]# uname -r2.6.18-194.el5[root@localhost ~]# lsb_release -aLSB Version: :core-3.1-amd64:core-3.1-ia32:core-3.1-noarch:graphics-3.1-amd64:graphics-3.1-ia32:graphics-3.1-noarchDistributor ID: CentOSDescription: CentOS release 5.5 (Final)Release: 5.5Codename: Final[root@localhost ~]# rpm -qa | grep mdadmmdadm-2.6.9-3.el5

mdadm 命令

基本语法

1mdadm [mode] <raid-device> [options] <component-devices>

目前支持的模式
LINEAR(线性模式)、RAID0(striping条带模式)、RAID1(mirroring)、 RAID-4、RAID-5、 RAID-6、 RAID-10、 MULTIPATH和FAULTY

LINEAR:线性模式,该模式不是raid的标准模式,其主要作用是可以实现将几块小的硬盘组合为一块大硬盘来使用,数组存储时一次存满一个硬盘在使用下一个硬盘,对上层来说操作的是一个大硬盘。

主要模式(7种)

  • Assemble:装配模式:加入一个以前定义的阵列,可以正在使用阵列或从其他主机移出的阵列

  • Build: 创建:创建一个没有超级块的阵列

  • Create: 创建一个新的阵列,每个设备具有超级块

  • Follow or Monitor: 监控RAID的状态,一般只对RAID-1/4/5/6/10等有冗余功能的模式来使用

  • Grow:(Grow or shrink) 改变RAID的容量或阵列中的设备数目;收缩一般指的是数据收缩或重建

  • Manage: 管理阵列(如添加spare盘和删除故障盘)

  • Incremental Assembly:添加一个设备到一个适当的阵列

  • Misc: 允许单独对阵列中的某个设备进行操作(如抹去superblocks 或停止阵列)

  • Auto-detect: 此模式不作用于特定的设备或阵列,而是要求在Linux内核启动任何自动检测到的阵列

主要选项:(Options for selecting a mode)

1234567-A, --assemble: 加入并开启一个以前定义的阵列-B, --build: 创建一个没有超级块的阵列(Build a legacy array without superblocks)-C, --create: 创建一个新的阵列-F, --follow, --monitor:选择监控(Monitor)模式-G, --grow: 改变激活阵列的大小或形态-I, --incremental: 添加一个单独的设备到合适的阵列,并可能启动阵列--auto-detect: 请求内核启动任何自动检测到的阵列

创建模式

1234567-C --create: 创建一个新的阵列专用选项:-l: 级别-n #: 设备个数-a {yes|no}: 是否自动为其创建设备文件-c: CHUNK大小, 2^n,默认为64K-x #: 指定空闲盘个数

管理模式

123-a --add: 添加列出的设备到一个工作的阵列中;当阵列处于降级状态(故障状态),你添加一个设备,该设备将作为备用设备并且在该备用设备上开始数据重建-f --fail:将列出的设备标记为faulty状态,标记后就可以移除设备;(可以作为故障恢复的测试手段)-r --remove:从阵列中移除列出的设备,并且该设备不能处于活动状态(是冗余盘或故障盘)

监控模式

12345-F --follow, --monitor:选择监控(Monitor)模式-m --mail: 设置一个mail地址,在报警时给该mail发信;该地址可写入conf文件,在启动阵列是生效-p --program, --alert:当检测到一个事件时运行一个指定的程序-y --syslog: 设置所有的事件记录于syslog中-t --test: 给启动时发现的每个阵列生成test警告信息;该信息传递给mail或报警程序;(以此来测试报警信息是否能正确接收)

增长模式

12345678910111213141516-G --grow: 改变激活阵列的大小或形态-n --raid-devices=: 指定阵列中活动的device数目,不包括spare磁盘,这个数目只能由--grow修改-x --spare-devices=:指定初始阵列的冗余device 数目即spare device数目-c --chunk=: Specify chunk size of kibibytes. 缺省为 64. chunk-size是一个重要的参数,决定了一次向阵列中每个磁盘写入数据的量(Chunk :,可以理解为raid分储数据时每个数据段的大小(通常为32/64/128等这类数字大小);合理的选择chunk大小非常重要,若chunk过大可能一块磁盘上的带区空间就可以满足大部分的I/O操作,使得数据的读写只局限于一块硬盘上,这便不能充分发挥RAID并发的优势;如果chunk设置过小,任何很小的I/O指令都 可能引发大量的读写操作,不能良好发挥并发性能,占用过多的控制器总线带宽,也影响了阵列的整体性能。所以,在创建带区时,我们应该根据实际应用的需要,合理的选择带区大小。)-z --size=:组建RAID1/4/5/6后从每个device获取的空间总数;但是大小必须为chunk的倍数,还需要在每个设备最后给RAID的superblock留至少128KB的大小。--rounding=: Specify rounding factor forlinear array (==chunk size)-l --level=: 设定 raid level.raid的几倍--create: 可用:linear, raid0, 0, stripe, raid1,1, mirror, raid4, 4, raid5, 5, raid6, 6, multipath, mp.--build: 可用:linear, raid0, 0, stripe.-p --layout=:设定raid5 和raid10的奇偶校验规则;并且控制故障的故障模式;其中RAID-5的奇偶校验可以在设置为::eft-asymmetric, left-symmetric, right-asymmetric, right-symmetric, la, ra, ls, rs.缺省为left-symmetric--parity: 类似于--layout=--assume-clean:目前仅用于 --build 选项-R --run: 阵列中的某一部分出现在其他阵列或文件系统中时,mdadm会确认该阵列。此选项将不作确认。-f --force: 通常mdadm不允许只用一个device 创建阵列,而且此时创建raid5时会使用一个device作为missing drive。此选项正相反-N --name=: 设定阵列的名称

装配模式

1-A, --assemble: 加入并开启一个以前定义的阵列

MISC模式选项

123-Q, --query: 查看一个device,判断它为一个 md device 或是 一个 md 阵列的一部分-D, --detail: 打印一个或多个md device 的详细信息-E, --examine:打印 device 上的 md superblock 的内容

查看RAID阵列的详细信息

12mdadm -D /dev/md#--detail 停止阵列

停止RAID阵列

12mdadm -S /dev/md#--stop

开启RAID阵列

12mdadm ?A /dev/md#--start

其它选项

12345678-c, --config=: 指定配置文件,缺省为 /etc/mdadm.conf-s, --scan: 扫描配置文件或 /proc/mdstat以搜寻丢失的信息。默认配置文件:/etc/mdadm.conf-h, --help: 帮助信息,用在以上选项后,则显示该选项信息-v, --verbose: 显示细节,一般只能跟 --detile 或 --examine一起使用,显示中级的信息-b, --brief: 较少的细节。用于 --detail 和 --examine 选项--help-options: 显示更详细的帮助-V, --version: 版本信息-q,--quit: 安静模式;加上该选项能使mdadm不显示纯消息性的信息,除非那是一个重要的报告


七、创建RAID?

实验环境:CentOS 5.5 X86_64 mdadm版本为:2.6.9-3

案例:创建一RAID5具(详细过程)

说明:

1. 直接使用硬盘硬件设备,不需要分区。

创建一个RAID 0设备:
1mdadm --create /dev/md0--level=0 --chunk=32 --raid-devices=3 /dev/sd[b-d]

创建一个RAID 1设备:
1mdadm -C /dev/md0-l1 -c128 -n2 -x1 /dev/sd[b-d]
创建一个RAID 5设备:
1mdadm -C /dev/md0-l5 -n5 /dev/sd[c-g] -x1 /dev/sdb
创建一个RAID 6设备:
1mdadm -C /dev/md0-l6 -n5 /dev/sd[c-g] -x2 /dev/sdb/dev/sdh

创建一个RAID 10设备:
1mdadm -C /dev/md0-l10 -n6 /dev/sd[b-g] -x1 /dev/sdh

创建一个RAID1+0设备(双层架构):
1234mdadm -C /dev/md0-l1 -n2 /dev/sdb/dev/sdcmdadm -C /dev/md1-l1 -n2 /dev/sdd/dev/sdemdadm -C /dev/md2-l1 -n2 /dev/sdf/dev/sdgmdadm -C /dev/md3-l0 -n3 /dev/md0/dev/md1/dev/md2

2. 如果要具体使用哪个硬盘的分区做RAID,才需要fdisk特定的分区,并给它指定分区类型:fd

具体过程如下:

1. 分区

1234567891011121314151617181920212223242526272829303132333435363738394041[root@localhost ~]# fdisk /dev/sdeDevice contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabelBuilding a new DOS disklabel. Changes will remain inmemory only,untilyou decide to write them. After that, of course, the previouscontent won't be recoverable.The number of cylinders forthis disk is setto 2610.There is nothing wrong with that, but this is larger than 1024,and could incertain setups cause problems with:1) software that runs at boot time(e.g., old versions of LILO)2) booting and partitioning software from other OSs(e.g., DOS FDISK, OS/2FDISK)Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)Command (m forhelp): nCommand actione extendedp primary partition (1-4)pPartition number (1-4): 1First cylinder (1-2610, default 1):Using default value 1Last cylinder or +size or +sizeM or +sizeK (1-2610, default 2610):Using default value 2610Command (m forhelp): tSelected partition 1Hex code (typeL to list codes): fdChanged system typeof partition 1 to fd (Linux raid autodetect)Command (m forhelp): wThe partition table has been altered!Calling ioctl() to re-readpartition table.这里只举个例子,其它类似!特别说明:在fdisk分区后需要将分区标志改为Linux raid auto类型;效果如下:[root@localhost ~]# fdisk -l | grep /dev/sdDisk /dev/sdb: 21.4 GB, 21474836480 bytes/dev/sdb11 2610 20964793+ fd Linux raid autodetectDisk /dev/sdc: 21.4 GB, 21474836480 bytes/dev/sdc11 2610 20964793+ fd Linux raid autodetectDisk /dev/sdd: 21.4 GB, 21474836480 bytes/dev/sdd11 2610 20964793+ fd Linux raid autodetectDisk /dev/sde: 21.4 GB, 21474836480 bytes/dev/sde11 2610 20964793+ fd Linux raid autodetect[root@localhost ~]#

2. 建立磁盘阵列

123456[root@localhost ~]# mdadm -C /dev/md0 -a yes -l 5 -n 3 /dev/sd{b,c,d}1mdadm: array /dev/md0started.#-C:创建一个阵列,后跟阵列名称#-a : 表示自动创建#-l : 指定阵列级别#-n : 指定阵列中活动devices的数目

3. 查看Raid5阵列

12345678[root@localhost ~]# cat /proc/mdstatPersonalities : [raid6] [raid5] [raid4]md0 : active raid5 sdd1[2] sdc1[1] sdb1[0] #第一行41929344 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU] #第二行unused devices: <none>[root@localhost ~]##第一行是MD设备名称md0,active和inactive选项表示阵列是否能读/写,接着是阵列的RAID级别raid5,后面是属于阵列的块设备,方括号[]里的数字表示设备在阵列中的序号,(S)表示其是热备盘,(F)表示这个磁盘是 faulty状态。#第二行是阵列的大小,用块数来表示;后面有chunk-size的大小,然后是layout类型,不同RAID级别的 layout类型不同,[3/3] [UUU]表示阵列有3个磁盘并且3个磁盘都是正常运行的,若是[2/3]和[_UU] 表示阵列有3个磁盘中2个是正常运行的,下划线对应的那个位置的磁盘是faulty(错误)状态的。

4. 查看Raid5的详细信息

1234567891011121314151617181920212223242526[root@localhost ~]# mdadm --detail /dev/md0/dev/md0:Version : 0.90Creation Time : Thu Jun 27 17:32:19 2013Raid Level : raid5Array Size : 41929344 (39.99 GiB 42.94 GB)Used Dev Size : 20964672 (19.99 GiB 21.47 GB)Raid Devices : 3Total Devices : 3Preferred Minor : 0Persistence : Superblock is persistentUpdate Time : Thu Jun 27 17:34:08 2013State : cleanActive Devices : 3 #活动的设备Working Devices : 3Failed Devices : 0Spare Devices : 0Layout : left-symmetricChunk Size : 64K #数据块大小UUID : 4f4529e0:15a7f327:0ec5e646:e202f88eEvents : 0.2Number Major Minor RaidDevice State0 8 17 0 active sync/dev/sdb11 8 33 1 active sync/dev/sdc12 8 49 2 active sync/dev/sdd1[root@localhost ~]#

5. 格式化

1234567891011121314151617181920212223242526[root@localhost ~]# mkfs -t ext3 -b 4096 -L myraid5 /dev/md0mke2fs 1.39 (29-May-2006)Filesystem label=myraid5OS type: LinuxBlock size=4096 (log=2)Fragment size=4096 (log=2)5242880 inodes, 10482336 blocks524116 blocks (5.00%) reserved forthe super userFirst data block=0Maximum filesystem blocks=4294967296320 block groups32768 blocks per group, 32768 fragments per group16384 inodes per groupSuperblock backups stored on blocks:32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,4096000, 7962624Writing inode tables: doneCreating journal (32768 blocks): doneWriting superblocks and filesystem accounting information: doneThis filesystem will be automatically checked every 28 mounts or180 days, whichever comes first. Use tune2fs -c or -i to override.You have new mail in/var/spool/mail/root[root@localhost ~]## ?t 指定文件系统类型# ?b 表示块大小有三种类型分别为 1024/2048/4096# ?L 指定卷标

6. 挂载并查看

12345678910111213[root@localhost ~]# mkdir /myraid5[root@localhost ~]# mount /dev/md0 /myraid5/[root@localhost ~]# cd /myraid5/[root@localhost myraid5]# lslost+found[root@localhost myraid5]# df -hFilesystem Size Used Avail Use% Mounted on/dev/sda29.5G 1.8G 7.2G 21% //dev/sda34.8G 138M 4.4G 4% /data/dev/sda1251M 17M 222M 7% /boottmpfs 60M 0 60M 0% /dev/shm/dev/md040G 177M 38G 1% /myraid5#新分区哦![root@localhost myraid5]#

7. 开机自动挂载

1234567891011121314151617181920212223[root@localhost myraid5]# vim /etc/fstabLABEL=/ / ext3 defaults 1 1LABEL=/data/dataext3 defaults 1 2LABEL=/boot/bootext3 defaults 1 2tmpfs /dev/shmtmpfs defaults 0 0devpts /dev/ptsdevpts gid=5,mode=620 0 0sysfs /syssysfs defaults 0 0proc /procproc defaults 0 0LABEL=SWAP-sda5 swap swap defaults 0 0/dev/md0/myraid5ext3 defaults 0 0[root@localhost myraid5]# mount -a[root@localhost myraid5]# mount/dev/sda2on / typeext3 (rw)proc on /proctypeproc (rw)sysfs on /systypesysfs (rw)devpts on /dev/ptstypedevpts (rw,gid=5,mode=620)/dev/sda3on /datatypeext3 (rw)/dev/sda1on /boottypeext3 (rw)tmpfs on /dev/shmtypetmpfs (rw)none on /proc/sys/fs/binfmt_misctypebinfmt_misc (rw)sunrpc on /var/lib/nfs/rpc_pipefstyperpc_pipefs (rw)/dev/md0on /myraid5typeext3 (rw)[root@localhost myraid5]#

8. 生成mdadm的配置文件

/etc/mdadm.conf作为默认的配置文