Raid工作原理与简单实现,选择适合的raid提升服务器IO性能、冗余、容错能力

自然 2019年10月7日22:33:02 评论 21

Raid(Redundant Arrays of Inexpensive (Indeoendent)Disks,早期是它的中文名是“廉价的磁盘冗余整列”,早期生产中服务器磁盘价格昂贵,为了解决这个问题,加利福利亚大学伯克利分校一位教授研究出了用廉价的磁盘组合起来实现这一功能,多个磁盘合成一个整列来提供更好的性能、冗余。后期名称改成了独立的磁盘冗余阵列,广泛应用于各种服务器之中。

Raid工作原理与简单实现,选择适合的raid提升服务器IO性能、冗余、容错能力

raid有非常多的组合方式,不同的组合方式对应不同的raid级别。今天自然就挑选了几种相对常见的做一下简单介绍,随着时间发展,有一些raid级别已经被历史所淘汰。

raid可以通过软件来实现,也可以通过外置的硬件“阵列卡”来实现。由于条件所限,我们下面模拟的的操作使用软件raid作为演示。

Raid分级与特征

RAID-0:

理论上可以提升N*硬盘数量倍的读、写性能,一单期中一块硬盘损坏数据就会被破坏。

Raid工作原理与简单实现,选择适合的raid提升服务器IO性能、冗余、容错能力

要求两块硬盘起步

读、写性能的提升

可用空间为N*最小的那块硬盘容量

无容错能力

RAID-1:

将同一份数据分别写入N块磁盘当中,实现磁盘的镜像备份

Raid工作原理与简单实现,选择适合的raid提升服务器IO性能、冗余、容错能力

要求两块硬盘起步

读、写性能略有下降

可用空间为1*最小的那块硬盘容量

有冗余能力

RAID-4:

将数据均匀写入N-1快磁盘当中,多块数据盘进行异或运算将校验位存储到1块硬盘当中。当其中一块数据盘损坏的情况下,可以通过其与几块硬盘通过异或运算重新恢复数据。

Raid工作原理与简单实现,选择适合的raid提升服务器IO性能、冗余、容错能力

3块硬盘起步

读、写性能提升

可用空间为(N-1)*最小的那块磁盘容量

有容错能力

RAID-5:

将数据均匀写入N-1快磁盘当中,通过异或运算将校验位存储在同层的其中一块磁盘当中。当其中的一块磁盘损坏的情况下,可以通过其他N-1块磁盘重新生成缺失的那部分数据。

Raid工作原理与简单实现,选择适合的raid提升服务器IO性能、冗余、容错能力

3块硬盘起步

读、写性能提升

可用空间为(N-1)*最小的那块磁盘容量

有容错能力

最多允许一块磁盘损坏

RAID-6:

Raid-6可以理解为在raid-5的基础上增加了一块硬盘作为校验位存储盘,根据两个未知数可以解方程组的逻辑运算。

Raid工作原理与简单实现,选择适合的raid提升服务器IO性能、冗余、容错能力

4快硬盘起步

读、写性能提升

有容错能力

有容错能力,允许两块磁盘损坏

RAID-10:

raid-10读作RAID“一零”,顾名思义就是从下层开始先组riad1,再组raid0

Raid工作原理与简单实现,选择适合的raid提升服务器IO性能、冗余、容错能力

4块硬盘起步

读、写性能提升

可用空间为N*最小的那组raid的可用空间

有容错能力,每组镜像最多允许一块一盘损坏

RAID-01

raid-01读作RAID“零一”,同理就是从下层开始先组raid-0,再组raid-1。

Raid工作原理与简单实现,选择适合的raid提升服务器IO性能、冗余、容错能力

4块硬盘起步

读、写性能提升

可用空间为N*最小的那组raid的可用空间

有容错能力,允许一组硬盘损坏

JOBD

Just a Bunch Of Disks,就是将多块硬盘组合成一个连续的打硬盘。可用空间就是全部硬盘容量总和。

Raid工作原理与简单实现,选择适合的raid提升服务器IO性能、冗余、容错能力

RAID-7

可以理解为一个独立存储计算机,自身带有操作系统和管理工具,可以独立运行,理论上是性能最高的RAID模式。

RAID的简单实现

由于条件所限,自然在这里以软件实现raid磁盘阵列。

模拟实验1,组建raid-0

自然这里以sdc1和sdd1组一个软raid-0为例。由于使用分区模拟,这里已经调整了sdc1和sdd1的分区系统类型为raid。如果你是在生产中使用,直接使用整块硬盘组件不需要调整分区系统id。

Raid工作原理与简单实现,选择适合的raid提升服务器IO性能、冗余、容错能力

使用mdadm命令创建raid-0阵列:

-C  创建一个整列

-a  yes使用标准格式创建

/dev/md0 为新建的设备名

-l raid级别

-n raid成员数量

Raid工作原理与简单实现,选择适合的raid提升服务器IO性能、冗余、容错能力

创建过程中出现提示,sdd1中存在文件系统。这是一个安全警告,你确保sdd1没有数据输入y即可。

创建完成后可以用ll命令查看riad设备是否已经创建。

由于创建的过程太快,我们可以查用cat /proc/mdstart命令查看创建过程,这里我们可以看见已经创建了一个raid0,活动的成员有sdd1和sdc1。chunks大小为512K,即512K作为一个数据存储单元。

Raid工作原理与简单实现,选择适合的raid提升服务器IO性能、冗余、容错能力

创建完成后就如正常磁盘一样操作即可使用,先格式化文件系统,在挂载即可。这里自然将这个raid0整列md0挂载到了/data/raid下面。

下面自然来测试一下,raid-0整列和普通磁盘的读、写性能。

Raid工作原理与简单实现,选择适合的raid提升服务器IO性能、冗余、容错能力从测试结果上看写的性能明显提升,而读的性能表现并不是很突出,但是这个也太夸张了,应该是软raid的原因。理论性能应该是2倍。

这是软件模拟,和真实情况还是有一定差距的。

模拟实验2,组建raid-5

备用磁盘:允许磁盘出现损坏的raid整列支持备用磁盘,即检查到工作中的磁盘损坏时,会自动移除损坏的磁盘,并将备用磁盘加入raid成员组中,开始运行恢复数据

这里自然用sdb1,sdc2,sdd2组raid-5,sde1作为备用磁盘。

Raid工作原理与简单实现,选择适合的raid提升服务器IO性能、冗余、容错能力

使用mdadm创建一个raid-5磁盘阵列。

-C  创建一个整列

-a  yes使用标准格式创建

/dev/md0 为新建的设备名

-l raid级别

-n raid成员数量

-x 备用磁盘数量

创建完成后用mdadm -D查看raid阵列信息。

Raid工作原理与简单实现,选择适合的raid提升服务器IO性能、冗余、容错能力

然后就是格式化硬盘,这里不做任何说明。格式化完成后自然将它挂载到了/data/raid2下面。

这里我们还是和上面的raid-0一样,来测试一下读、写性能。

Raid工作原理与简单实现,选择适合的raid提升服务器IO性能、冗余、容错能力从测试结果看写性能有所提升,读性能并不是那么突出。

这组测试结果仅供参考。

既然我们为raid-5添加了备用磁盘,那我们就来模拟一下磁盘损坏的情况。

Raid工作原理与简单实现,选择适合的raid提升服务器IO性能、冗余、容错能力自然直接拔出了sdd2这块磁盘,可以看见备用磁盘sde1自动顶替了损坏的sdd2,并已经开始对数据进行运算恢复了。

Raid工作原理与简单实现,选择适合的raid提升服务器IO性能、冗余、容错能力

总结

常用的raid等级有RAID-0,RAID-1,RAID-5,RAID-10,RAID-50,JOBD。在正常生产中,一般根据业务需要选择适合自身业务的raid级别,生产中一般从性能、冗余、容错三个方面入手去选择raid阵列模式。riad作为一种灵活的硬盘组织机制,被广泛的应用于各种领域当中。

weinxin
网科文媒
快来关注一下,你想要的这里都有喔!
自然

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: