Linux操作系统的存储系统软件层原理剖析

1.mysql是运行在linux上的,通过linux的存储系统去操作硬盘。
2.linux的存储系统分为VFS层,文件系统层,PageCache层,通用Block层,IO调度层,Block设备驱动层,Block设备层。
3.当mysql发起一次数据页的随机读写或者一次redo log日志文件的顺序读写时,实际上会把磁盘IO请求交给Linux操作系统的VFS层,决定
对磁盘的哪个目录中的文件执行磁盘IO操作,把IO操作交给具体文件系统;然后文件系统会在PageCache这个基于内存缓存去找需要的数据;找不到的话就
把请求交给通用Block层,这一层会把对文件的IO请求转换为BlockIO请求。然后到IO调度层,
这一层默认是CFQ公平调度算法(如果有多个读写请求进来,会先执行耗时长的耗时短的会一直等待长的执行完再执行,生产上不推荐使用这种算法,
需调整为deadline IO,核心思想时任何一个操作都不能一直不停的等待,在指定的时间范围内,都必须执行)。
IO调度层决定先执行哪个后就到Block设备层,把io请求发送给存储硬件。然后执行完后得到结果再层层返回给mysql。

数据库服务器使用的RAID存储架构

1.RAID是一个磁盘冗余阵列,说白点是用来管理磁盘的。假如有多块磁盘,
RAID可以告诉你往哪块磁盘上写,以及往哪块磁盘上读。同时还可以主副磁盘备份。

RAID存储架构的电池充放电原理

1.服务器使用多块磁盘组成的RAID阵列时,一般会有一个RAID卡,这个卡是带个缓存的。当这个缓存模式为write back时,
写入磁盘阵列的数据,会先缓存在RAID卡的缓存里,后续在慢慢写入到磁盘阵列里去。
2.如果断电的话,会导致RAID卡失效,数据丢失,要定时冲放电。(数据库在云上的话应该不会考虑这个吧)

真实生产案例,基于RAID锂电池充放电导致数据库抖动

1.RAID 0:很多磁盘组成了一个阵列;RAID 1:两块磁盘互为镜像,所写的数据在两块磁盘上都有;
RAID 10:RAID 0 + RAID 1;