这几天,运营那边老报app卡顿,大量5**报错。通过排查,是mysql数据库卡住了,数据库错误日志看,有大量如下信息:
企图修改数据库选项文件/etc/my.cnf相关的值,来消除问题,效果甚微,修改的两项如下:
interactive_timeout=120
connect_timeout=120
接着看系统的负载,用top指令,输出如下:
Load飙升,IO也很异常。查mysql的连接数,登录mysql,用指令 “show processlist;”查看,峰值在300个左右,远低于设定值3000.
磁盘io为啥会这么高呢?莫非是磁盘性能问题?数据库由一主两从组成,数据存放在单独的高效云盘。还是来测一下所谓高效云盘的读取性能,然后与自有的物理服务器做过对比。
测试磁盘性能我选用hdparm,最小安装的centos 7可能没有这个包,执行指令“yum install hdparm”很容易就安装上了。
² 系统磁盘挂接情况
² 测试本地盘读取性能
速度是103M每秒,多测几次,减少偏差。
² 高效云盘读取性能测试
读取速度130M每秒的样子,感觉这个速度不是很理想。找一台自有的线上物理服务器进行对比测试,sas盘,15000转容量为600G的系统。
² 物理机磁盘状况
² 物理机系统磁盘读取测试
平均400M每秒钟。
² 物理机数据盘读取测试
每秒钟读取速度390M。
所谓高效云盘,才100多M每秒,差距好大呢!再试试高效云盘加缓存方式的读取,得到如下的输出:
由此可以大致推断,所谓的高效云盘,很可能是sata垃圾盘,前边加ssd缓存,我呸!!经阿里云早期实施工程师确认,还真是这样啊!
处理思路及步骤:
从负载均衡摘除任意一台从数据库mysql,挂接云ssd磁盘,把数据库的数据目录完整的复制到ssd的挂接点,重启数据库并同步数据库。
通过讨论,决策人同意采购一块ssd云盘,用来做对比。一切准备就绪,数据库主从同步完毕,加入负载均衡,把应用程序的请求转发过来,负载的对比差异还相当明显。
采用云ssd磁盘的负载情况
原高效云盘的负载情况
在用hdparm测试,云ssd却如官网所宣,能到200多兆的速度;再看数据库错误日志,采用云ssd的不在疯狂滚屏。