RAID磁盘阵列介绍

2019-01-16  本文已影响0人  kivinsae

随着手头的钱越来越多,很多人开始蠢蠢欲动想要构建个人或者家庭级别的磁盘阵列用来扩展PC存储,或者说想要在家里安装一个私人的本地NAS,或者有不可名状的文件需要落地家庭IDC环境,又或者单纯是个土豪,需要在大得不得了的地下室做一个随时可以点播的家庭影院。这个时候,海量的存储需求就来了,但是往往个人或者家庭对于如何设置合理的、高可用的存储架构没有概念,导致往往用的是裸盘阵列。结果就是一旦挂了就全挂了,哪怕运气好不挂,随着时间的流逝,最终总有一点会出现磁盘问题,那个时候集体更换迁移又是一个让人想要撞墙的事情。

所以笔者在这篇短文里,会用最短的篇幅给读者介绍,来自于企业环境并且已经应用许久的RAID卡磁盘阵列技术!

一、概念和支持

首先要明确一点,那就是多数的PC主板是不支持RAID阵列的,但是很多高端的主板会有原生支持RAID技术,具体的情况需要查询主板提供商。而很多服务器级别主板,类似于X399这种,往往是支持的,甚至有些不需要额外购置raid卡也能进行raid阵列管理。

但是从现实的角度来说,无论磁盘支持不支持raid卡设置,我们都应该买一块PCI接口的真正的RAID卡来进行磁盘阵列管理。因为主板即便支持RAID,基本上也都是软件层面的软raid,对于磁盘的寿命和性能有不小的折扣损失。况且随着多显卡并火渐渐退出主流市场,不再被黄老板等支持,目前主流主板的PCI接口一定是有多的,同时raid卡便宜且自带断电保护电池,可谓是性价比极高的硬件了。

二、RAID种类介绍和优劣

历史上RAID阵列的种类非常多,总计如下:

但是由于成本和性能的优劣原因,目前单种类RAID阵列主要就剩下RAID0,RAID1,RAID5,以及比较有意思的RAID6。笔者也会着重讲解一下这几种阵列的原理和优劣。

1、RAID0
RAID0 示意图
2、RAID1
RAID1 示意图
3、RAID5
RAID5 示意图
4、神奇RAID6

在RAID5里面用来校验的磁盘机制,主要使用了异或计算,从而能够容忍任意一块磁盘的损毁情况,并且在换盘后通过rebuild来对新盘进行重构。但是在RAID6中,因为需要容忍两块磁盘损毁,第二块奇偶校验磁盘的算法就有所不同,比较复杂了。

如果出现一块磁盘损坏的情况,就可以和RAID5一样处理,Rebuild完事。
那么关键来了,如果两块磁盘挂了的话,就需要用到全新的技术了。
我们首先引入一个m=2^k的伽罗瓦域(有限域),对于一个k次不可约不等式 p(x) , GF(m)\cong F_2[x]/(p(x))。同时一块数据可以记录成d_{k-1},d_{k-2},d_{k-3}...d_0,其中d_i是0或者1,对应伽罗瓦域里面的元素d_{k-1}x^{k-1}+d_{k-1}x^{k-1}+...+d_1x+d_0,令D_0,...,D_n\in GF(m)对应的磁盘条带里面的数据,用这个方法编码成域里面的元素。如果g是域的某一个生成元,并且\oplus表示域的加法(可以看成异或运算),并列表示域的乘法,那么PQ可以表示成:
P=\bigoplus_i D_i = D_0\oplus D_1\oplus D_2 \oplus ... \oplus D_{n-1}
Q=\bigoplus_i g^i D_i=g^0 D_0\oplus g^1 D_1\oplus g^2 D_2\oplus ...\oplus g^{n-1}D_{n-1}
所以,如果两块磁盘失效的时候,就需要通过P和Q来重新把数据算出来,这个过程使用了域论,相对比较复杂。我们通过例子来说明,假如在一个n块磁盘组成的磁盘阵列D_0,D_1,D_2...D_{n-1}里面,如果D_iD_j(其中i \neq j),通过域算法我们可以求出两个域A和B,其中A=D_i\oplus D_jB=g^iD_i\oplus g^jD_j
展开两式可得:
A=\bigoplus_{\xi:\xi\neq i \ and \ \xi\neq j} D_\xi =P\oplus D_0\oplus D_1\oplus...D_{i-1}\oplus D_{i+1}\oplus...D_{j-1}\oplus D_{j+1}\oplus...D_{n-2}\oplus D_{n-1}
B=\bigoplus_{\xi:\xi\neq i \ and \ \xi\neq j} g^\xi D_\xi =Q\oplus g^0 D_0\oplus g^1 D_1\oplus...g^{i-1} D_{i-1}\oplus g^{i+1}D_{i+1}\oplus...g^{j-1} D_{j-1}\oplus g^{j+1} D_{j+1}\oplus...g^{n-1} D_{n-2}\oplus g^{n-1}D_{n-1}
等式B的两端同时乘上g^{n-i},加到上一个等式可得:(g^{n-i+j}\oplus 1)D_j=g^{n-i} B\oplus A,从而可以求出D_j,然后再求出D_i
这个过程里面对Q的计算非常耗费CPU,所以一定要上硬件RAID,因为RAID带有专用处理器专门干这个。

5、融合磁盘阵列RAID10/01
RAID10 示意图
RAID01 示意图
6、RAID50/60

三、故障解决方案

好了,现在我们都知道各种磁盘RAID阵列的优劣和构建方式了。对于家庭和个人来说我觉得还是RAID5最性价比高,但是如果你的磁盘阵列里磁盘数量大于8了,其实就可以考虑RAID6了。其他的RAID构成的话考虑到性价比,其实对个人用户不太合适。但是安全性和可用性需求极高的企业,除了hadoop用的分布式裸盘以外,其他最好还是RAID10或者RAID1,甚至RAID60。

下面来说说遇到故障:

最后,公式部分来自维基,很通俗易懂,思路也很清晰,有空去看一下域论也挺好(不会去看的

上一篇下一篇

猜你喜欢

热点阅读