曾就职于阿里巴巴担任Oracle DBA,MySQL DBA,目前在新美大担任SRE。[是普罗米修斯还是一块石头,你自己选择!] 欢迎关注微信公众号 “自己的设计师”,不定期有原创运维文章推送。
分类: Mysql/postgreSQL
2014-01-26 19:47:59
RAID: a natural solution to narrow the gap
Stripping data across multiple disks to allow parallel I/O, thus
improving performance
RAID在stroage级别提供了不同的数据保护和性能优化措施,比如常见的RAID0,RAID1,RAID10,RAID01,RAID5,这里就这些不同形式的RAID进行分析。
RAID0
RAID0 通过条带的方式,将数据通过RAID
CONTROLLER分布到不同的磁盘/磁盘组上,这种方式带来了一个极大的好处便是提高了磁盘的吞吐量(当然这是对于单个磁盘而言),提高了磁盘IO的性能!
但同时,由于RAID0又是如何实现的呢?
通过这个图我们可以很清晰的看到RAID0原理,每次进行数据写入,RAID0总是在两个磁盘/磁盘组交叉进行写入。对于写入量比较的APP而言,使用RAID0可以带来写入性能的提升。特别是对于
concurrent write比较高的应用而言,能在磁盘吞吐量上带来倍数级的提升!当然,当出现某个磁盘/磁盘组(至少一个)磁盘损坏的情况下,会导致数据损丢失。对于数据安全比较重要的应用而言,不是一个靠谱的选择。
优点:
1.提高了IO的性能。
缺点:
1.数据安全性低,坏盘的情况下可能导致数据无法恢复。
2.磁盘/磁盘组的容量来自于最小磁盘/磁盘组容量的计算。(比如两个磁盘做RAID0,A盘100G,B盘500G,最终容量为2*100=200G)。
Best write performance(due to no updating redundancy information)
Not best read performance(Redundancy schemes can schedule requests on the disks with shortest queue and disk seek time .
RAID1和RAID0相比,能提供更高的安全性,采用mirror形式,将每份数据一式两份存储在不同的磁盘/磁盘组上。这样当单块盘/磁盘组损坏的情况下,换进的新磁盘,能够快速从另一个好的磁盘copy
数据来保证数据的安全性(High Availability).当然,缺点也是很明显的,磁盘的使用率最多只有1/2。
优点:
1.数据冗余,提供了较高的安全保障,在单块盘/磁盘组出现故障的情况下仍然可用。
缺点:
1.磁盘的利用率最多只有1/2。(比如,有两块盘组成的RAID1,A盘100G,B盘500G,最终的容量只有100G)。
2.写带宽浪费。(每个logical write会伴随两个phyical writes)。
RAID01
RAID01相比RADI0和RAID1,可以说是这两者的组合,不过在先后顺序上有差别。RAID01是先将单个磁盘/磁盘组做RAID0,然后将整个RAID0当做RAID1的一部分,再做mirror。简而言之,就是先strip,然后mirror。
优点:
1.不仅有stripe,增加数据的写入性能,同时增加的mirror,提高了数据的安全性和读取性能。提高较快的读写性能,增加了磁盘的吞吐量。
2.最多可以损坏1/2个磁盘/磁盘组(比如上图中的第一组,第四组)。
缺点:
1.磁盘容量的使用率较低,最多只有1/2的使用率。
RAID01不仅在性能上和RAID0接近,在安全上也几乎达到了RAID1的标准(可以损坏1/2个磁盘/磁盘组),因此,在安全和性能都要求比较高的情况下,RAID01是一个不错的选择。
RAID10
Raid01是先做strip,在做mirror。而Raid10正好相反,是先做mirror,再做strip。那么RAID10和RAID01又有什么区别呢?这里来分析一下.
从上图我们可以很容易对比出来,其实在容量和性能上RAID10和RAID0没有什么差别,两者最大的差别就 fault tolerance的差别。在RAID01上,因为做了mirror,所以只有两个group互为Mirror。
当每组中,互为镜像的磁盘/磁盘组损坏,RAID01即损坏。而对于RAID10,由于先mirror后strip,所以可以提供多个groups,我们图上看到的是三个,这个在每个 组中损坏一个磁盘的情况下仍然可
以继续提供访问。相比而言,RAID10在高可用方面做的更好。
相比RAID01,RAID10具有更高的可用性。
RAID4
假如:
A=1101 B=1100 C=1111 则AP=1101 xor
1100 xor 1111=1110
此时假如A数据损坏,则A’=AP
xor B xor C=1101
XOR:
1110 xor 1100 = 0010 xor 1111 = 1101
当然这里运算的都是4bit,而对于64K的strip size,则需要做64*1024=65535
bit的xor运算,所以对于使用raid4来讲,好的位运算engine,能加快数据的写入速度。
可以看到上述 :
可以看到,RAID4在写入上面,可能并没有RAID10快,但在磁盘使用率上,还是大于RAID10。
优点:
缺点:
1.单块盘/盘组做为校验盘,可能会出现lock contention。
2.每次逻辑写入要2次物理读,2次物理写。
3.单块盘/磁盘组损坏的情况下,恢复的时间可能较长。
RAID5
Raid5其实是Raid4的变种,相对于raid4,raid5将校验位放到多个磁盘/磁盘组上,这样减少了lock
contention,下面来看看RAID5的具体实现.
( Left-Symmetric)
RAID5的其他形式:
Single disk failure tolerant array
优点:
1. 和raid4相比,消除了校验盘的bottleneck 。
缺点: