36、生产经验:数据库服务器上的RAID存储架构的电池充放电原理
00 分钟
2022-8-26

36、生产经验:数据库服务器上的RAID存储架构的电池充放电原理

上篇文章我们初步给大家介绍了RAID多磁盘冗余阵列技术是什么东西,这篇文章我们继续学习RAID存储架构的电池充放电原理,把这个理解了之后,我们下一篇文章就可以学习一个真实的生产案例了
服务器使用多块磁盘组成的RAID阵列的时候,一般会有一个RAID卡,这个RAID卡是带有一个缓存的,这个缓存不是直接用我们的服务器的主内存的那种模式,他是一种跟内存类似的SDRAM,当然,你大致就认为他也是基于内存来存储的吧。
我们看下图,他说的就是这个RAID卡的缓存机制。
notion image
那么现在有一个问题来了,假设突然断电了,或者是服务器自己故障关闭了,那么是不是这个RAID卡的缓存里的数据会突然丢失?那你MySQL写入磁盘的数据不就没了吗?我们看下图:
notion image
所以真是因为如此,为了解决这个问题,RAID卡一般都配置有自己独立的锂电池或者是电容,如果服务器突然掉电了,无法接通电源了,RAID卡是基于锂电池来供电运行的,然后他会赶紧把缓存里的数据写入到阵列中的磁盘上去,如下图所示:
notion image
但是锂电池是存在性能衰减问题的,所以一般来说锂电池都是要配置定时充放电的,也就是说每隔30-90天(不同的锂电池厂商是不一样的),就会自动对锂电池充放电一次,这可以延长锂电池的寿命和校准电池容量。
如果你要是不这么做的话,那么可能锂电池用着用着就会发现容量不够了,可能容纳的电量在你服务器掉电之后,都没法一次性把缓存里的数据写回磁盘上去,那就会导致数据丢失了
所以在锂电池充放电的过程中,RAID的缓存级别会从write back变为write through,我们通过RAID写数据的时候,IO就直接写磁盘了,如果写内存的话,性能也就是0.1ms这个级别,但是直接写磁盘,性能退化10倍到毫秒级了
所以说,对于那些在生产环境的数据库部署使用RAID多磁盘阵列存储技术的公司来说,通常都会开启RAID卡的缓存机制,但是此时就一定要注意这个RAID的锂电池自动充放电的问题,因为只要你用了RAID缓存机制,那么锂电池就必然会定时进行充放电去延长寿命,保证服务器掉电的时候可以把缓存数据写回磁盘,数据不会丢失。
所以这个时候一旦RAID锂电池自动充放电,往往会导致你的数据库服务器的RAID存储定期的性能出现几十倍的抖动,间接导致你的数据库每隔一段时间就会出现性能几十倍的抖动

评论