一. 背景

去年做过一次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

【原创】MySQL Replay线上流量压测工具相关推荐

  1. python 压测工具_流量压测工具 | 亚马逊AWS官方博客

    (可用于测试AWS ELB.EC2.Auto Scaling.HA) 一群勤劳的小蜜蜂 很多时候我们需要进行负载均衡.Web服务器的并发式压力测试,但像Siege, JMeter等工具都是从一个源IP ...

  2. GoReplay 流量压测工具的使用

    依赖 要使用 gor , 你需要先有一个 web server. 当然, 也可以使用 gor 自带的文件服务器, 启动如下: gor file-server :8000 表示将当前目录作为文件服务器的 ...

  3. 大促系统全流量压测及稳定性保证——京东交易架构

    https://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=2653547431&idx=1&sn=744a42639e7c36 ...

  4. 大促系统全流量压测及稳定性保证——京东交易架构分享(含PPT)

    导读:对于应对突发的峰值访问,每个技术团队都有自己的经验及方法,但是这些方法远没有得到体系化的讨论.高可用架构在 6 月 25 日举办了『高压下的架构演进』专题活动,进行了闭门私董会研讨及对外开放的四 ...

  5. 大促系统全流量压测及稳定性保证——京东交易架构分享

    转:大促系统全流量压测及稳定性保证--京东交易架构分享(含PPT) 来源:http://blog.sina.com.cn/s/blog_12df1b9e60102wble.html 先介绍一下交易系统 ...

  6. 几款常用压测工具介绍与使用

    现在市面上的压测工具数不胜数,挑几款常用的做个简单的介绍. 1.Apache ab ab是apache自带的压力测试工具,使用起来非常方便 . 安装 1. ab运行需要依赖apr-util包,安装命令 ...

  7. MeterSphere在开源压测工具JMeter上的分布式优化和实践

    Apache JMeter是一款100%纯Java的开源软件,旨在加载测试功能行为和测量性能.它可以用来测试静态和动态资源的性能,例如静态文件.Java Servlet.CGI Scripts.Jav ...

  8. TCPCopy 线上流量复制工具

    TCPCopy是一种重放TCP流的工具,使用真实环境来测试互联网服务器上的应用程序. 一.描述: 虽然真实的实时流量对于Internet服务器应用程序的测试很重要,但是由于生产环境中的情况很负责,测试 ...

  9. jmeter constant timer 如何添加_阿里巴巴在开源压测工具 JMeter 上的实践和优化

    Apache JMeter 是 Apache 旗下的开源压测工具,创建于 1999 年初,迄今已有超过 20 年历史.JMeter 功能丰富,社区(用户群体)庞大,是主流开源压测工具之一. 性能测试通 ...

  10. 微服务引擎的线上流量治理最佳实践

    简介:本实践将重点介绍如何快速集成主流开源微服务框架,实现业务零改造,解决开源框架在生产落地过程中的痛点,例如无损上下线.标签路由等,并通过托管微服务开源组件(API网关.注册中心.配置中心等)的服务 ...

最新文章

  1. java 所有的数据集合_第五节:Java中常用数据集合
  2. oracle 10g视频教程
  3. 图的两种存储形式(邻接矩阵、邻接表)
  4. mysql压缩包修改密码_mysql 解压之后一堆文件,第一次安装 与 修改密码
  5. π里包含了所有可能的数字组合吗?
  6. PHP语法像C,PHP编程语法的三个魅力之处
  7. BulletedList控件[转载]
  8. 智鼎逻辑推理题及答案_校园招聘在线测试笔试题型的种类和解题技巧
  9. python中oserror_[python] 解决OSError: Address already in use
  10. 【Matlab函数知识点合集】新手入门第十四天
  11. 大数据应用场景”之隔壁老王(连载二)
  12. 红孩儿编辑器的模块设计5
  13. mysql dba视频课_MySQL DBA专家
  14. cairo填充_Cairo图形指南
  15. 非常有意思的网页版在线PS
  16. android 7.0 创建热点,win7创建wifi热点脚本分享
  17. 计算机 和金融主要学什么,计算机和金融哪个更好?未来发展有什么区别?
  18. Hibernate异常:Named query not known
  19. 通达OA短信平台,通达OA与天瑞短信平台深度集成,安全可靠,方便快捷
  20. 教你用Python写一个聊天机器人

热门文章

  1. 2021年全国各行业统计年鉴整理
  2. 通讯录管理系统mysql,EML企业通讯录管理系统 v5.4.15
  3. CE修改器教程总结2
  4. 数据库精选 60 道高频面试题(含答案),值得收藏
  5. oracle中的存储过程和存储函数的区别
  6. VBA编程_ActiveSheet
  7. python生成excel模板_使用python创建excel表格 --- XlsxWriter模板详解
  8. 全球光伏产业战加剧:美国考虑对进口太阳能电池施加紧急关税
  9. 并查集【算法笔记/晴神笔记】
  10. JAAS和Java GSS-API