这几天,运营那边老报app卡顿,大量5**报错。通过排查,是mysql数据库卡住了,数据库错误日志看,有大量如下信息:

aliyun01.jpg

企图修改数据库选项文件/etc/my.cnf相关的值,来消除问题,效果甚微,修改的两项如下:

interactive_timeout=120

connect_timeout=120

 

接着看系统的负载,用top指令,输出如下:

aliyun02.jpg

Load飙升,IO也很异常。查mysql的连接数,登录mysql,用指令 “show processlist;”查看,峰值在300个左右,远低于设定值3000.

 

磁盘io为啥会这么高呢?莫非是磁盘性能问题?数据库由一主两从组成,数据存放在单独的高效云盘。还是来测一下所谓高效云盘的读取性能,然后与自有的物理服务器做过对比。

 

测试磁盘性能我选用hdparm,最小安装的centos 7可能没有这个包,执行指令“yum install hdparm”很容易就安装上了。

 

²  系统磁盘挂接情况

aliyun03.jpg

 

²  测试本地盘读取性能

aliyun04.jpg

速度是103M每秒,多测几次,减少偏差。

²  高效云盘读取性能测试

aliyun05.jpg

读取速度130M每秒的样子,感觉这个速度不是很理想。找一台自有的线上物理服务器进行对比测试,sas盘,15000转容量为600G的系统。

 

²  物理机磁盘状况

aliyun06.jpg

²  物理机系统磁盘读取测试

aliyun07.jpg

平均400M每秒钟。

²  物理机数据盘读取测试

aliyun08.jpg

每秒钟读取速度390M。

 

所谓高效云盘,才100多M每秒,差距好大呢!再试试高效云盘加缓存方式的读取,得到如下的输出:

aliyun09.jpg

由此可以大致推断,所谓的高效云盘,很可能是sata垃圾盘,前边加ssd缓存,我呸!!经阿里云早期实施工程师确认,还真是这样啊!

aliyun10.jpg


处理思路及步骤:

从负载均衡摘除任意一台从数据库mysql,挂接云ssd磁盘,把数据库的数据目录完整的复制到ssd的挂接点,重启数据库并同步数据库。

aliyun01.jpg

通过讨论,决策人同意采购一块ssd云盘,用来做对比。一切准备就绪,数据库主从同步完毕,加入负载均衡,把应用程序的请求转发过来,负载的对比差异还相当明显。

  • 采用云ssd磁盘的负载情况

    aliyun04.jpg


  • 原高效云盘的负载情况

    aliyun02.jpg


在用hdparm测试,云ssd却如官网所宣,能到200多兆的速度;再看数据库错误日志,采用云ssd的不在疯狂滚屏。