RAID 方案总结

RAID 方案总结

1、简介

RAID是redundant array of independent disks的缩写,意指独立磁盘冗余阵列,是把相同的数据存储在多个硬

盘的不同的地方的方法。通过把数据放在多个硬盘上,输入输出操作能以平衡的方式交叠,改良性能。因为多个硬盘增加了平均故障间隔时间(MTBF),储存冗余数据也增加了容错。

2、RAID级别

当前已出现的RAID的级别

有 RAID0,RAID1,RAID01/RAID10,RAID2,RAID3,RAID4,RAID5,RAID6,RAID7,越到后面的结构就是对前面结构的一种重复和再利用。常用的结构有RAID0,RAID1,RAID0+1,RAID5。

一般越是性能可靠的阵列需要更多的冗余数据,单位比特的存储成本也越高,例如RAID1和RAID6。为了减少冗

余数据量,RAID结构也引入数据校验算法(奇偶/hamming)来校验及恢复数据,这种机制副作用是随机读写数据时对校验盘的访问造成了速度瓶颈,不适用于大数据量的读写,例如RAID2,3,4,5。

对于不同的设备而言,需要对于不同的应用场景使用不同的RAID结构,了解这些RAID结构的优缺点是有必要

的,以下将详细阐述。

2.1 RAID 0:仅提高数据传输率的方案

RAID 0连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据传输率,但它没有数

据冗余,因此并不能算是真正的RAID结构。RAID 0只是单纯地提高性能,并没有为数据的可靠性提供保证,而且其中的一个磁盘失效将影响到所有数据。因此,RAID
0不能应用于数据安全性要求高的场合。

2.2 RAID 1:无需重组数据的高可靠高存储成本方案

RAID 1是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据。当原始数据繁忙时,可

直接从镜像拷贝中读取数据,因此RAID 1可以提高读取性能。RAID
1是磁盘阵列中单位成本最高的,但提供了很高的数据安全性和可用性。当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据。

2.3 RAID 01/10:RAID0+RAID1的复合方案

RAID 01/10根据组合分为RAID 10和RAID 01,实际是将RAID
0和RAID 1标准结合的产物,在连续地以位或字节

为单位分割数据并且并行读/写多个磁盘的同时,为每一块磁盘作磁盘镜像进行冗余。它的优点是同时拥有RAID
0的超凡速度
RAID 1的数据高可靠性,但是CPU占用率同样也更高,而且磁盘的利用率比较低。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。

2.4 RAID 2:带Hamming校验的低速方案

RAID 2将数据条块化地分布于不同的硬盘上,条块单位为位或字节,并使用称为“加重平均纠错码(汉明

码)”的编码技术来提供错误检查及恢复。

2.5 RAID 3:含奇偶校验信息块低速方案

RAID 3同RAID 2非常类似,都是将数据条块化分布于不同的硬盘上,区别在于RAID 3使用简单的奇偶校验,并

用单块磁盘存放奇偶校验信息。如果一块磁盘失效,奇偶盘及其他数据盘可以重新产生数据;如果奇偶盘失效则不影响数据使用。RAID 3对于大量的连续数据可提供很好的传输率,但对于随机数据来说,奇偶盘会成为写操作的瓶颈。

2.6 RAID 4:含1个校验信息块低速可靠方案

RAID4和RAID3很象,不同的是,它对数据的访问是按数据块进行的,也就是按磁盘进行的,每次是一个盘。在

图上可以这么看,RAID3是一次一横条,而RAID4一次一竖条。它的特点和RAID3也挺象,不过在失败恢复时,它的难度可要比RAID3大得多了,控制器的设计难度也要大许多,而且访问数据的效率不怎么好。

2.7 RAID 5

RAID 5不单独指定的奇偶盘,而是在所有磁盘上交叉地存取数据及奇偶校验信息。在RAID 5上,读/写指针可

同时对阵列设备进行操作,提供了更高的数据流量。RAID 5更适合于小数据块和随机读写的数据。RAID
3与RAID 5相比,最主要的区别在于RAID 3每进行一次数据传输就需涉及到所有的阵列盘;而对于RAID
5来说,大部分数据传输只对一块磁盘操作,并可进行并行操作。在RAID 5中有“写损失”,即每一次写操作将产生四个实际的读/写操作,其中两次读旧的数据及奇偶信息两次写新的数据及奇偶信息

2.8 RAID50

RAID 50:RAID50是RAID5与RAID0的结合。此配置在RAID5的子磁盘组的每个磁盘上进行包括奇偶信息在内的

