RAID锂电池充放电导致的MySQL性能抖动优化

举报
JavaEdge 发表于 2022/02/17 23:37:27 2022/02/17
【摘要】 DB部署在高配置服务器,磁盘用的RAID 10阵列技术,用了6块磁盘组成RAID 10磁盘阵列架构。RAID 10:有很多磁盘组成一个阵列,所有数据分散写入不同磁盘,因为有多块磁盘,所以你的磁盘阵列整体容量就很大,而且同时写入多块磁盘,让你的磁盘读写并发能力很强:但这种模式下,最大问题就是若你磁盘坏了一块,就会丢失一部分数据。所以一般若要严格保证磁盘数据不丢失,就得用RAID 1:两块磁盘为...

DB部署在高配置服务器,磁盘用的RAID 10阵列技术,用了6块磁盘组成RAID 10磁盘阵列架构。

RAID 10:有很多磁盘组成一个阵列,所有数据分散写入不同磁盘,因为有多块磁盘,所以你的磁盘阵列整体容量就很大,而且同时写入多块磁盘,让你的磁盘读写并发能力很强:

但这种模式下,最大问题就是若你磁盘坏了一块,就会丢失一部分数据。所以一般若要严格保证磁盘数据不丢失,就得用RAID 1:两块磁盘为镜像关系,你写的所有数据,在两块磁盘上都有,形成数据冗余,一块磁盘坏了,另外一块磁盘上还有数据。

一块磁盘如果压力很大,可以让读请求路由到另外一块磁盘上去,分担压力,反正他俩的数据都是冗余的,是一样的。

RAID 10,就是RAID 0 + RAID 1组合起来:当时生产环境的服务器部署,我们有6块磁盘组成了一个RAID 10的阵列,每2块磁盘组成一个RAID 1互为镜像的架构,存放数据冗余,共3组RAID 1,然后对于每一组RAID 1写入数据的时候,是用RAID 0的思路,即不同组的磁盘的数据是不一样的,但是同一组内的两块磁盘的数据是冗余一致的

内部有个锂电池的,30天进行一次充放电,每次锂电池充放电就会导致RAID写入时不经过缓存,性能会急剧下降,所以我们发现线上数据库每隔30天就会有一次剧烈性能抖动,数据库性能下降10倍。

当时为排查这个问题,我们使用linux命令查看了RAID硬件设备的日志,不同的厂商的RAID设备,这个命令实际上是不一样的,发现RAID就是每隔30天有一次充放电的日志,所以就是由于这个定期的充放电导致了线上数据库的性能定期抖动!

如何解决RAID锂电池充放电问题导致的存储性能抖动

三种解决方案

  1. 给RAID卡把锂电池换成电容,电容是不用频繁充放电的,不会导致充放电的性能抖动,还有就是电容可以支持透明充放电,就是自动检查电量,自动进行充电,不会说在充放电的时候让写IO直接走磁盘,但是更换电容很麻烦,而且电容比较容易老化,一般不常用
  2. 手动充放电,这个比较常用,包括一些大家知道的顶尖互联网大厂的数据库服务器的RAID就是用了这个方案避免性能抖动,就是关闭RAID自动充放电,然后写一个脚本,脚本每隔一段时间自动在晚上凌晨的业务低峰时期,脚本手动触发充放电,这样可以避免业务高峰期的时候RAID自动充放电引起性能抖动
  3. 充放电的时候不要关闭write back,就是设置一下,锂电池充放电的时候不要把缓存级别从write back修改为writethrough,这个也是可以做到的,可以和第二个策略配合起来使用
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。