磁盘成本低,但是访问速度有限,每次访问的平均时间是10ms左右,非常影响了系统的性能,如何提高磁盘访问速度?通过并行访问,处理读数据的速度将翻倍,因为读请求可以发送到任意一张盘中。每个读操作的传输速率和单一磁盘系统中的传输速率一样,只是单位时间内读操作的数目翻倍了。一般通过在多个磁盘上进行数据拆分来提高传输速率。
数据拆分的形式也有很多:将每个字节按比特分开,存储到多个磁盘上,叫做比特级拆分。将块拆分到多张磁盘上,叫做块级拆分。
块级拆分是最常用的拆分形式。当我们要将8个逻辑块存存储到磁盘上时,我们可以把它们分别存储到编号为0,1,2,3四张磁盘上,第i块数据存储在第(i mod 4)张磁盘上,这样我们每次读这些数据时,我们可以从4张磁盘平行读取。
不管什么形式,并行磁盘系统都是通过一下原理来提高性能的:
(1) 负载平衡多个小的访问操作,以提高访问操作的吞吐量
(2) 并行执行大的访问操作,以减少大访问操作的响应时间
4、RAID
镜像虽然具有很高的可靠性,但是每一张逻辑盘都需要两张物理盘,成本太高;数据拆分虽然提高了速率,但是并没有保证可靠性。于是又提出了一系列的替换方案,这些方案具有不同的成本和性能之间的权衡,并且把这些方案分为若干个RAID级别。这些方案其实都是基于奇偶校验和数据拆分的思想。
RAID 0级:只是简单的块级拆分,而没有任何冗余的磁盘阵列。这个级别的RAID仅仅只是提高了从磁盘中读取数据的速度,但是没有可靠性的保障,当一个磁盘发生故障,没有任何办法可以恢复。
RAID 1级:使用块级拆分的磁盘镜像(很多企业用RAID 1+0级指代拆分的镜像,而用RAID 1级指代不使用拆分的镜像)。因为有数据拆分,所以可以通过并行来提高读取速率,因为有镜像,所有也有很高的可靠性,同时数据重建很简单,提供很高的写性能,但是成本较很高。
RAID 2级:使用奇偶校验位,也叫做内存风格的纠错码(ECC)组织结构。
RAID 3级:
位交叉的奇偶校验结构,是对RAID 2级的改进。磁盘控制器能够检测出一个扇区能否正确地读出,所以可以通过单一的奇偶校验位来检错和纠错。如果一个扇区被破坏,系统就可以准确地知道哪个扇区被破坏,对扇区的每一位,系统通过计算其他磁盘上对应扇区的对应位的奇偶性来判断。比如我们假设有三个磁盘,每个磁盘只有一个扇区,每个扇区只有八位。
盘1:11110000
盘2:10101010
盘3:00111000
我们还需要一块冗余盘作为奇偶校验位:
盘4:01100010
上述八位中,每一位中4个盘中的1个数和都是偶数。如果盘2上数据由10101010变为11001100,我们就可以通过其余几个盘来恢复盘2的数据。任何一个盘中的数据都是其它盘中对应数据的模2和。
RAID 4级:块交叉的奇偶校验组织结构,使用块级拆分,在一张独立的磁盘上为其它N张磁盘上对应的块保留一个奇偶校验块。可以并行执行多个读操作,从而产生较高的总I/O传输率,写大量数据也有很高的传输率(数据和校验位可以并行地写)。但是数据量很小时就不能并行地执行,写一个块需要同时访问存储磁盘和奇偶校验磁盘,因为奇偶校验磁盘需要更新。
RAID 5级:块交叉的分布奇偶校验位的组织结构,是对RAID 4级的改进。RAID 5级将数据和奇偶校验位都分布到所有的N+1张磁盘中,所有磁盘都能参与到读操作中。对于每个由N个逻辑磁盘块,需要N+1个物理磁盘块,一张磁盘中对应的块存储奇偶校验位,剩下的N张磁盘中对应的块存储数据。
RAID 6级:P+Q的冗余方案。类似与RAID 5级,只是存储了额外的冗余信息,用来应对多个磁盘同时发生故障的情况。
5、如何选择RAID级别
具体问题具体分析,一般在应用中主要考虑以下因素:
(1) 所需额外存储带来的花费
(2) 在I/O操作数量方面的性能需求
(3) 磁盘故障事的性能
(4) 数据重建过程(故障恢复)中的性能
RAID 0级别只能用于数据安全性要求不高的应用中;
RAID 3级是对RAID 2级的改进,RAID 5级是对RAID 4级的改进,我们只需要考虑RAID 3级和RAID 5级即可。RAID 3级是比特级拆分,RAID是块级拆分,块级拆分对于大量数据的传输有与RAID 3级同样好的传输速率,对少量数据的传输使用更少的磁盘。RAID 6级比RAID 5级有着更高的可靠性,可以用于数据安全十分重要的应用。RAID 1级提供了最好的写操作性能,RAID 5级比RAID 1级具有更低的存储负载,但是写操作需要更高的时间开销,所以RAID 5级应用与进行读操作,而写操作较少的应用上。
如何在Linux上构建 RAID 10阵列
Debian软RAID安装笔记 - 使用mdadm安装RAID1
Linux实现最常用的磁盘阵列-- RAID5