数据的剥离。每个RAID5子磁盘组要求三个硬盘。RAID50具备更高的容错能力,因为它允许某个组内有一个磁盘出现故障,而不会造成数据丢失。而且因为奇偶位分部于RAID5子磁盘组上,故重建速度有很大提高。优势:更高的容错能力,具备更快数据读取速率的潜力。需要注意的是:磁盘故障会影响吞吐量。故障后重建信息的时间比镜像配置情况下要长。

2.9 RAID 6:含2个校验信息块低速高可靠方案

与RAID 5相比,RAID 6增加了第二个独立的奇偶校验信息块。两个独立的奇偶系统使用不同的算法,数据的可

靠性非常高,即使两块磁盘同时失效也不会影响数据的使用。但RAID 6需要分配给奇偶校验信息更大的磁盘空间,相对于RAID
5有更大的“写损失”,因此“写性能”非常差。较差的性能和复杂的实施方式使得RAID
6很少得到实际应用。

2.10 RAID 7:带高速缓冲的新标准

RAID 7是一种新的RAID标准,其自身带有智能化实时操作系统和用于存储管理的软件工具,可完全独立于主机

运行,不占用主机CPU资源。RAID 7可以看作是一种存储计算机(Storage
Computer),它与其他RAID标准有明显区别。

RAID7所有的I/O传送均是同步进行的,可以分别控制,这样提高了系统的并行性,提高系统访问数据的速度;每

个磁盘都带有高速缓冲存储器,实时操作系统可以使用任何实时操作芯片,达到不同实时系统的需要。允许使用SNMP协议进行管理和监视,可以对校验区指定独立的传送信道以提高效率。可以连接多台主机,因为加入高速缓冲存储器,当多用户访问系统时,访问时间几乎接近于0。由于采用并行结构,因此数据访问效率大大提高。需要注意的是它引入了一个高速缓冲存储器,这有利有弊,因为一旦系统断电,在高速缓冲存储器内的数据就会全部丢失,因此需要和UPS一起工作。当然了,这么快的东西,价格也非常昂贵。

2.11 其他

除了以上的各种标准,我们可以如RAID 0+1那样结合多种RAID规范来构筑所需的RAID阵列,例如RAID

5+3(RAID 53)就是一种应用较为广泛的阵列形式。用户一般可以通过灵活配置磁盘阵列来获得更加符合其要求的磁盘存储系统。

3、mdadm 实践

首先显示当前使用mdadm版本。

# mdadm -V
mdadm - v3.2.5 - 18th May 2012

3.1 创建RAID基本过程

以创建RAID1阵列为例,给出基本过程,创建其他RAID级别阵列过程类似。假设目前有两个硬盘/dev/sda

和/dev/sdb,目标是组成RAID1阵列设备/dev/md0。

3.1.1. 硬盘分区

首先在硬盘/dev/sda上分别创建一个分区

 # fdisk /dev/sda
     Command (m for help): n              按n创建新分区
     Command action
         e   extended
         p   primary partition (1-4)         输入p 选择创建主分区
     Partition number (1-4):                输入 1 创建第一个主分区
First cylinder (1-204, default 1):          直接回车,选择分区开始柱面这里就从 1 开始
Last cylinder or +size or +sizeM or +sizeK (1-204, default 204):  直接回车,最后一个柱面
     Command (m for help): t               输入t 指定分区类型!
Selected partition 1
     Hex code (type L to list codes): fd     fd 指 Linux raid auto,可用命令l显示文件格式列表确认
Command (m for help): w                 然后输入w写盘!
    The partition table has been altered!
Calling ioctl() to re-read partition table.
    Syncing disks.

同样的方法对/dev/sdb分区。

3.1.2.组成阵列

#mdadm --create --verbal /dev/md0 --level 1 -n2 /dev/sda1 /dev/sdb1
mdadm: /dev/sda1 appears to contain an ext2fs file system
    size=512000K  mtime=Thu Aug 21 08:25:31 2014
mdadm: /dev/sda1 appears to be part of a raid array:
    level=raid1 devices=2 ctime=Thu Aug 21 09:34:32 2014
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
mdadm: /dev/sdb1 appears to be part of a raid array:
    level=raid1 devices=2 ctime=Thu Aug 21 09:34:32 2014
