共计 3745 个字符,预计需要花费 10 分钟才能阅读完成。
咱们应用的计算机的全称叫电子计算机,后面有电子两个字,这说的是整个计算机中的外围元器件基本上都是电子单元组成的。但机械硬盘却是一个非凡的例外,它更多是用机械技术做进去的一个产品。当把带有机械技术基因的磁盘搭到计算机,尤其是再利用到服务器畛域的时候,暴露出了机械技术的两个重大问题:
- 第一,速度慢。如果把内存和 CPU 的速度比作汽车和飞机的话,这个大哥毫秒级别的提早简直就是牛车级别的。
- 第二,容易坏。常常据说谁谁的磁盘坏了,很少有据说过谁的内存条,CPU 坏了。笔者就有在读研期间实验室里正在拷贝材料,忽然一个断电间接废了一块硬盘的经验。
要想保障服务器运行的稳固和高速,就必须解决硬盘从娘胎里带进去的这两个缺点。
多硬盘连贯
问题简单明了,咱们要解决速度慢、容易坏两个问题。很天然,单兵作战不行,那咱们就想到往上怼一个班,多块硬盘一起上。但问题是,如果给你 N 块硬盘,让你来出一个技术计划,你会怎么设计呢?
第一个计划就是,把一个文件分成 N 片,每一片都散列在不同的硬盘上。这样当文件进行读取的时候,就能够 N 块硬盘一起来工作,从而达到读取速度进步到 N 倍的成果,这就是 RAID 0。
不过这个计划没有解决容易坏的问题,任何一块硬盘坏了都会导致存储系统故障。
第二个计划就是,依然把文件分片,然而所有的分片都存在一块硬盘上,其它的硬盘只存拷贝。这既进步了硬盘的访问速度,也解决了坏的问题。任意一块硬盘坏了,存储系统都能够失常应用,只不过速度会打一点折扣。
不过这个计划又带来了新的问题,那就是实现老本有点高了。如果咱们用 256G 硬盘想实现 512G 的存储容量的话,起码得须要 4 块硬盘能力实现。
有没有折中一点的计划呢?有,而且很多。咱们这里只说下最常见的 raid5
RAID 5 同样要对文件进行分片,然而不对存储的数据进行备份,而是会再独自存一个校验数据片。
如果文件分为 A1 A2 A3,而后须要再存一个校验片到别的磁盘上。这样不论 A1,A2 还是 A3 那一片失落了,都能够依据另外两片和校验片合成进去。既保证了数据的安全性,又只用了一块磁盘做冗余存储。
如果咱们有 8 块 256GB 的硬盘,那么 RAID5 计划下的磁盘阵列从用户角度来看可用的存储空间是 7 *256GB,只“节约”了一块盘的空间,所以目前 RAID5 利用比拟宽泛~~
Raid 卡缓存
硬盘提早是毫秒级别的,即便是多快硬盘并行,也只能晋升数倍而已,不可能达到量级的晋升。和 CPU 内存的纳秒级别工作频率比起来,还是太慢了。
在计算机界,没有缓存解决不了的速度问题,如果有,那就再加一层。古代磁盘自身也根本都带了缓存,另外在一些比拟新的 raid 卡里,硬件开发者们又搞进去了一层“内存”,并且还本人附带一块电池,这就是 RAID 卡缓存。咱们看下几款支流 RAID 卡的配置:
- PERC S120 入门软件阵列卡,主板集成无缓存 反对 RAID0 1
- PERC H330 入门硬件 RAID 卡,无板载缓存, 反对 RAID 0 1 5 10 50
- PERC H730 支流硬件 RAID 卡带有 1G 缓存和电池 反对 RAID 0 1 5 6 10 50 60
- PERC H730P 高性能硬件 RAID 卡带有 2G 缓存和电池 反对 RAID 0 1 5 6 10 50 60
- PERC H830 同 H730P, 没有内置接口,应用外置接口连贯附加存储磁盘柜用
拿目前服务器端出镜率比拟高的 H730 和 H730P 来看,他们别离带了 1G 和 2G 的缓存卡,并且自带电池。电池的作用就是当发现主机意外断电的时候,可能疾速把缓存中的数据写回到磁盘中去。对于写入,个别操作系统写到这个 RAID 卡里就完事了,所以速度快。对于读取也是,只有缓存里有,就不会透传到磁盘的机械轴上。
另外想再补充说一点的就是文件相干函数里设置 DIRECT I/ O 仅仅只能绕开操作系统自身的 Page Cache, 而 RAID 卡里的缓存,对于 Linux 来说,能够说算是一个黑盒。换句话说,就是操作系统并不分明 RAID 卡是从缓存里吐的数据,还是真正从硬盘里读的。
入手查看你的 RAID 配置
理解了 raid 基本原理当前,咱们能够理论入手查看一下机器上的 raid 状况。这里拿我手头的一台服务器举例。
通过cat /proc/scsi/scsi
,咱们能够查看到 raid 卡的型号
Host: scsi10 Channel: 02 Id: 01 Lun: 00
Vendor: DELL Model: PERC H730 Mini Rev: 4.27
Type: Direct-Access ANSI SCSI revision: 05
能够看到我的这台服务器 raid 卡应用的是 PERC H730,这块 RAID 卡带有 1G 缓存和电池。
再看咱们的硬盘阵列
# /opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -Lall -aALL
Virtual Drive: 1 (Target Id: 1)
Name :
RAID Level : Primary-5, Secondary-0, RAID Level Qualifier-3
Size : 1.633 TB
Sector Size : 512
Is VD emulated : No
Parity Size : 278.875 GB
State : Optimal
Strip Size : 128 KB
Number Of Drives : 7
Span Depth : 1
RAID Level 列表明的就是以后 RAID 组的 RAIN 级别。对照上面
- RAID 1: Primary-1, Secondary-0, RAID Level Qualifier-0 RAID 1
- RAID 0: Primary-0, Secondary-0, RAID Level Qualifier-0 RAID 0
- RAID 5: Primary-5, Secondary-0, RAID Level Qualifier-3 RAID 5
- RAID 10: Primary-1, Secondary-3, RAID Level Qualifier-0 RAID 10
能够看到,本机 RAID Level 是 RAID5。
另外 Strip Size
叫做条带大小,我机器上的配置是 128KB。如果有一个 512KB 的文件,它就会被分成 4 个条带,每个 128KB。这些条带可能会扩散在不同的磁盘上,如果一次性读取的话,多个硬盘就能够一起转动机械轴,读取速度就会进步到原来的数倍。不过要阐明的是,如果文件小于这个条带大小,小于 128K,那么 RAID 下的多块硬盘对于该文件的读取耗时也不会有帮忙。
持续查看组成 RAID 的所有的磁盘的情况:
#/opt/MegaRAID/MegaCli/MegaCli64 -PDList -aALL
......
Drive's position: DiskGroup: 1, Span: 0, Arm: 0
Device Id: 1
...
Raw Size: 279.396 GB [0x22ecb25c Sectors]
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]
Coerced Size: 278.875 GB [0x22dc0000 Sectors]
Sector Size: 512
Logical Sector Size: 512
Physical Sector Size: 512
Inquiry Data: SEAGATE ST300MM0008 TT31S42310JR
...
...
...
Drive's position: DiskGroup: 1, Span: 0, Arm: 6
Device Id: 7
Raw Size: 279.396 GB [0x22ecb25c Sectors]
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]
Coerced Size: 278.875 GB [0x22dc0000 Sectors]
看到属于 DiskGroup 1 的总共有 7 块硬盘,每块的大小都是 278GB 左右。6 块盘的总容量大小就是 1.6T 左右,的确是只“节约”了一块硬盘的容量来保障数据的安全性!
另外 Inquiry Data
也显示了硬盘的制造商,曾经型号。这些磁盘都是希捷的 300G 的机械硬盘,经 Google 查问其转速为 1 万转每分钟。
本文大节
机械技术和电子技术比拟起来,稳定性要差很多。所以机械背景出身的硬盘既慢又容易坏。为了解决这个问题,RAID 技术应运而生。通过肯定的冗余原始存储或者校验数据提供安全性的保障,通过减少带电子基因的缓存,正当调度多块磁盘的机械轴,进步了磁盘 IO 的读写速度。在 Linux 下能够通过 MegaCli 工具来查看你的 RAID 组状况,强烈你倡议理论入手查看一下!
开发内功修炼之硬盘篇专辑:
- 1. 磁盘开篇:扒开机械硬盘坚挺的外衣!
- 2. 磁盘分区也是隐含了技术技巧的
- 3. 咱们怎么解决机械硬盘既慢又容易坏的问题?
- 4. 拆解固态硬盘构造
- 5. 新建一个空文件占用多少磁盘空间?
- 6. 只有 1 个字节的文件理论占用多少磁盘空间
- 7. 文件过多时 ls 命令为什么会卡住?
- 8. 了解格式化原理
- 9.read 文件一个字节理论会产生多大的磁盘 IO?
- 10.write 文件一个字节后何时发动写磁盘 IO?
- 11. 机械硬盘随机 IO 慢的超乎你的设想
- 12. 搭载固态硬盘的服务器到底比搭机械硬盘快多少?
我的公众号是「开发内功修炼」,在这里我不是单纯介绍技术实践,也不只介绍实践经验。而是把实践与实际联合起来,用实际加深对实践的了解、用实践进步你的技术实际能力。欢送你来关注我的公众号,也请分享给你的好友~~~