在做数据库维护的时候,经常会跟磁盘打交道,对于“Raid”这个词,肯定大家都不陌生,今天我们讲讲Raid阵列。
01、Raid概念
Raid全程是(Redundant Array of Idependent Disks)也叫独立磁盘冗余数组,简单理解就是磁盘的一种阵列排布。
它的基本原理就是将很多廉价的磁盘通过拼接的方法组合在一起,实现一个磁盘组,对外提供服务,符合了"人多力量大"的宗旨。
如何拼接?简单画一下,就能明白:
我们假设图中Disk有500G,那么当我们通过拼接的方法,将8个Disk拼接在一起,那么这个"大磁盘"的容量就会变成4TB,而且,它的吞吐也会比单个磁盘更好。因为整体来看,这个大磁盘是单个磁盘性能的线性叠加。
像上面那样,物理上一个一个的磁盘,就被我们拼接成了一个“逻辑上的大磁盘“,操作系统也会将这个磁盘阵列当做一整块磁盘来对待。
通常我们做Raid,是想要提升磁盘的某些方面的性能:
1、增强磁盘的IO能力、容量和整体效能。
2、增强磁盘的冗余度或者高可用程度。
3、对数据成块存取,多块盘同时读取,减少磁盘寻道时间,提升磁盘响应速度
02、常见的Raid类型
最常见的Raid模式,分为Raid 0 、Raid 1、Raid 5、Raid 1-0、Raid0-1等。下面我们简单介绍:
Raid 0 (并行阵列):
其实,我们上述图中拼接方法,就是一个Raid 0 的阵列。它就是一个简单的拼接,磁盘之间没有冗余,并行进行I/O操作:
优点:
多块磁盘的效能是单个磁盘效能的线性叠加。
缺点:
没有冗余能力,某一个磁盘坏了,会导致整个Raid阵列都不可用。
Raid 1(镜像阵列):
至少需要2组及以上的磁盘互为镜像,如下图:
注意,Raid 1的方法,虽然也使用了8块盘,但是黄色部分和绿色部分互为镜像,存储的数据是一致的,所以8块盘实际的存储容量只有500G*4=2T,而不像上面的Raid 0可以存储4T容量。
优点:
可靠性较高,磁盘数据有冗余,坏掉一块盘,整个磁盘阵列还是可用的。
缺点:
磁盘的利用率很低,冗余数据页需要浪费一块磁盘。
Raid 5:
它是一种磁盘性能和可靠性兼顾的一种阵列。它不对数据进行备份,但是需要记录数据的奇偶校验信息,并且将业务数据和奇偶校验信息同时存入Raid 5的磁盘上。Raid 5至少需要3块磁盘。
简单理解,它存储的内容=奇偶校验信息+真实数据。当Raid 5 中的一块磁盘坏掉的时候,Raid 5有一种能力,就是利用剩下的数据和响应的奇偶校验信息去恢复损坏的数据。
优点:
单块磁盘损坏,还可以恢复数据。
磁盘空间利用率比Raid 1镜像阵列高。
缺点:
磁盘数据的恢复能力不如Raid 1镜像阵列
由于存在奇偶校验信息,写入性能会受到影响
Raid 1-0(先镜像再并列):
Raid 1和Raid 0各有各的优势,所以人们就想办法将这些优势给组合在一起,扬长避短。于是就有了Raid 10这种方案,它的基本架构如下:
我们可以看到,图中每块磁盘先进行镜像冗余,然后再将两个大的存有冗余的磁盘并列在一起。
Raid 10 的本质,是底层硬盘先做一个Raid 1的镜像阵列,然后在Raid 1 的基础上,再做一个Raid 0 的并行阵列。
优点:
数据可靠性,比单纯的Raid 0高很多。
缺点:
需要的磁盘较多
读写速度不如Raid 0-1
Raid 0-1(先并列再镜像):
Raid 01和Raid1-0刚好相反,它是先将Raid盘进行并列,之后再进行镜像。
图中的磁盘都是先进行并列阵列,然后再将2块并列的大磁盘进行镜像阵列。
优点:
读写速度比Raid10更快
有一定的镜像冗余能力
缺点:
可用性没有Raid 10高(只要某个Raid 0阵列中一块磁盘不可用,这个Raid 0阵列就不可用)
03、总结
从上面我们的分析中,可能你已经了解了不同的磁盘阵列的优点和缺点,那么线上环境,究竟哪种会更好?
其实对于数据库环境来说,建议选择Raid 10,因为可用性层面来讲,Raid 10比Raid 01更好。
在机械磁盘时代,使用Raid阵列来排列还是很常见的。目前,SSD的价格已经比较便宜了,使用一块完整的SSD性能甚至会远远超过机械盘的Raid 阵列。一个简单的性能排序如下:
单块机械盘 < 机械盘阵列 < SATA SSD < NVME SSD
资源充足的情况下,肯定是选择SSD优先,如果资源不充足,但是又有一定的性能要求,建议配置机械盘的阵列。