【原创】MySQL Replay线上流量压测工具

一. 背景

去年做过一次mysql trace 重放的测试,由于performance schema本身采集样本的长度等限制,实际回放的成功率比较低。

最近找到一款开源的工具,基于TCPCopy实现了线上流量的仿真测试,这款开源工具是网易的王斌开发,后面很多公司的模拟在线测试都是基于TCPCopy实现。

https://github.com/session-replay-tools/mysql-replay-module

1.实现原理

生产服务器上部署TCPCopy, 包捕获是在数据链路层增加一个旁路处理,使用socket在网络层抓取线上的数据包,进行加工处理,使用socket发送数据包到测试服务器。

intercept将响应信息传送给tcpcopy。通过抓取响应包,intercept提取响应头信息,并使用一个特殊的通道将响应头信息发送给tcpcopy。

当tcpcopy接受到响应头信息,它利用头信息修改在线打包器的属性并继续发送另一个包。应当注意,来自测试服务器的响应被路由到充当黑洞的辅助服务器。

2.使用场景

复制线上的真实流量进行压力测试,可用于新版MySQL5.7或MySQL8.0压测,MySQL  Bug排查定位,容量规划等

3.回放模式

基于tcpcopy的MySQL Replay工具有两种回放模式,支持在线抓包回放及离线回放。考虑到对生产服务器的影响尽量小,重点测试了离线回放模式。

二. 部署

1.环境准备

要部署离线回放,需要准备下面资源,以测试环境的IP为例:

生产服务器:192.168.137.110

模拟生产服务器:192.168.137.100

测试目标服务器:192.168.137.102

辅助服务器:192.168.137.101

伪装客户端IP:192.168.166.166

2.模拟生产服务器安装离线tcpcopy模块

git clone git://github.com/session-replay-tools/tcpcopy.git

cd tcpcopy

git clone git://github.com/session-replay-tools/mysql-sgt-replay-module.git

./configure --offline --set-protocol-module=mysql-sgt-replay-module

make

make install

3.辅助服务器安装离线intercept模块

git clone git://github.com/session-replay-tools/intercept.git

cd intercept

./configure

make

make install

如有报错,可能需要安装下面的包

yum install libpcap-devel

三. 生产抓取网络包并离线回放

1.生产服务器利用tcpdump抓取网络包

tcpdump -i eth1 -s 0 -C 300 tcp and port 3306 -w /data/offline.pcap

2.测试目标服务器添加静态路由

1.测试目标服务器还原对应生产服务器的DB

2.测试目标服务器以skip-grant-tables模式启动

/usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql --skip-grant-tables&

3.添加静态路由

route add -host 192.168.166.166 gw 192.168.137.101

注意:host是伪装的客户端IP,gw是辅助服务器的IP

3.辅助服务器运行intercept

/usr/local/intercept/sbin/intercept -i eth2 -F ‘tcp and src port 3306‘ -d

4.模拟生产服务器离线回放

1.将生产服务器上抓取的网络包文件拷贝到模拟生产服务器/tmp/offline.pcap

2.运行tcpcopy解析离线网络包,转发网络包到测试目标服务器

/usr/local/tcpcopy/sbin/tcpcopy -i /tmp/offline.pcap -x 3306-192.168.137.102:3306 -s 192.168.137.101 -c 192.168.166.166 -n 1

运行 tcpcopy 客户端,有几种可选方式:

#全流量复制

/usr/local/tcpcopy/sbin/tcpcopy -i /tmp/offline.pcap -x 3306-192.168.137.102:3306 -s 192.168.137.101 -c 192.168.166.166 –d

#复制20%流量

/usr/local/tcpcopy/sbin/tcpcopy -i /tmp/offline.pcap -x 3306-192.168.137.102:3306 -s 192.168.137.101 -c 192.168.166.166 –r 20 -d

#放大2倍流量

/usr/local/tcpcopy/sbin/tcpcopy -i /tmp/offline.pcap -x 3306-192.168.137.102:3306 -s 192.168.137.101 -c 192.168.166.166 –n 2 -d

5 . 监控回放情况

通过开启performance_schema.events_statements_history_long功能,可以看到回放的情况

update performance_schema.setup_consumers set ENABLED=‘YES‘ where NAME=‘events_statements_history_long‘;

select * from performance_schema.events_statements_history_long limit 10\G

四.碰到的问题

1.生产环境抓包时,对于短连接,可以抓到mysql的登录信息,能正常回放,对于长连接来说,由于缺少第一次认证登录校验信息,不能正常回放,可以等待随着新连接的建立,完整的session越来越多,流量会逐步增多。

2.通过重启线上业务,kill长连接,让连接重新建立起来,这种一般不推荐。

原文地址:https://www.cnblogs.com/wangdong/p/9228123.html

时间: 2024-11-08 21:20:33

【原创】MySQL Replay线上流量压测工具的相关文章

使用tcpcopy拷贝线上流量压测测试环境