mdadm: size set to 58581824K
mdadm: largest drive (/dev/sda1) exceeds size (58581824K) by more than 1%
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
md: bind<sda1>
md: bind<sdb1>
md/raid1:md0: not clean -- starting background reconstruction
md/raid1:md0: active with 2 out of 2 mirrors
md0: detected capacity change from 0 to 59987787776
mdadm: array /demd: resync of RAID array md0
md: minimum _guaranteed_  speed: 1000 KB/sec/disk.
v/md0 started.
md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for resync.
md: using 128k window, over a total of 58581824k.

之后可以查看RAID同步数据的进度。不必等待同步作业完成,我们即可进行格式化,挂载,拷贝数据等其他工

作,及时关闭系统,同步工作也会在下次RAID启动后继续进行。

# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
md0 : active raid1 sdb1[1] sda1[0]
      58581824 blocks super 1.2 [2/2] [UU]
      [==================>..]  resync = 90.7% (53178304/58581824) finish=2.1min speed=42078K/sec

unused devices: <none>

3.1.3. 格式化阵列为linux ext4格式

# mkfs.ext4 /dev/md0

3.1.4.挂载到 /mnt/myRAID 后,就可以对RAID设备进行读写操作了。

# mkdir /mnt/myRAID
# mount /dev/md0 /mnt/myRAID

3.2 启动已有的RAID

3.2.1.启动 mdadm 监视任务

# /etc/init.d/mdadm start

使用 restart 参数,在启动前杀死可能已经启动的相同进程。

# /etc/init.d/mdadm restart
Stopping MD monitoring service: mdadm --monitorNo /sbin/mdadm found running; none killed.
.
Starting MD monitoring service: mdadm --monitor.

3.2.2.启动 mdadm-raid 任务,将自动扫描所有分区设备,如果有设备是RAID文件系统,将按其中宏块信息建立相应md设备 /dev/mdX。

# /etc/init.d/mdadm-raid restart

使用 restart 参数,在启动前杀死可能已经启动的相同进程。

# /etc/init.d/mdadm-raid restart
md: md0 stopped.
md: bind<sdb1>
md: bind<sda1>
md/raid1:md0: not clean -- starting background reconstruction
md/raid1:md0: active with 2 out of 2 mirrors
md0: detected capacity change from 0 to 59987787776
md: resync of RAID array md0
md: minimum _guaranteed_  speed: 1000 KB/sec/disk.
md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for resync.
md: using 128k window, over a total of 58581824k.
md0: unknown partition table
md: resuming resync of md0 from checkpoint.
Assembling MD array md0...done (started [2/2]).
Generating udev events for MD arrays...done.

3.2.3.挂载到 /mnt/myRAID 后,就可以对RAID设备进行读写操作了。

# mkdir /mnt/myRAID
# mount /dev/md0 /mnt/myRAID

3.3 移除和添加磁盘

为了进行测试,我们需要从RAID中移除及添加磁盘,同时查看数据同步的效果。

3.3.1.移除磁盘

移除磁盘的方法最简单的就是关闭电源后将磁盘拔下。不关电源需要实现的话使用以下指令。

# mdadm /dev/md0 --fail /dev/sdb    # 仿真磁盘错误
md/raid1:md0: Disk failure on sdb, disabling device.
md/raid1:md0: Operation continuing on 1 devices.
md: md0: recovery done.
mdadm: set /dev/sdb faulty in /dev/md0
# mdadm /dev/md0 --remove /dev/sdb    # 从/dev/md0移除磁盘/dev/sdb
md: unbind<sdb>
md: export_rdev(sdb)
mdadm: hot removed /dev/sdb from /dev/md0

如果没有执行第一条命令,你将得到一个错误信息。实际应用中我们应该通过检测磁盘信息来确定是否需要从

RAID中移除某块磁盘,然后提示用户更换。

# mdadm /dev/md0 -r /dev/sdb
md: cannot remove active disk sdb from md0 ...
mdadm: hot remove failed for /dev/sdb: Device or resource busy

3.3.2. 添加磁盘

添加磁盘使用以下命令

# mdadm /dev/md0 -a /dev/sdb    #向/dev/md0添加磁盘/dev/sdb
md: export_rdev(sdb)
md: bind<sdb>
mdadm: added /demd: recovery of RAID array md0
v/sdb
md: minimum _guaranteed_  speed: 1000 KB/sec/disk.
md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for recovery.
md: using 128k window, over a total of 58581824k.
# cat /proc/mdstat                #显示数据同步进度
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
md0 : active raid1 sdb[2] sda[3]
      58581824 blocks super 1.2 [2/1] [_U]
      [>....................]  recovery =  1.5% (927104/58581824) finish=17.6min speed=54535K/sec

