RAID,全称Redundant Array Inexpensive(Independent) Disks。这个名称的由来有必定历史缘由,不赘述。如今就直接视为磁盘阵列。node
磁盘阵列:将多块磁盘,按必定的方式组合起来,以提升耐用性和IO能力。web
须要注意的是,RAID有冗余能力提升了耐用性,但取代不了数据备份。因RAID冗余只能保证磁盘坏时数据不受影响,若是数据遭到误删,那和磁盘就不要紧了,因此重要数据仍是要备份。centos
一、数据存储在某磁盘上,若该磁盘损坏,则会致使业务终止。
二、磁盘访问密集时,其有限的I/O能力将成为业务瓶颈。bash
RAID耐用性的实现,主要经过磁盘冗余来实现;app
RAID使I/O能力的提高,可经过其自带的“CPU”和“内存”(仅供RAID使用),也可理解为是RAID的控制器。异步
RAID有不一样级别,各级别表示的是其组织各磁盘的方式,并不是有级别“高低”之分。ide
RAID级别的设置在BIOS中,而非操做系统。svg
RAID-0,也称条带卷。RAID-0实现方式:性能
数据存储方式:
各chunk平均、依次分配存储至各磁盘上,即把整个数据条带化存储了。测试
指标 | 产生结果(提高、降低均相对于单硬盘) |
---|---|
I/O能力 | 提高 |
耐用性 | 降低 |
使用的最少硬盘数 | 2 |
可用空间 | N*min(Disk1,Disk2……) |
分析:
RAID-1,也称镜像卷。RAID-1实现方式:
数据存储方式:
各chunk,每一个硬盘都存一份,如同镜像。
指标 | 产生结果(提高、降低均相对于单硬盘) |
---|---|
I/O能力 | 写性能略微降低;读性能提高 |
耐用性 | 提高 |
存储空间利用率 | 50%如下 |
使用的最少硬盘数 | 最少为2,且通常也只用2块硬盘 |
可用空间 | 1*min(Disk1,Disk2…) |
分析:
RAID-4实现方式:
数据存储方式:
前面硬盘按条带卷存储各chunk,最后一块硬盘做为校验盘,存储前面硬盘数据计算得出的校验码(好比按位计算出的异或值)。若是存储数据的某硬盘损坏,校验盘可和剩下的正常硬盘数据计算,得出损坏盘上的数据1。
RAID-4的一大缺陷:单块盘做为校验盘,任何一个存数据的盘写入数据,校验盘的数据都要跟着变。这大大增长了校验盘的压力,使之成为RAID-4的性能瓶颈。
因此RAID-4不经常使用。
数据存储方式:
RAID-5存储原理与RAID-4相同。不过为了不RAID-4单个校验盘的压力,RAID-5采用了各硬盘轮流存储校验值的方式。
校验数据从第一块盘开始存储,以后各硬盘依次作校验盘,称为左对衬。如上图所示就是左对衬的方式(虚线标出)。相反地,校验数据若从最后一块盘开始,依次向前轮流作校验盘,称为右对称。通常采用左对衬。
指标 | 产生结果(提高、降低均相对于单硬盘) |
---|---|
I/O能力 | 提高 |
耐用性 | 提高 |
存储空间利用率 | (N-1)/N如下,其中N为硬盘总数 |
使用的最少硬盘数 | 最少3个 |
可用空间 | (N-1)*min(Disk1,Disk2…) |
分析:
数据存储方式:
各硬盘先分组作RAID-1,各组再在更高级别上作RAID-0。
指标 | 产生结果(提高、降低均相对于单硬盘) |
---|---|
I/O能力 | 提高 |
耐用性 | 提高 |
存储空间利用率 | 50%如下 |
使用的最少硬盘数 | 4个 |
可用空间 | N*min(Disk1,Disk2…)/2 |
分析:
RAID-10是相对理想的机制。
数据存储方式:
用若干硬盘先作RAID-0,再用一样数量的硬盘,在更高级别上作RAID-1。
两边的RAID-0存储的总数据同样,但因为两边RAID-0控制器对数据的切片方式未必相同,因此两边的切片结果未必相同(上图中使用chunk一、chunk1一撇以示区分),因此两边的RAID-0若各有一个硬盘坏,则整个数据就会损坏。
虽然这种方式能够在某一边RAID-0的所有硬盘坏的状况下,仍保存完整数据,但发生这种状况几率较低。反而是两边各坏一块硬盘的几率较高(两边都是一堆里面坏一个)。
总体来看,RAID-01不如RAID-10。
数据存储方式:
各硬盘先分组作RAID-5,各组再在更高级别上作RAID-0。
这里仅做为了解。
Just a Bunch Of Disks,仅是一组硬盘的捆绑。
顾名思义,JBOD逻辑上是把一堆硬盘合起来当作一个磁盘来用(这点同RAID),但它没有提高I/O能力和耐用性,功能仅是结合各硬盘存储空间,即其可用空间为sum(Disk1,Disk2…)。存储数据方式是前一个硬盘满就继续存储在后一个上。
RAID也可经过软件实现,但生产环境中确定都是硬件实现。不过如下使用软RAID使用举例,可对RAID有更清晰的理解。
软件实现RAID是基于内核中的MD(Multi Devices)模块。
centos6上,使用系统命令mdadm来与该模块通讯,它具备不一样模式。使用格式为:
mdadm [mode] <raiddevice> [options] <component-devices>
各字段 | 意义 |
---|---|
mode | 指定模式。 |
raiddevice | 指定RAID设备2 |
options | 选项。对于不一样模式,可用的选项不一样。 |
component-devices | 组成RAID的成员设备。 |
各模式 | 符号 | 意义 |
---|---|---|
建立 | -C | 用于建立(create) |
显示 | -D | 显示设备详细信息(detail) |
监控 | -F | |
管理 | 无 | 该模式无需指定,使用某些选项默认就是在管理模式下。 |
中止 | -S | 中止指定RAID,释放全部资源。 |
装配 | -A | 装配(assemble)一个已存在的阵列3 |
建立模式下
选项 | 意义 |
---|---|
-n # | 指定多少块设备建立RAID(#为数字,下同) |
-l # | 指定建立的RAID级别(level)4 |
-a {yes|no} | 指定是否自动(auto)建立RAID的设备文件 |
-c | 指定RAID的chunk的大小,好比512K |
-x # | 指定备用的空闲盘的个数5 |
管理模式下
选项 | 意义 |
---|---|
-a | 添加磁盘 |
-r | 移除磁盘 |
-f | 标记磁盘为损坏 |
好比建立一个10G可用空间,3块盘组成的RAID-5,另有1块空闲盘备用。共需4硬盘。
建立4个分区看成硬盘,注意分区ID应为fd(Linux raid auto),不然没法装配为RAID。建立分区结果:
[root@local ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 107.4 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x6f7a5b9a
Device Boot Start End Blocks Id System
/dev/sdb1 1 654 5253223+ fd Linux raid autodetect
/dev/sdb2 655 1308 5253255 fd Linux raid autodetect
/dev/sdb3 1309 1962 5253255 fd Linux raid autodetect
/dev/sdb4 1963 13054 89096490 5 Extended
/dev/sdb5 1963 2616 5253223+ fd Linux raid autodetect
查看/proc/mdstat(显示当前系统全部RAID设备),或查看全部/dev/md#文件,以添加新RAID设备文件时,避免和已有的设备文件名重复。
[root@local ~]# cat /proc/mdstat
Personalities :
unused devices: <none>
# 表示目前系统上没有RAID设备
使用mdadm建立RAID-5。chunk大小未指定,表示使用默认大小。
[root@local ~]# mdadm -C /dev/md0 -n 3 -x 1 -l 5 -a yes /dev/sdb{1,2,3,5}
mdadm: /dev/sdb1 appears to contain an ext2fs file system
size=3156740K mtime=Sun Dec 4 15:29:29 2016
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
仍在/proc/mdstat查看是否建立完毕。
[root@local ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb3[4] sdb5[3](S) sdb2[1] sdb1[0]
10498048 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
active表示该RAID处于活动(可用)状态;
若有recovery正在执行及其执行的百分比6,表示组成RAID的各设备正在逐位对齐7。
至此,RAID-5建立完成,可把该RAID在逻辑上看作为一个设备了。
建立完成后,可以使用显示模式,查看该软RAID详细信息。
[root@local ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Mon Jan 23 22:06:37 2017
Raid Level : raid5
Array Size : 10498048 (10.01 GiB 10.75 GB)
Used Dev Size : 5249024 (5.01 GiB 5.38 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Mon Jan 23 22:07:11 2017
State : clean # clean表示目前软RAID状态正常
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric # 表示该RAID-5使用左对称的方式
Chunk Size : 512K
Name : local:0 (local to host local)
UUID : e50fa76a:477feeb3:c23cdc50:8a415bb4
Events : 18
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 18 1 active sync /dev/sdb2
4 8 19 2 active sync /dev/sdb3
3 8 21 - spare /dev/sdb5
格式化
[root@local ~]# mke2fs -t ext4 /dev/md0
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
657072 inodes, 2624512 blocks
131225 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2688548864
81 block groups
32768 blocks per group, 32768 fragments per group
8112 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 30 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
挂载
[root@local ~]# mount /dev/md0 test_md
[root@local ~]# mount | grep /dev/md0
/dev/md0 on /root/test_md type ext4 (rw)
注意,如上所提到的,若是想让其开机自动挂载,最好使用UUID或卷标来指定这个RAID,由于RAID的设备文件的数字在重启后可能会改变。
向该软RAID挂载的目录下拷贝一个文件,后续验证是否损坏。
[root@local ~]# echo hello > test_md/hello
[root@local ~]# cat test_md/hello
hello
使用指令,人为标记组成该软RAID的某设备损坏。
[root@local ~]# mdadm /dev/md127 -f /dev/sdb1
mdadm: set /dev/sdb1 faulty in /dev/md127
# 因为重启过机器,该软RAID的设备文件发生改变了,变为md127了。
# 此处是把/dev/sdb1标记为损坏。
此时查看软RAID的状态。
损坏设备时当即查看,能够看到数据正在重建(rebuild)及重建的进度百分比。
[root@local ~]# mdadm -D /dev/md127
/dev/md127:
Version : 1.2
Creation Time : Mon Jan 23 22:06:37 2017
Raid Level : raid5
Array Size : 10498048 (10.01 GiB 10.75 GB)
Used Dev Size : 5249024 (5.01 GiB 5.38 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Wed Feb 1 20:21:34 2017
State : clean, degraded, recovering # 此时坏了一个设备,备用的设备在恢复(recovering)数据,因此只有两块可用,是降级(degraded)模式
Active Devices : 2
Working Devices : 3
Failed Devices : 1
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Rebuild Status : 17% complete
Name : local:0 (local to host local)
UUID : e50fa76a:477feeb3:c23cdc50:8a415bb4
Events : 28
Number Major Minor RaidDevice State
3 8 21 0 spare rebuilding /dev/sdb5
1 8 18 1 active sync /dev/sdb2
4 8 19 2 active sync /dev/sdb3
0 8 17 - faulty /dev/sdb1
备用盘重建数据完成后再次查看软RAID信息,可看到备用的/dev/sdb5彻底替代了/dev/sdb1,其余信息均和损坏前同样。
[root@local ~]# mdadm -D /dev/md127
/dev/md127:
Version : 1.2
Creation Time : Mon Jan 23 22:06:37 2017
Raid Level : raid5
Array Size : 10498048 (10.01 GiB 10.75 GB)
Used Dev Size : 5249024 (5.01 GiB 5.38 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Wed Feb 1 20:22:20 2017
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 1
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Name : local:0 (local to host local)
UUID : e50fa76a:477feeb3:c23cdc50:8a415bb4
Events : 43
Number Major Minor RaidDevice State
3 8 21 0 active sync /dev/sdb5
1 8 18 1 active sync /dev/sdb2
4 8 19 2 active sync /dev/sdb3
0 8 17 - faulty /dev/sdb1
此时查看软RAID挂载点下的文件,未损坏。
[root@local ~]# cat test_md/hello
hello
再标记一个设备损坏,使软RAID变为降级模式,并查看状态和挂载点下的文件。
[root@local ~]# mdadm /dev/md127 -f /dev/sdb2
mdadm: set /dev/sdb2 faulty in /dev/md127
# 标记损坏
[root@local ~]# mdadm -D /dev/md127 | grep "State :"
State : clean, degraded
# 查看软RAID状态
[root@local ~]# mdadm -D /dev/md127 | tail -n 7
Number Major Minor RaidDevice State
3 8 21 0 active sync /dev/sdb5
2 0 0 2 removed
4 8 19 2 active sync /dev/sdb3
0 8 17 - faulty /dev/sdb1
1 8 18 - faulty /dev/sdb2
# 组成软RAID各设备的状态
[root@local ~]# cat test_md/hello
hello
# 降级模式不影响数据
标记为坏盘的设备,在重启后会自动被移除出软RAID;也可经过命令,直接移除。
[root@local ~]# mdadm /dev/md127 -r /dev/sdb{1,2}
mdadm: hot removed /dev/sdb1 from /dev/md127
mdadm: hot removed /dev/sdb2 from /dev/md127
而后可再添加好盘,上述的/dev/sdb{1,2}并非真的故障,因此再添加进去也没有问题。软RAID的状态也恢复为正常。
[root@local ~]# mdadm /dev/md127 -a /dev/sdb{1,2}
mdadm: added /dev/sdb1
mdadm: added /dev/sdb2
[root@local ~]# mdadm -D /dev/md127 | grep "State :"
State : clean
当软RAID再也不使用时,可停用。停用前应先卸载,不然会报错。
[root@local ~]# umount /dev/md127
[root@local ~]# mdadm -S /dev/md127
mdadm: stopped /dev/md127
[root@local ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
unused devices: <none>
若是软RAID设备文件还在可以使用装配模式从新启用;
如需删除软RAID,把全部组成设备移除便可。
(完)