概述
在我们的应用中,发现数据库上跑rbd的性能比较差,为此我对比测试了mysql的benchmark在本地 sata,ssd和rbd上的性能,并进行了分析比较。
测试工具sysbench
sysbench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。关于这个项目的详细介绍请看:https://github.com/akopytov/sysbench
sysbench的数据库OLTP测试支持MySQL、PostgreSQL、Oracle,目前主要用于Linux操作系统,开源社区已经将sysbench移植到了Windows,并支持SQL Server的基准测试。
所以这里选用sysbench测试mysql性能,mysql table engine选择innodb。
sysbench安装
从 https://github.com/akopytov/sysbench 上下载sysbench源码,然后编译安装即可。
1 | # yum install -y gcc gcc-c++ automake make libtool mysql-devel |
对比测试
测试命令
1 |
|
本地磁盘
sata盘和ssd盘上的性能类似,结果如下:
1 | SQL statistics: |
rbd设备
准备rbd设备命令:
1 | # rbd create -p tstpool foxvol --size 30720 --image-format 1 |
针对应用这里选择的image format为1,后来测试了image format为2的volume,性能一样
在设备/dev/rbd0上测试结果如下:
1 | SQL statistics: |
分析
raid卡
查看本地盘的配置,本地盘的raid卡配置的写是writeback模式,缓存有2G大小。
测试机器上总共有两种raid卡:
raid卡1
1 | # hpssacli ctrl all show config detail |
raid卡2
1 | # /opt/MegaRAID/MegaCli/MegaCli64 -cfgdsply -aALL |
性能测试写IOPS
dd命令测试写IOPS性能
测试本地sata盘,发现raid卡能提升本地盘的IOPS到 20000 多;
1 | # dd if=/dev/zero of=tstfile bs=4k count=1024000 oflag=direct & |
测试rbd设备,IOPS只有1000多点;
1 | # dd if=/dev/zero of=/dev/rbd1 bs=4k count=1024000 oflag=direct & |
分析:
rbd设备的所有IO是要走网络和ceph IO栈的,IO的平均时延都是ms级别的,所以每秒的IOPS也就1000多点。。。
查看网络时延
1 | [root@tstserver yangguanjun]# ping 10.10.1.5 |
网络的时延也是ms级别的,就算没有ceph io的时延,这个iops也只能是5k多,所以针对mysql这样的应用,rbd的性能会比较低;