unused devices: <none>

当需要添加的磁盘已经被挂载(mount),你将得到以下错误信息,下面的例子中,/dev/sdb1已经被挂载(mount)

到 /mnt/sdb1。

# mdadm /dev/md0 -a /dev/sdb
mdadm: Cannot open /dev/sdb: Device or resource busy
# mdadm /dev/md0 -a /dev/sdb1
mdadm: Cannot open /dev/sdb1: Device or resource busy

当需要添加的磁盘容量小于现有RAID容量,你将获得以下错误信息。

# mdadm /dev/md0 -a /dev/sdb2
mdadm: /dev/sdb2 not large enough to join array

3.4 数据恢复测试

以下测试用于展示mdadm的RAID管理功能。

测试1:通过--add添加磁盘病重新同步

假设/dev/md0是由/dev/sda和/dev/sdb组成的RAID1,并已经挂载(mount)到/mnt/myRAID。

测试步骤:

# touch /mnt/myRAID/testfile            #向RAID分区写入一些数据,用于后期检查
# mdadm /dev/md0 --fail /dev/sdb        #仿真磁盘错误
# mdadm /dev/md0 --remove /dev/sdb   # 从/dev/md0移除磁盘/dev/sdb
# fdisk /dev/sdb                        #将/dev/sdb重新分区,或删除所有分区
# mkfs.msdos /dev/sdb1                # 格式化/dev/sdb,确保磁盘内容被改写。
# mdadm /dev/md0 --add /dev/sdb       # 向/dev/md0添加磁盘/dev/sdb
# cat /proc/mdstat                      # 显示RAID同步进度

可以注意到,即使在纳入RAID后,使用“fdisk–l /dev/sdb”查看之前对/dev/sdb的分区结构没有变化,而这

些不影响RAID使用。

测试2:通过--create添加磁盘并重新同步

假设/dev/md0是由/dev/sda和/dev/sdb组成的RAID1,并已经挂载(mount)到/mnt/myRAID。测试步骤:

# touch /mnt/myRAID/testfile            #向RAID分区写入一些数据,用于后期检查
# mdadm /dev/md0 --fail /dev/sdb        #仿真磁盘错误
# mdadm /dev/md0 --remove /dev/sdb   # 从/dev/md0移除磁盘/dev/sdb
# fdisk /dev/sdb                        #将/dev/sdb重新分区,或删除所有分区
# mkfs.msdos /dev/sdb1                # 格式化/dev/sdb,确保磁盘内容被改写。
# reboot                               # 重启系统
# mdadm -Cv /dev/md0 -l1 -n2 /dev/sd[ab]1        #按原有参数重新建立/dev/md0
# mount /dev/md0 /mnt/myRAID         # 挂载RAID
# ls /mnt/myRAID                       # 显示RAID文件
# cat /proc/mdstat                      # 显示RAID同步进度

4、总结

RAID的意义在于在磁盘损坏时最大程度地保护数据。下表列出一些典型的RAID级别的性能特征:


RAID级别


需要的磁盘数量


磁盘利用率


容许磁盘损坏个数


RAID0


2


100%


0


RAID1


2


50%


1


RAID0+1,RAID1+0


4


50%


1


RAID5


4


75%


1


RAID6


5


60%


2

在linux环境下,mdadm(multiply devices adminstrator)是一个相当成熟的RAID管理工具,具体mdadm的命令行参

数请参考网上资源。

时间: 2024-11-01 19:10:35

RAID 方案总结的相关文章

基本的RAID介绍

RAID是一个我们经常能见到的名词.但却因为很少能在实际环境中体验,所以很难对其原理 能有很清楚的认识和掌握.本文将对RAID技术进行介绍和总结,以期能尽量阐明其概念. RAID全称为独立磁盘冗余阵列(Rdeundant Array of Independent Disks),基本思想就是把 多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵. 容量巨大的硬盘.RAID通常被用在服务器电脑上,使用完全相同的硬盘组成一个逻辑扇区, 因此操作系统只会把它当做一个硬盘. R

raid之理解

RAID方案有两种,一种是硬件RAID解决方案,一种是软RAID解决方案. 硬件RAID解决方案 1.RAID 0 RAID 0是最早出现的RAID模式,即Data Stripping数据分条技术.RAID 0是组建磁盘阵列中最简单的一种形式,只需要2块以上的硬盘即可,成本低,可以提高整个磁盘的性能和吞吐量.RAID 0没有提供冗余或错误修复能力,但实现成本是最低的. RAID 0示意图 RAID 0最简单的实现方式就是把N块同样的硬盘用硬件的形式通过智能磁盘控制器或用操作系统中的磁盘驱动程序以

