当前位置:文档之家› 存储系列——RAID原理

存储系列——RAID原理

大话存储系列5——RAID原理2014-03-26 09:50:35| 分类:linux恢复|举报|字号订阅整理自网络和大话存储2:1、预备知识:条带化当多个进程同时访问一个磁盘时,可能会出现磁盘冲突。

大多数磁盘系统都对访问次数(每秒的I/O 操作,IOPS)和数据传输率(每秒传输的数据量,TPS)有限制。

当达到这些限制时,后面需要访问磁盘的进程就需要等待,这时就是所谓的磁盘冲突。

避免磁盘冲突是优化I/O 性能的一个重要目标,而I/O 性能的优化与其他资源(如CPU和内存)的优化有着很大的区别,I/O 优化最有效的手段是将I/O 最大限度的进行平衡。

条带化技术就是一种自动的将I/O 的负载均衡到多个物理磁盘上的技术,条带化技术就是将一块连续的数据分成很多小部分并把他们分别存储到不同磁盘上去。

这就能使多个进程同时访问数据的多个不同部分而不会造成磁盘冲突,而且在需要对这种数据进行顺序访问的时候可以获得最大程度上的I/O 并行能力,从而获得非常好的性能。

很多操作系统、磁盘设备供应商、各种第三方软件都能做到条带化。

图1 描述的是一个未经条带化处理的连续数据的分布,图2 描述的是一个已经被条带化处理的连续数据的分布,从中比较,我们可以发现图 2 中对连续数据的读写都有最大的并发能力。

图 1. 未经条带化处理的连续数据图 2. 已经被条带化处理的连续数据由于条带化在I/O 性能问题上的优越表现,以致于在应用系统所在的计算环境中的多个层次或平台都涉及到了条带化的技术,如操作系统和存储系统这两个层次中都可能使用条带化技术。

影响条带化效果的两个因素当对数据做条带化时,数据被切成一块块的小数据块,各小数据块分布存储在不同的硬盘上。

从这个描述中我们可以看出,影响条带化效果的因素有两个,一是条带大小(stripe size),即数据被切成的小数据块的大小,另一个条带宽度(stripe width),即数据被存储到多少块硬盘上。

条带宽度(stripe width)是指同时可以并发读或写的条带数量。

这个数量等于RAID中的物理硬盘数量。

例如一个经过条带化的,具有4块物理硬盘的阵列的条带宽度就是4。

增加条带宽度,可以增加阵列的读写性能。

道理很明显,增加更多的硬盘,也就增加了可以同时并发读或写的条带数量。

在其他条件一样的前提下,一个由8块18G硬盘组成的阵列相比一个由4块36G硬盘组成的阵列具有更高的传输性能。

条带大小(stripe size)有时也被叫做block size, chunk size, stripe length或者granularity。

这个参数指的是写在每块磁盘上的条带数据块的大小。

RAID的数据块大小一般在2KB到512KB之间(或者更大),其数值是2的次方,即2KB,4KB,8KB,16KB这样。

条带大小对性能的影响比条带宽度难以量化的多。

·减小条带大小:由于条带大小减小了,则文件被分成了更多个,更小的数据块。

这些数据块会被分散到更多的硬盘上存储,因此提高了传输的性能,但是由于要多次寻找不同的数据块,磁盘定位的性能就下降了。

·增加条带大小:与减小条带大小相反,会降低传输性能,提高定位性能。

根据上边的论述,我们会发现根据不同的应用类型,不同的性能需求,不同驱动器的不同特点(如SSD 硬盘),不存在一个普遍适用的"最佳条带大小"。

所以这也是存储厂家,文件系统编写者允许我们自己定义条带大小的原因。

不同条带大小,对于文件如何存储有很大的影响,请看下边这两幅图的对比:这是一个由4块硬盘组成的RAID0阵列,左边的条带大小为4KB,右边的条带大小为64KB。

左边的图中的每一条细格表示4KB大小。

图中红色文件大小是4KB,蓝色文件大小20KB,绿色文件大小为100KB,紫色文件大小为500KB。

从图中我们可以看到,不同条带大小对"中型大小"文件的影响是很大的。

对于红色的4KB文件来说,不论条带是4KB还64KB,它都分布在一块硬盘的一个数据块上。

而对于紫色的500KB文件来说,无论条带是4KB还是64KB,它都会被分布在四块硬盘上。

但是对于蓝色20KB的文件来说,如果采用64KB的条带大小,则它就会被分布在一块硬盘上,而不是像4KB条带时那样分布在四块硬盘上。

同样绿色的100KB文件在64KB条带时,会被分布到2块硬盘,而4KB条带时则分布到4块硬盘上。

可以看到,增加条带大小可以明显地增加定位性能。

在上边的例子中,条带宽度理所当然是4。

下图是使用16KB条带时的文件分布图,可以对应参考理解一下。

那么我们应该选择多大的条带大小呢?最好的办法是尝试不同组合,根据应用的不同得到自己的经验规律。

另外,不要过高估计不同条带大小间的性能差异。

它有可能会差的很大,尤其是设置成4KB和256KB 这样两个相对极端数值的时候,但对于相差不大的数值,它们的性能差异可能就不明显。

对于大多数应用来说,可以参考这样的经验法则:大量的小文件读写时,采用较大的条带大小(定位效果好);少量的大文件的快速访问,采用比较小的条带(传输速率高);如果要平衡这两者,那么采用中间值。

