存储入门 – RAID技术(大图解释)
对于RAID,一直都知道个概念,但是对于细节没有去仔细的研究过。正好昨天Training的时候, 老师讲解了RAID的内容,所以顺便就整理一下。很多内容都是参考了ISMv2这本书。
RAID中用到的技术主要有
1. Striping
2. Mirroring
3. Parity
Striping(条带化): 就是将一块连续的数据分成很多小部分并把他们并行的存储到不同磁盘上去。其中涉及到几个术语 Strip,Stripe,Strip size,Stripe size。Strip就是在每个磁盘上预先定义好的一定数量的连续的Block。在RAID中所有磁盘上的Strip一起叫做一个Stripe。Strip size (Stripe depth)指的是一个strip中的最大数据大小即block number* block size。Stripe size指的就是stripe的大小即disk number * strip size。
Mirroring (镜像):就是将同一数据存储在两块不同的硬盘上,从而产生该数据的两个copy。当其中一块faulted,替换了新disk之后,Controller会自动将好的磁盘中的数据copy到新的磁盘中。
Parity(奇偶校验):主要是来为Striped RAID提供数据保护功能。利用位异或(XOR)的算法,将产生的校验值额外进行保存在磁盘上。可以是额外的一块磁盘,也可以分布在所有磁盘上。注意在ISM书中P56的例子是错误的。异或并非例子中的加减操作。关于Parity的计算可以参考:RAID 5 Parity. What is it, and how does it work? 。 写的很好理解。
对于这Striping,Mirroring,Parity有了基本的理解之后。下面就是RAID类型的介绍。RAID主要有这几种类型RAID 0, 1, 3, 5, 6, 10, 01。
RAID 0
直接采用Striping的技术,过程如下图所示。
读:对于每一个文件的读操作,RAID controller会去读取这个文件所有的strip,是一个并发的I/O,所以读性能比较好的。Disk数量越多,读性能越好。
写:和读操作类似,RAID Controller会分成多个strip写到各个disk中,所以写的性能比较好。
性能:读写性能比较好。适合高I/O的情景。
优点:I/O性能好。
缺点:没有数据保护。
RAID 1
采用mirroring技术,能够提够数据容错能力(fault tolerance)。这个也很好理解。过程如下图所示。
RAID 10
也叫做striped mirror。Disk 先做mirror,然后对这三个RAID1做striping。
RAID 01
是先将其中一半disk做RAID 0, 然后再做mirroring。
两者之间的性能和可用空间是一样的,在容错方面RAID 10 要优于RAID 01,在数据rebuild时候RAID 10 也是有优势的,所以RAID 01 很少见到。
1. 容错方面:由于RAID 10 是先做mirror.是多组RAID,可以允许最多一半的disk损害,前提是不在一个RAID1中。而RAID 01中,如果一块disk fault,那么这个RAID 0就fault。另外的一个RAID 0 无法容忍disk fault的情况,否则就是DL。
2. Rebuild过程: RAID 01 中,假设其中一块disk fault,如果要recovery。那么需要另外一个RAID 0 来做Mirror,将整个stripe的数据copy到对应的disk中,而对于RAID 10 来说,只需要去copy一个disk就可以了。
RAID 3
RAID 3 和RAID 5 类似,只是Parity 信息都写到一个disk中,由于每个写操作,会产生2 Reading+ 2 Writing的操作。并且其中的一个R ,W都是在这个Parity 的disk上,所以很容易造成这个disk的fault。实际中用的也不多。
RAID 5
RAID 5的Parity信息是写在各个disk中的,所以没有RAID 3 的单个disk瓶颈。
RAID 6
RAID 6中有两个Parity的信息,是写在各个disk中的,可以容忍两块disk的fault。具体算法牵扯到线性代数中的矩阵,大学的学的基本忘干净了。可以参考 这篇文章:RAID6算法解析。
关于不同RAID Level的比较可以参考下图:
References:
1. RAID 5 Parity. What is it, and how does it work?