Mycat性能压力测试
一、前期准备1.1 压测工具准备JMeter工具下载与安装Sysbench工具下载与安装二、压测工具及中间件服务器准备2.1 压测工具服务器测试工具系统内存CPUIP地址备注JMeterWindows4G4localhost本机安装SysbenchCentOS4G4192.168.61.41虚拟机安装2.2 Mycat中间件中间工具系统内存CPUIP地址备注MycatCentOS4G4192.1
一、前期准备
1.1 压测工具准备
二、压测工具及中间件服务器准备
2.1 压测工具服务器
测试工具 | 系统 | 内存 | CPU | IP地址 | 备注 |
---|---|---|---|---|---|
JMeter | Windows | 4G | 4 | localhost | 本机安装 |
Sysbench | CentOS | 4G | 4 | 192.168.61.41 | 虚拟机安装 |
2.2 Mycat中间件
中间工具 | 系统 | 内存 | CPU | IP地址 | 备注 |
---|---|---|---|---|---|
Mycat | CentOS | 4G | 4 | 192.168.61.59 | 本机安装 |
三、MySQL测试集群
3.1 MySQL测试集群统计
序号 | 集群类型 | 服务器类型 | CPU | 内存 | 硬盘 | IP地址 | 备注 |
---|---|---|---|---|---|---|---|
1 | 单库 | CentOS | 4核 | 4G | 20G | 192.168.61.63 | |
2 | 单库分表 | CentOS | 4核 | 4G | 20G | 192.168.61.65 | 水平分表 |
3 | 单库多表 | CentOS | 4核 | 4G | 20G | 192.168.61.63 | |
4 | 主从多表 | CentOS | 4核 | 4G | 20G | 192.168.61.61 192.168.61.62 | 读写分离 |
5 | 多库分表 | CentOS | 4核 | 4G | 20G | 192.168.61.16 192.168.61.17 192.168.61.18 | 多库水平分表 |
四、方案配置及压测结果
4.1 单库MySQL
4.1.1 Sysbench测试
4.1.1.1 方案配置
方案参考:https://blog.csdn.net/weixin_41668084/article/details/113407790
4.1.1.2 测试结果
TPS:1001.92 per/sec
QPS:20038.46 per/sec
4.1.2 JMeter测试
4.1.2.1 方案配置
方案参考:https://blog.csdn.net/weixin_41668084/article/details/113409902
4.1.2.1 测试结果
write:14323.77 per/sec
4.2 单库分表
4.2.1 Mycat配置
方案参考:https://blog.csdn.net/weixin_41668084/article/details/112238666
4.2.2 JMeter配置
4.2.2.1 数据写入
-
配置文件:https://gitee.com/gbc_sxy/imagebed/raw/master/img/20210131225725.jmx
-
测试命令
.\jmeter.bat -n -t .\test-demo\单裤\Mycat压测线程组-插入.jmx -l .\result\t_user\insert.jtl -e -o .\result\insert
-
测试结果
4.2.2.2 数据更新
-
配置文件:https://gitee.com/gbc_sxy/imagebed/raw/master/img/20210131231211.jmx
-
测试命令
.\jmeter.bat -n -t .\test-demo\单裤\Mycat压测线程组-更新.jmx -l .\result\t_user\insert.jtl -e -o .\result\update
-
测试结果
4.2.2.3 数据查询
-
配置文件:https://gitee.com/gbc_sxy/imagebed/raw/master/img/20210131231323.jmx
-
测试命令
.\jmeter.bat -n -t .\test-demo\单裤\Mycat压测线程组-查询.jmx -l .\result\t_user\insert.jtl -e -o .\result\read
-
测试结果
4.3 单库多表
4.3.1 Mycat配置
参考连接:https://blog.csdn.net/weixin_41668084/article/details/112797427
schema.xml配置
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- name: 逻辑数据库名 -->
<schema name="testdb" checkSQLschema="false" sqlMaxLimit="100">
<!-- name: 表名,分表主键,子表,数据节点,分表规则 -->
<table name="t_user" primaryKey="id" autoIncrement="true" subTables="t_user_$1-3" dataNode="dn1" rule="mod-long"/>
<table name="t_month" primaryKey="id" autoIncrement="true" subTables="t_month_20201$1-2,t_month_20210$1-2" dataNode="dn1" rule="sharding-by-year"/>
</schema>
<!-- database:物理数据库名 -->
<dataNode name="dn1" dataHost="localhost1" database="mytest"/>
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="192.168.61.63:3306" user="root" password="root">
<!-- can have multi read hosts -->
<readHost host="hostS1" url="192.168.61.63:3306" user="root" password="root"/>
</writeHost>
</dataHost>
</mycat:schema>
4.3.2 Sysbench配置
参考链接:https://blog.csdn.net/weixin_41668084/article/details/113407790
4.3.3 测试结果
-
直接测试MySQL
-
通过Mycat中间件连接
测试结论:mycat中间件连接数据库会有性能损耗。
4.4 主从复制
MySQL主从复制集群,可通过mycat实现读写分离。
4.4.1 Mycat配置
参考连接:https://blog.csdn.net/weixin_41668084/article/details/112797427
schema.xml配置
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
<dataNode name="dn1" dataHost="host1" database="test" />
<dataHost name="host1" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="192.168.61.61:3306" user="root" password="root">
<!-- can have multi read hosts -->
<readHost host="hostS1" url="192.168.61.62:3306" user="root" password="root" />
</writeHost>
</dataHost>
</mycat:schema>
4.4.2 Sysbench测试
-
方案配置
参考方案:https://blog.csdn.net/weixin_41668084/article/details/113407790
-
测试结果
-
MySQL直连测试
-
Mycat连接测试
-
4.5 多库分表
4.5.1 Mycat配置
参考连接:https://blog.csdn.net/weixin_41668084/article/details/112797427
schema.xml配置
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="mytest" checkSQLschema="false" sqlMaxLimit="100">
<!-- auto sharding by id (long) -->
<!--splitTableNames 启用<table name 属性使用逗号分割配置多个表,即多个表使用这个配置-->
<table name="t_user" dataNode="dn$1-3" rule="mod-long" splitTableNames="true"/>
</schema>
<!--数据节点-->
<dataNode name="dn1" dataHost="localhost1" database="mycat"/>
<dataNode name="dn2" dataHost="localhost2" database="mycat"/>
<dataNode name="dn3" dataHost="localhost3" database="mycat"/>
<!--节点配置-->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="192.168.61.16:13306" user="root" password="123456"/>
</dataHost>
<dataHost name="localhost2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM2" url="192.168.61.17:13306" user="root" password="123456"/>
</dataHost>
<dataHost name="localhost3" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM3" url="192.168.61.18:13306" user="root" password="123456"/>
</dataHost>
</mycat:schema>
4.5.2 JMeter测试
4.5.2.1 数据写入
-
配置文件:https://gitee.com/gbc_sxy/imagebed/raw/master/img/20210201001213.jmx
-
执行命令
.\jmeter.bat -n -t .\test-demo\分库\Mycat压测线程组-分库-插入.jmx -l .\result\t_user\insert.jtl -e -o .\result\t_user\insert
-
测试结果
4.5.2.1 数据更新
-
配置文件:https://gitee.com/gbc_sxy/imagebed/raw/master/img/20210201001411.jmx
-
执行命令
.\jmeter.bat -n -t .\test-demo\分库\Mycat压测线程组-分库-更新.jmx -l .\result\t_user\update.jtl -e -o .\result\t_user\update
-
测试结果
4.5.2.1 数据读取
-
配置文件:https://gitee.com/gbc_sxy/imagebed/raw/master/img/20210201001415.jmx
-
执行命令
.\jmeter.bat -n -t .\test-demo\分库\Mycat压测线程组-分库-读取.jmx -l .\result\t_user\read.jtl -e -o .\result\t_user\read
-
测试结果
五、测试结果汇总
5.1 数据汇总
序号 | MySQL测试案例 | 中间件 | 压测工具 | Write(t/s) | Update(t/s) | Read(q/s) | TPS (per/sec) | QPS(per/sec) | 备注 |
---|---|---|---|---|---|---|---|---|---|
1 | 单机mysql | Jmeter | 14323.77 | 添加主键索引 | |||||
单机mysql | Sysbench | 1001.92 | 20038.46 | ||||||
2 | 单库分表 | Jmeter | 45 | 180 | 随机id更新和查询 | ||||
3 | 单库分表 | Mycat | Jmeter | 15300 | 4350 | 5400 | 添加主键索引 | ||
4 | 单库分表 | Mycat | Jmeter | 5152.46 | 13199.58 | 添加主键索引,指定分区 | |||
5 | 单库多表 | Sysbench | 722 | 14456 | |||||
6 | 单库多表 | Mycat | Sysbench | 550 | 11018 | ||||
7 | 一主双从多表 | Sysbench | 443.21 | 8864.3 | |||||
8 | 一主双从多表 | Mycat | Sysbench | 395.09 | 7903.73 | ||||
9 | 多库分表 | Mycat | Jmeter | 11689.48 | 20.3 | 41.3 | 主键id分库 | ||
10 | 多库分表 | Mycat | Jmeter | 11567.25 | 5210.83 | 11937.45 | 添加主键索引,主键查询 |
5.2 数据图形化
六、结论
- Mycat作为中间件,测试结果表现出有大幅度的性能损失,大约在10%~25%左右(仅供参考)。
- 如性能损失可接受,作为中间件Mycat确实可以满足我们生产中徐分库分表的大部分需求环境。
- Mycat作为一个开源中间件,实现了读写分离,数据分片,多数据源整合,避免了(Sharding-JDBC)的侵入式编程。
- 如果条件允许,建议使用功能更为强大和丰富的分布式开源数据库TIDB。
- 目前测试版本使用为:1.6.7.4,也可参考测试升级版的分布式关系型数据库Mycat2。
以上,仅供参考,如有错误,请指正!
参考链接
更多推荐
所有评论(0)