tcpcopy项目地址:https://github.com/session-replay-tools/tcpcopy 作者地址:http://blog.csdn.net/wangbin579 1:环境描述 架设三台服务器 10.53.132.52 10.53.132.55 10.53.132.101 101我们认为是线上服务器,52和55是测试环境.我们在101上运行tcpcopy把线上流量拷贝到55,在55上我们通过路由将应答转向52,在52上把应答丢弃. 分别在101和55上部署apach

tcpcopy复制线上流量

简介 TCPCOPY 是一个 tcp 流量的实时复制工具,其1.0版本由网易工程师 @tcpcopy 开发和维护.一般用来将生产环境的线上流量实时复制到测试环境进行测试.例如新系统上线前,如果我们希望进行一些基本的压力测试,那么我们可以直接利用 tcpcopy 来复制线上的流量过来对系统进行测试,这样的好处是测试数据接近真实水平,且实施起来相对简单.下面我们将通过一个真实的使用案例,来简单介绍 tcpcopy 的基本使用方法.我们假定读者对 tcp 以及路由相关基本知识有一定了解. 搭建流程 接

使用tcpcopy导入线上流量进行功能和压力测试

- 假设我们要上线一个两年内不会宕机的先进架构.在上线前,免不了单元测试,功能测试,还有使用ab,webbench等等进行压力测试. 但这些步骤非生产环境下正式用户的行为.或许你会想到灰度上线,但毕竟可能会影响到部分用户,这怎么对得起我们两年内不宕机的承诺呢? 好在网易的 王斌 开发了tcpcopy, 可以导入线上流量进行功能和压力测试. tcpcopy介绍 tcpcopy是一种请求复制工具.可以将线上流量拷贝到测试机器,实时的模拟线上环境.在不影响线上用户的情况下,使用线上流量进行测试,以尽早

[MySQL CPU]线上飙升800%,load达到12的解决过程

接到报警通知,负载过高,达到800%,load也过高,有11了. MySQL版本号为5.6.12-log 1 top 之后,确实是mysqld进程占领了全部资源. 2 查看error日志,无不论什么异常 3 show eninge innodb status\G,没有死锁信息. 4 show full processlist; 没有耗时很大的慢sql再跑.看并发,当前的线程总数量也才30个左右. 5 查看iostat,读写正常. 究竟是什么问题呢?查看slow log,发现例如以下SQL,频繁运

7月26日云栖精选夜读:MySQL金融版线上发布会:它为什么是金融企业的首选_技术大佬、产品和神秘嘉宾本位“演绎”

原文地址 2017年8月10日,云栖社区将迎来一场特殊的直播--阿里云数据库MySQL金融版线上发布会. 届时,我们不仅请到了阿里云金融业务部总监九河.阿里云数据库掌门人褚霸以及阿里云数据库产品专家乙休来一起宣布这个好消息,同时还邀请到一位在金融界绝对是重磅级人物的神秘嘉宾,一起来聊一聊产品发布背后的故事. 热点热议 MySQL金融版线上发布会:它为什么是金融企业的首选,技术大佬.产品和神秘嘉宾本位"演绎" 作者:好麦 CVPR论文解读 | 剁手有了新方法,明星同款边看边买 作者:仁太

使用tcpcopy复制线上流量进行测试

使用tcpcopy复制线上流量进行测试 online server 线上服务所在机器 10.136.11.4 部署tcpcopy sudo /usr/local/tcpcopy/sbin/tcpcopy -x ONLINE_PORT@ONLINE_SERVER_MAC_ADDR-10.136.11.5:TEST_PORT@TEST_SERVER_MAC_ADDR -s 10.136.11.3 -o eth4 -i eth4 -c 10.136.100.x -d -l ./tcpcopy.log

web服务器压测工具siege、ab

web服务器压测工具也挺多,这里只介绍我用过的这两种--siege(for linux).ab(for windows). 一.siege 1.简介: Siege是一款开源的压力测试工具,设计用于评估WEB应用在压力下的承受能力.可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行.siege可以从您选择的预置列表中请求随机的URL.所以siege可用于仿真用户请求负载,而ab则不能.但不要使用siege来执行最高性能基准调校测试

web压测工具http_load原理分析

原文:web压测工具http_load原理分析 一.前言 http_load是一款测试web服务器性能的开源工具,从下面的网址可以下载到最新版本的http_load: http://www.acme.com/software/http_load/ (页面实在太简陋……) 十分令人欣慰的是,这个软件一直在保持着更新(不像webbench,已经是十年的老古董了.webbench的源码分析请参考:http://www.cnblogs.com/xuning/p/3888699.html ),并且更新频率

ab(http)与abs(https)压测工具

ab(http)与abs(https)压测工具 来源 https://www.cnblogs.com/weizhxa/p/8427708.html 在学习ab工具之前,我们需了解几个关于压力测试的概念 吞吐率(Requests per second)概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数.某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率.计算公式:总请求数 / 处理完成这些请求数所花费的时间,即Request per s