首页 > 代码库 > [OpenStack 存储] 说说RAID0 1 2 3 4 5 6 10 01 30 50, 软RAID, 硬RAID
[OpenStack 存储] 说说RAID0 1 2 3 4 5 6 10 01 30 50, 软RAID, 硬RAID
最近在思考一种廉价方便的cinder集成LVM driver的方式,那就是cinder+LVM+多块盘组成的RAID硬盘。这样的情况下就要根据读写需求和可用资源考虑采用什么样的RAID,以及怎样选择实现raid的方式,有两种分别为硬件RAID和软件RAID,为了温习一下,就顺便画些图(图中使用的硬盘数都是该RAID下需要的最少硬盘数)总结下各个RAID技术。
软RAID与硬RAID
硬RAID可以理解为需要RAID卡,通过RAID卡实现对多块盘的管理, 把多块盘组成RAID冗余阵列,如何组合成RAID,关键就是RAID卡如何实现寻址。
软RAID 通过操作系统层次的软件实现RAID,如我们熟悉的linux下MD软件,命令行为mdadm,软raid优点是不需要花费买raid卡的钱,但是软raid耗费内存,而且性能没有硬件RAID强,功能也没有硬件raid多。
接着下面介绍各种RAID技术
一、RAID 0
采用条带技术,以字节或位为单位按条带(各个盘起始偏移量相同,之后的一定数量字节的区段)在多个磁盘并行写,可以提高I/O读写性能,但它没有像RAID1一样有数据冗余,一但硬盘故障, 就玩完 。结构如下图。
二、RAID 1
采用镜像技术,每次写的时候, 要在另一块盘上就拷贝,这就是为了容灾,写性能降低。数据结构如下图
三、RAID 2
首先采用了条带技术,并通过增加冗余盘存放为每个比特进行海明码编码的数据, 这样可以实现校验和纠错,需要把2的n次幂块盘作为校验数据盘。结构如下图
四、RAID 3
采用条带技术, 写入时以比特为分区写,同时增加一块盘存放奇偶校验位数据,这样的话。当数据盘坏了一块, 重新放上硬盘可通过校验盘和其他数据盘恢复数据。结构如下图
五、RAID 4
首先为什么有RAID4,是为了提高并发概率而生,它在RAID3基础上,采用更大的分区来作为单位写入数据,为什么要提高写入数据块大小呢,假设原来在RAID3时候要写入A和B 数据到第一块磁盘,A数据正在占用校验盘,那么B数据需要等待, 那现在提高了写入数据大小了, 那A和B也许就可以组成一个大块一起写入了, 这就是实现了这种伪并发。这种RAID需要前期写入时进行数据的优化,NetAPP的WAFL文件系统就使用RAID4. 一般RAID4很少用。
六、 RAID 5
RAID 5采用真正的实现了并发I/O,不会像RAID3一样有热点盘,它把奇偶校验数据平均分配到多块磁盘上,如何能提高并发I/O呢,比如有四块盘,假设第一块磁盘写入A数据时候校验区在第二块磁盘,此时第三块和第四块磁盘是空闲的,当在某个条带写B数据到第三块盘,而第四块盘存B数据的校验位时, 这样A数据和B数据就可以同时读写了。
七、 RAID 6
RAID 6是在RAID5 的基础上增加了一个校验区, 这个每个条带都有两个校验区, 他们采用不用的校验算法,数据的可靠性增强
接下来介绍几种组合RAID
一、RAID01
总磁盘数为N,在每个N/2块盘做RAID0, 以下图四块盘为例所示,有镜像有条带, 但是冗余度不如RAID10好,接下来RAID10中总结
二、RAID10
下图顺序写入D1,D2,D3,D4,数据块分布分布如下图,其实就相当与奇数盘组成raid0, 同时偶数盘作为奇数盘的备份,它与RAID01相比,优势在于,只要互为镜像的两块盘不同时坏,数据就能正常读写。而RAID01中组成raid0的数据盘坏一块都不行,他要求组成raid0的一组盘完好时才能正常的读写。以图示的四块盘为例,RAID10能接受{1,3} {1,4} {2,3} {2,4} 块盘坏,而RAID01只能接受{1,2} {3,4}块盘损坏。
三、RAID30
与RAID50一样,加一层RAID0 就是把数据弄的更分散,读写性能更高。容错能力更强。
四、RAID50