一、tcpcopy工具介绍

tcpcopy 是一个分布式在线压力测试工具,可以将线上流量拷贝到测试机器,实时的模拟线上环境,达到在程序不上线的情况下实时承担线上流量的效果,尽早发现 bug,增加上线信心。

tcpcopy 的优势在于其实时性及真实性,除了少量的丢包,完全拷贝线上流量到测试机器,真实的模拟线上流量的变化规律。

二、tcpcopy原理

tcpcopy新版架构图

tcpcopy包含三部分:online server、assistant server、target server

tcpcopy拷贝一次流量访问的步骤如下 1、一个访问请求到达线上内核后端机; 2、socket 包在 IP 层被拷贝了一份传给tcpcopy 进程; 3、tcpcopy 修改包的目的及源地址,发给测试内核后端机; 4、拷贝的包到达测试内核后端机; 5、测试内核后端机的推荐内核处理访问,并返回结果; 6、返回结果在 IP 层被截获、丢弃,由 intercept 拷贝返回结果的 IP header 返回; 7、IP header 被发送给线上内核后端机的 tcpcopy 进程。

三、tcpcopy搭建

3.1  服务器规划 角色 主机名 mysql端口

online server test00 3308(5.6)

assistant server offline01

target server offline02 3318(5.7)

3.2  tcpcopy安装及配置

安装依赖 # yum -y install libpcap-devel

intercept安装 # git clone git://github.com/session-replay-tools/intercept.git # cd intercept # ./configure # make && make install

tcpcopy安装 # git clone git://github.com/session-replay-tools/tcpcopy.git # cd tcpcopy # ./configure # make && make install

四、开启tcpcopy流量复制

4.1  target server上操作: # route add -net 10.0.0.8 netmask 255.255.252.0 gw 10.0.0.0

成功后可以看到 # ss -an |head State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 0 127.0.0.1:199 *:* LISTEN 512 0 *:80 *:* ESTAB 0 0 192.168.0.230:80 10.10.10.1:62602 ESTAB 0 0 192.168.0.230:80 10.10.10.4:54595 ESTAB 0 0 192.168.0.230:80 10.10.10.3:53566 ESTAB 0 0 192.168.0.230:80 10.10.10.6:49260 ESTAB 0 0 192.168.0.230:80 10.10.10.8:57598 ESTAB 0 0 192.168.0.230:80 10.10.10.7:64454

4.2  assistant server上操作(root privilege): # cd /usr/local/intercept/sbin/ # ./intercept -i bond1 -F 'tcp and src port 3318' -d

成功后可以看到 # ss -an |grep 36524 LISTEN 0 5 *:36524 *:* ESTAB 0 66 192.168.0.219:36524 192.168.0.8:49034 ESTAB 0 0 192.168.0.219:36524 192.168.0.8:49035 ESTAB 0 66 192.168.0.219:36524 192.168.0.8:49032 ESTAB 0 0 192.168.0.219:36524 192.168.0.8:49033

4.3  online source server 上操作(root privilege): # cd /usr/local/tcpcopy/sbin/ # ./tcpcopy -x 3308-10.0.0.1:3318 -s 10.0.0.2 -c 10.0.0.8 -d

成功后可以看到 #ss -an|grep 192.168.0.219 ESTAB 0 0 192.168.0.8:49034 192.168.0.219:36524 ESTAB 0 0 192.168.0.8:49035 192.168.0.219:36524 ESTAB 0 0 192.168.0.8:49032 192.168.0.219:36524 ESTAB 0 0 192.168.0.8:49033 192.168.0.219:36524

五、tcpcopy遇到的坑

1、tcpcopy log日志提示many connections cant established

把tcpcopy指定的-c 伪装客户端ip换成和线上一致的,可以ping通的网段就可以

2、大多数云环境设置了安全限制,一个网卡无法绑定2个IP,所以online server则会拒绝发送复制包,在线上抓包就会显示 # tcpdump -i eth0 -nn port 3306 and host 1.1.1.4 11:53:58.573735 IP 10.0.0.1.https > 10.0.0.2.37121: Flags [R.], seq 0, ack 2906947315, win 0, length 0 11:53:58.573774 IP 10.0.0.2.37121 > 10.0.0.1.http: Flags [.], ack 2906947314, win 1024, length 0 11:53:58.573812 IP 10.0.0.1.http > 10.0.0.2.37121: Flags [R], seq 2906947314, win 0, length 0

参考:

https://mfcheer.github.io/20170228-index.html

http://ju.outofmemory.cn/entry/106907

http://www.itts-union.com/2814.html

http://www.361way.com/tcpcopy-online-offline/3510.html

https://github.com/session-replay-tools/tcpcopy 为了方便大家交流,本人开通了微信公众号和QQ群,QQ群:291519319,喜欢技术的一起来交流吧

