mysql读写分离中间件atlas的性能测试

公司最近要对上读写分离的中间件,打算对现下比较流行的中间件逐一进行性能测试。首先测试的是atlas.

此次测试分为两个部分,(1)atlas与直连db的性能比对,(2)event-threads参数对atlas性能的影响

一,简介

Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。

主要功能:

1.读写分离

2.从库负载均衡

3.IP过滤

4.自动分表

5.DBA可平滑上下线DB

6.自动摘除宕机的DB

Atlas相对于官方MySQL-Proxy的优势

1.将主流程中所有Lua代码用C重写,Lua仅用于管理接口

2.重写网络模型、线程模型

3.实现了真正意义上的连接池

4.优化了锁机制,性能提高数十倍

二:实验环境说明

服务 IP CPU 内存 系统
Atlas 172.31.38.151 8 32G CentOS 6.7
master 172.31.18.104 8 32G CentOS 6.7
Slave1 172.31.18.105 8 32G CentOS 6.7
Sysbench/salve2 172.31.38.150 8 32G CentOS 6.7

三:atlas的安装与配置

1,在172.31.38.151这个服务器上部署atlas,下载atlas2.2.1

https://github.com/Qihoo360/Atlas/releases

2,安装

sudorpm -ivh Atlas-2.2.1.el5.x86_64.rpm

3,改配置文件

cd /usr/local/mysql-proxy/conf

cat test.cnf

[mysql-proxy]

admin-username = admin

admin-password = 123456

proxy-backend-addresses = 172.31.18.104:3306

proxy-read-only-backend-addresses = 172.31.18.105:[email protected], 172.31.38.150:[email protected]

pwds = user1:/iZxz+0GRoA=

daemon = true

log-level =debug

log-path = /usr/local/mysql-proxy/log

sql-log = ON

keepalive = true

event-threads =16

log-level = message

instance = test

proxy-address = 0.0.0.0:1234

admin-address = 0.0.0.0:2345

charset = utf8

4,启动atlas

cd/usr/local/mysql-proxy/bin

#   sudo ./mysql-proxyd test start

OK: MySQL-Proxy of test is started

查看服务进程是否在:

ps -ef | grep mysql-proxy

root     6874     1  0 01:16 ?        00:00:00/usr/local/mysql-proxy/bin/mysql-proxy--defaults-file=/usr/local/mysql-proxy/conf/test.cnf

root     6875  6874  0 01:16 ?        00:00:00/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/test.cnf

root     6886  2714  0 01:16 pts/0    00:00:00 grep mysql-proxy

5,进入管理界面:

在主从服务器分别给atlas授权管理用户:

grant all privileges on  *.*  to [email protected] identified by ‘123456‘;

mysql -h127.0.0.1 -P2345 -uadmin -p123456

四:atlas与直连db的性能比对测试

此次测试设置了三组对照组:

1,atlas转发sql到mater

2, atlas转发sql到一主两从的mysql集群

3,直连db

测试工具为sysbench,使用oltp的测试脚本。

执行下面的命令测试sysbench连接Atlas:

./bin/sysbench --test=/usr/sysbench/tests/db/oltp.lua \

--oltp-skip-trx=on \

--num-threads=1 \

--max-requests=80000 \

--oltp-test-mode=nontrx \

--db-driver=mysql \

--mysql-db=sbtest \

--mysql-host=172.31.38.151 \

--mysql-port=1234 \

--mysql-user=user1 \

--mysql-password=123456 \

--oltp-nontrx-mode=select \

--db-ps-mode=disable \

--mysql-ignore-errors=1062  prepare ( run cleanup )

上述命令是sysbench执行80000次随机select操作,这80000次操作都是非事务的。 通过修改 --oltp-nontrx-mode 选项,可以执行update和insert操作。 通过修改 --num-threads 参数,可以调整并发测试线程的个数。

执行下面的命令测试直连DB:

./bin/sysbench --test=/usr/sysbench/tests/db/oltp.lua \

--oltp-skip-trx=on \

--num-threads=1 \

--max-requests=80000 \

--oltp-test-mode=nontrx \

--db-driver=mysql \

--mysql-db=sbtest \

--mysql-host=172.31.18.104\

--mysql-port=3306 \

--mysql-user=user1 \

--mysql-password=123456 \

--oltp-nontrx-mode=select \

--db-ps-mode=disable \

--mysql-ignore-errors=1062  prepare ( run cleanup )

利用sysbench测试了并发线程个数不同的情况下,分别执行80000次 select,update 和 insert 三种操作。每组测试重复三次取平均值。

以下是三个场景下的qps对比:

以上数据对应的折线图如下:

同时测试了sysbench不同并发线程下,完成每个SQL操作平均时间(单位:ms,时间越短,系统性能越好)。具体数据对比如下所示:

以上数据对应的折线图如下:

由以上统计结果可知:

(1)在只能主库的情况下,通过atlas转发sql要比直连db性能下降了大约40%-50%

(2)通过atlas引入从库的负载均衡后,并发小的时候atlas并无优势,但是随着并发量的增大,atlas优势明显.

(3)从每条sql的平均响应时间来看,引入从库的负载均衡后,在并发小时atlas的响应时间大概是直连db的1-1.5倍,但是当高并发时,atlas的响应时间明显比直连db的时候少。

由以上测试结果可知atlas适用于一主多从的高并发场景。

五:event-threads参数对atlas性能的影响

