数据存储在单个磁盘上,存在以下固有缺陷:
- 访问速度慢,单一的I/O接口,无法实现并发
- 容量小,尽管单个磁盘容量不断提升,但是仍然无法满足爆炸式增长的数据存储需求
- 安全性差,容易成为单点故障,安全性较差
如果单个磁盘无法满足访问速度,容量,安全性要求,那么可以使用多个磁盘组合起来提供存储服务,RAID 技术就对其做出了一些有益的尝试。
单个磁盘数据是以扇区作为基本单位进行存储和访问的,RAID 抽象出一个类似于扇区的最小数据访问单位 -- 条带(stripe)。它并非将磁盘再次物理格式化为条或者带,而是想办法在多个磁盘之间建立一种逻辑映射关系,通过这种逻辑映射关系,RAID可以将多个物理磁盘抽象为一个容量更大,I/O并发程度更高的虚拟磁盘,以条带作为基本单位进行管理。

- 单个条带所跨过的磁盘个数,称为条带宽度
- 单个条带在单个磁盘上分配的字节数,称为条带深度,条带深度一般为磁盘基本块(指访问磁盘的最小粒度,扇区)的整数倍
目前,主流的RAID技术有以下几种基本模式:
RAID0
RAID0 将多个磁盘以条带为单位重新划分,形成一个地址空间在逻辑上连续的虚拟磁盘,其I/O能力以及可用存储空间是所有磁盘之和,但是不具备容错能力。一个典型的RAID0系统如图:

RAID1
RAID1 将同一份数据重复写入两个或多个磁盘,即每个磁盘存储的内容都是完全相同的。因此RAID1 也称为镜像,它能提供的I/O能力以及可用存储空间只有所有的磁盘的 (N为镜像个数)。由于只要任意一个镜像存活,就可以确保数据不会丢失。

RAID5
RAID5 是以一个或多个基本块作为条带深度均分数据,同时基于异或运算生成一个于数据块同样大小的校验块。

假设一块磁盘坏了(红色),那么我们可以通过剩下的磁盘中的数据经过异或运算得到故障磁盘的数据

因此RAID5 能够提供的 I/O 能力以及可用存储空间为所有磁盘的,其中 N 为组成RAID5的磁盘个数,即RAID4的条带宽度。
由异或运算的性质,如果条带中任意一个数据块出错,都可以通过其他仍然正常的数据块于校验块执行异或操作进行数据恢复,因此RAID5具有一定的容错能力,至多允许一块磁盘异常。并且,由于正常情况下并不需要读取校验块,为了避免浪费读带宽。RAID5条带中校验块的位置不是固定不变的,而是不停地在磁盘之间跳动。

RAID6
RAID6 在 RAID5 的基础上进一步提升了容错能力,允许RAID阵列中同时有两块磁盘故障。原因在于 RAID6 为每一个条带增加了一个校验块,即每个条带同时包含两个校验块,因此RAID6的空间和I/O利用率都比RAID5低,同时生成校验块的算法也更加复杂。
参考资料
1、https://zhuanlan.zhihu.com/p/80361528
2、《ceph之RADOS设计原理与实现》
网友评论