tcpcopy mysql_tcpcopy+mysql压力测试相关推荐

  1. 老叶倡议:MySQL压力测试基准值

    通常,我们会出于以下几个目的对MySQL进行压力测试: 1.确认新的MySQL版本性能相比之前差异多大,比如从5.6变成5.7,或者从官方版本改成Percona分支版本: 2.确认新的服务器性能是否更 ...

  2. mysql 雇员表脚本,mysql压力测试脚本实例_MySQL

    本文实例讲述了mysql压力测试的脚本,分享给大家供大家参考.具体如下: 创建表DEPT 代码如下: CREATE TABLE dept( /*部门表*/ deptno MEDIUMINT UNSIG ...

  3. mysql 5.5 压力测试,mysql 压力测试

    mysql 压力测试 sysbench支持的测试模式: 1.CPU运算性能 2.磁盘IO性能 3.调度程序性能 4.内存分配及传输速度 5.POSIX线程性能 6.数据库性能(OLTP基准测试) 目前 ...

  4. linux mysql 测试工具_LINUX系统下MySQL 压力测试工具super smack

    LINUX系统下MySQL 压力测试工具super smack 发布时间:2008-09-08 17:03:39   作者:佚名   我要评论 1. 源文件下载地址:http://vegan.net/ ...

  5. php mysql 压力测试_MySQL的性能基线收集及压力测试

    建立基线的作用: 计算机科学中,基线是项目储存库中每个工件版本在特定时期的一个"快照". 比如我们现在有并发事物,那么在某时刻发起一个事物会产生当前数据的快照,那么这个快照就相当理 ...

  6. mysql压力测试教程_Mysqlslap MySQL压力测试工具 简单教程

    MySQL从5.1.4版开始带有一个压力测试工具mysqlslap,通过模拟多个并发客户端访问mysql来执行测试,使用起来非常的简单.通过mysqlslap –help可以获得可用的选项,这里列一些 ...

  7. mysql压力测试工具Mysqlslap

    mysql 性能测试工具:The MySQL Benchmark Suite(不支持多CPU而且不是压力工具) 压力测试工具: MySQL super-smack:需要找能连接外网的机器,能连接外网的 ...

  8. 使用sysbench对mysql压力测试

    sysbench是一个模块化的.跨平台.多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况.关于这个项目的详细介绍请看:https://github.com/akopytov/sy ...

  9. mysql 压力测试知乎_MySQL查看SQL语句执行效率和mysql几种性能测试的工具

    网络中整理,记录下,朋友们应该用得到! Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看 SQL 语句的执行效 果,可以帮 ...

最新文章

  1. uniapp 上拉加载更多完整实现源码
  2. Typora添加右键新建Markdown文件
  3. 青源 LIVE 预告 | 北大王一飞:高效 GAN 采样算法 (ECML 最佳论文解读)
  4. 获取用户Ip地址通用方法常见安全隐患 x-forwarded-for
  5. java微信群自动回复_Java故事之路在脚下
  6. MobX快速入门教程(重要概念讲解)
  7. 191106_爬数据绘图
  8. 2018年泰迪杯心得总结--最全的数学建模、数据挖掘的比赛入门
  9. App 常用图标尺寸规范汇总
  10. 华为技术专家深度解析Java线程状态
  11. 计算机仿真系统模型有,计算机仿真在光伏发电系统模型中的应用研究原稿(最终定稿)...
  12. oracle 联合查询去重,oracle两张表关联查询
  13. selenium爬取阿里巴巴国际站
  14. 原生app签名如何转换成快应用签名
  15. 爬取某位大佬简书上所有文章并保存为pdf
  16. 西门子1500PLC机器人焊接程序(西门子PLC+西门子触摸屏)
  17. 网线信道测试软件,测试网线是否正常的方法有哪些
  18. 2019 siggraph_观看SIGGRAPH 2019的Unity图形会议
  19. (附源码)计算机毕业设计ssm高校教材管理系统
  20. 主成分回归分析实战教程

热门文章

  1. 解决 Maven 本地仓库有jar包,还是要到远程仓库去取的问题
  2. .Net 基于Memcache集群的分布式Session
  3. ACwing ACwing ACwing
  4. 利用SURF特征检测和FLANN最近邻算法实现图像的目标提取
  5. 150万海淘一个还会流汗的“AI老婆”:5年保修30天包退,弄疼她了还要哄
  6. android系统开发题库,基于Android题库系统设计与实现.doc
  7. 思科交换机命令大全 二
  8. 积分兑换商城系统设立的初衷是什么?
  9. C++实验四—乘法口诀表
  10. 面试题(四)你工作中常用的jvm参数有哪些?