硬RAID与软RAID的区别:通过用硬件来实现RAID功能的就是硬RAID,比如:各种RAID卡,还有主板集成能够做的RAID的都是硬RAID。

通过用操作系统来完成RAID功能的就是软RAID,比如:在Windows2000操作系统下,用三块硬盘做的RAID5.不过软件实现RAID有很多缺点,比如占用内存空间,占用cpu资源,软件raid程序无法将安装有操作系统的那个磁盘分区做成raid模式。

因为raid程序是运行在操作系统之上的,所以在启动操作系统之前,是无法实现raid功能的。

也就是说,如果操作系统损坏了,raid程序也就无法运行,磁盘上的数据就成了一度无用的东西。

因为raid磁盘上的数据只能实现相应raid算法的程序才能识别并且正确读写。

如果没有相应的raid程序,则物理磁盘上的数据仅仅是一些碎片而已,只有raid程序才能组合这些碎片。

不过,目前大多数的raid程序都会在磁盘上存储自己的算法,信息,一旦操作系统出现了问题,或者主机硬件出现了问题,就可以将这些磁盘连接到其他机器上,在安装相同的raid软件。

raid软件读取在硬盘上固定区域的raid信息后,边可以继续使用。

总的来说,软件实现的raid缺点太多,硬件raid卡才是主流。

7种RAID技术简介:首先说明一下,这个是我自己用来回忆的,具体的raid0-6的标准,技术实现还是各位自己google吧,不过如果你也是有些熟悉,但是分不清楚,下面的整理会让你的思路清晰一点:RAID 0:RAID 0连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据传输率,但它没有数据冗余,因此并不能算是真正的RAID结构。

RAID 0只是单纯地提高性能,并没有为数据的可靠性提供保证,而且其中的一个磁盘失效将影响到所有数据。

因此,RAID 0不能应用于数据安全性要求高的场合。

另外顺便讲点其他的名词,就看上面的图吧:条带长度(stripe length):一个条带所包含的所有数据块,或者总的字节数,或者扇区的个数(只不过单位不一样)。

段(Segment):一个条带在一块硬盘上所占有的数据块的数量或者说扇区的个数(也是单位一样罢了),顺便说下,一个扇区512B,一个块一般4KB=8个扇区。

条带深度(Stripe depth):一个段(segment)包含的数据块数量,或者说扇区数,或者说总的字节数(还是单位不一样罢了)条带宽度(Stripe width):一个条带跨越的磁盘数量。

RAID 1:它是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据。

当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID 1可以提高读取性能。

RAID 1是磁盘阵列中单位成本最高的,但提供了很高的数据安全性和可用性。

当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据。

RAID 0+1:也被称为RAID 10标准,实际是将RAID 0和RAID 1标准结合的产物,在连续地以位或字节为单位分割数据并且并行读/写多个磁盘的同时,为每一块磁盘作磁盘镜像进行冗余。

它的优点是同时拥有RAID 0的超凡速度和RAID 1的数据高可靠性,但是CPU占用率同样也更高,而且磁盘的利用率比较低。

RAID 2:将数据条块化地分布于不同的硬盘上,条块单位为位或字节,并使用称为“加重平均纠错码(海明码)”的编码技术来提供错误检查及恢复。

这种编码技术需要多个磁盘存放检查及恢复信息,使得RAID 2技术实施更复杂,因此在商业环境中很少使用。

可以简单的理解校验是用的加减法则,如果数据盘大于两个,比如1+1+0=10(三个数据盘,两个个校验盘),这个时候校验数据是两位:10,是向每个磁盘写的数据量的两倍,也就是说需要两块校验盘来实现,这样一来,对磁盘的浪费就比较严重了。

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

如果一块磁盘失效,奇偶盘及其他数据盘可以重新产生数据;如果奇偶盘失效则不影响数据使用。

RAID 3对于大量的连续数据可提供很好的传输率,但对于随机数据来说,奇偶盘会成为写操作的瓶颈。

可以这样理解,它与raid2相比,最大的好处是无论数据盘有多少块,只用了块校验盘,这事怎么实现的呢?很简单,逻辑的“与或”运算来实现(1 xor 0 = 0 xor 1 = 1 ;1 xor 1 = 0 xor 0 =0 ),比如说1 xor 0 xor 1 =0(注意校验结果是1位,这样无论式子左边有几个数据(代表了几块盘,右边只需要一块校验盘,即一个校验位)),另外raid3 改进了raid2以位为单位的写入规则,改成了以段(或者说块)为单位的写入。

RAID 4:RAID 4同样也将数据条块化并分布于不同的磁盘上,但条块单位为块或记录(相比月raid3,加大了条带的深度,这样希望每次IO只用到部分磁盘,期望达到并发IO的目的,但是没有考虑到校验盘的IO【瓶颈问题,这就是RAID4的败笔)。

RAID 4使用一块磁盘作为奇偶校验盘,每次写操作都需要访问奇偶盘,这时奇偶校验盘会成为写操作的瓶颈,因此RAID 4在商业环境中也很少使用。

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

在RAID 5上,读/写指针可同时对阵列设备进行操作,提供了更高的数据流量。

RAID 5更适合于小数据块和随机读写的数据。

相关主题