event-threads 是 Atlas 工作时创建的工作线程个数,这个值设置的不同对 Atlas 性能也有比较明显的影响。 将event-threads 分别设置为1,4,8,16,24,32,40,48进行测试,Atlas转发select请求时的 QPS 和完成每条SQL操作时间对比。具体对比结果如下所述:

qps数据:

以上数据对应的拆线图为:

平均响应时间:

以上数据对应的拆线图为:

测试的结果可知,并发量小的时候event-threads参数的影响不大,但是随着并发的增大,event-threads参数设置1,4时,atlas的qps明显低于event-threads设置成>=8的时候,同时平均响应时间也明显增长。但是当events-threads设置成与cpu核数相等和cpu的2-6倍时,qps和sql的平均响应时间都差别不大。由此可见,event-threads不能设置成小于cpu的核心数。

参考:https://github.com/Qihoo360/Atlas/wiki/Atlas%E7%9A%84%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95

时间: 2024-11-17 05:58:15

mysql读写分离中间件atlas的性能测试的相关文章

[记录]MySQL读写分离(Atlas和MySQL-proxy)

MySQL读写分离(Atlas和MySQL-proxy) 一.阿里云使用Atlas从外网访问MySQL(RDS) (同样的方式修改配置文件可以实现代理也可以实现读写分离,具体看使用场景) 1.在跳板机上使用Atals中转访问RDS不会影响效率,不要认为使用Atals后连接数据库会慢,连接数会疯狂占用,事实情况是刚好相反. Atlas不处理主从数据库数据同步,只是个负载均衡的连接池工具,主从同步请使用其他工具另行实现,本文只为了外网访问RDS(流量免费),实现连接池,有效利用RDS连接数. Atl

专职DBA-基于MHA高可用搭建MySQL读写分离架构-Atlas

专职DBA-基于MHA高可用搭建MySQL读写分离架构-Atlas 1.Atlas介绍 Atlas是由Qihoo360,Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目. 它是在mysql-proxy-0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性. 360内部使用Atlas运行的mysql业务,每天承载的读写请求数达几十亿条. 下载地址:https://github.com/Qihoo360/Atlas/releases 注意: 1.Atlas只能安装运

Atlas+keepalived实现mysql读写分离

本文主要介绍atlas安装.mysql读写分离的配置.mysql主从配置及利用keepalived解决atlas单点故障. Atlas介绍 Atlas是基于mysql-proxy做的二次开发.Atlas是一个位于应用程序与MySQL之间中间件.在后端DB看来,Atlas相当于连接它的客户端,在前端应用看来,Atlas相当于一个DB.Atlas作为服务端与应用程序通讯,它实现了MySQL的客户端和服务端协议,同时作为客户端与MySQL通讯.它对应用程序屏蔽了DB的细节,同时为了降低MySQL负担,

Atlas做mysql读写分离

Atlas做mysql读写分离: Atlas奇虎360的一个开源中间代理,是在mysql-proxy 0.8.2的基础上进行了优化,增加一些新的功能特性. wget https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpm rpm -i Atlas-2.2.1.el6.x86_64.rpm 安装路径为/usr/local/mysql-proxy /usr/local/mysql-pro

使用Atlas实现MySQL读写分离+MySQL-(Master-Slave)配置

参考博文: MySQL-(Master-Slave)配置  本人按照博友北在北方的配置已成功  我使用的是 mysql5.6.27版本. 使用Atlas实现MySQL读写分离

采用Atlas实现MySQL读写分离

##采用Atlas实现MySQL读写分离 一.基础介绍 ========================================================================================== 1.背景描述 目前我们的高可用DB的代理层采用的是360开源的Atlas,从上线以来,已稳定运行2个多月.无论是从性能上,还是稳定性上, 相比其他开源组件(amoeba.cobar.MaxScale.MySQL-Proxy等),还是很出色的. 当初我们之所以选择

基于MYCAT中间件实现MYSQL读写分离

基于mycat实现mysql读写分离 完成主从复制的配置 /* 主节点:192.168.47.101 从节点:192.168.47.102 */ /*mycat为同一网段客户端*/ /* 修改主节点基础配置文件 */ /* */ [mysqld] server-id=101 log-bin /*重启服务 */ #systemctl restart mariadb /*创建从节点的账号 */ CREATE USER 'xie'@'192.168.47.102' IDENTIFIED BY '123

使用Amoeba实现mysql读写分离机制

Amoeba的实用指南 http://docs.hexnova.com/amoeba/ 如何实现mysql读写分离 : 通常来说有两种方式: 1,应用程序层实现 2,中间件层实现 应用层实现 应用层实现是指在应用程序内部及连接器中实现读写分离. 例如: com.mysql.jdbc.replicationdriver mysqlnd_ms 优点: 程序内部实现读写分离,安装即可使用 减少部署难度. 访问压力在一定级别以下,性能很好. 缺点: 架构一旦调整,代码要更这变, 不够灵活. 难以实现高级

MySQL读写分离(ProxySQL)

MySQL读写分离(ProxySQL) 读写分离原理 读写分离就是用户在发送请求时,请求经过中间件,中间件将请求中的读和写操作分辨出来将读请求发送给后端的从服务器,将写请求发送给后端的主服务器,再又主服务器通过主从复制将数据复制给其他从服务器 常见MySQL中间件 名称 公司 站点地址 mysql-proxy Oracle https://downloads.mysql.com/archives/proxy Atlas Qihoo https://github.com/Qihoo360/Atla