RAID5和RAID10,哪种RAID更适合你(上)

[IT168 专稿]存储是目前IT产业发展的一大热点,而RAID技术是构造高性能.海量存储的基础技术,也是构建网络存储的基础技术.专家认为,磁盘阵列的性能优势得益于磁盘运行的并行性,提高设备运行并行度可以提高磁盘的性能和数据安全性. 20年来,RAID 推出了一系列级别,包括RAID 0.RAID 1.RAID 2.RAID 3.RAID4.RAID 5,以及各种组合如 RAID 0+1 等.其中最广泛的包括RAID5与RAID10.但是一直以来,关于RAID5与RAID10的性能优劣的争端还是

关于RAID的技术知识

一.RAID定义RAID(Redundant Array of Independent Disk 独立冗余磁盘阵列)技术是加州大学伯克利分校1987年提出,最初是为了组合小的廉价磁盘来代替大的昂贵磁盘,同时希望磁盘失效时不会使对数据的访问受损 失而开发出一定水平的数据保护技术.RAID就是一种由多块廉价磁盘构成的冗余阵列,在操作系统下是作为一个独立的大型存储设备出现.RAID可以充分发 挥出多块硬盘的优势,可以提升硬盘速度,增大容量,提供容错功能够确保数据安全性,易于管理的优点,在任何一块硬盘出

RAID技术介绍

RAID技术介绍 简介 RAID是一个我们经常能见到的名词.但却因为很少能在实际环境中体验,所以很难对其原理 能有很清楚的认识和掌握.本文将对RAID技术进行介绍和总结,以期能尽量阐明其概念. RAID全称为独立磁盘冗余阵列(Redundant Array of Independent Disks),基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵. 容量巨大的硬盘.RAID通常被用在服务器电脑上,使用完全相同的硬盘组成一个逻辑扇区,因此操作系统只会把

私有云存储服务4节点部署各方案对比

近日因工作需要在某高校安装私有云存储系统.部署环境是一台4节点服务器,每个节点有16GB内存,3个硬盘,每个硬盘3TB ,每个节点可用空间约为8TB.部署的目标是充分利用所有的服务器资源,提供可靠的存储服务,同时尽量不要修改我们的系统源代码.由于本人在web服务部署经验尚浅,遂问计于师哥,对比了如下多种部署方案. 1. 原始方案 说明:1节点部署ffmpeg转码服务,1节点部署私有云存储系统(nginx+mysql+php代码).文件读写只在部署了私有云存储的节点进行,日后购买磁盘阵列后将存储挂

【转】RAID技术介绍和总结

转自http://blog.jobbole.com/83808/ 简介 RAID是一个我们经常能见到的名词.但却因为很少能在实际环境中体验,所以很难对其原理 能有很清楚的认识和掌握.本文将对RAID技术进行介绍和总结,以期能尽量阐明其概念. RAID全称为独立磁盘冗余阵列(Redundant Array of Independent Disks),基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵. 容量巨大的硬盘.RAID通常被用在服务器电脑上,使用完

简单描述RAID级别:

简单描述RAID级别: RAID 0 是俩盘一起读写,如果一个坏了那么数据全丢失: RAID 1是一块写,一块用来备份,坏一块无所谓: RAID 2 ,3 ,4 不常用: 最常用的就是RAID 5和RAID 6 ,RAID 5允许坏一块盘,但是最少需要三块盘来做,做出来的容量是N-1的容量(相当于一块用来写校验信息): RAID 6允许坏2块盘,但是最少需要四块盘,容量是N-2(相当于俩盘校验): 一.RAID技术规范简介 RAID技术主要包含RAID 0-RAID 7等数个规范,它们的侧重点各

Linux系统上利用软件实现RAID

RAID磁盘阵列 RAID是英文Redundant Array of Independent Disks的缩写,中文简称为独立冗余磁盘阵列.简单的说,RAID是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份技术.组成磁盘阵列的不同方式称为RAID级别(RAID Levels).在用户看起来,组成的磁盘组就像是一个硬盘,用户可以对它进行分区,格式化等等.总之,对磁盘阵列的操作与单个硬盘一模一样.不同的是,磁盘阵列的存储