tcpcopy复制线上流量

简介

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

搭建流程

接下来我们将尝试先叙述完整个实验步骤,然后才是对实验步骤中涉及到的点进行阐述。测试中用到的3台服务器信息如下:

线上服务器 online server     ip地址  182.118.7.40

测试服务器 test server        ip地址  182.118.7.56

辅助服务器 auxiliary server   ip地址  182.118.7.63

我们的目的是把online server上的流量复制到test server,大体结构如下:

从整个操作过程可以看出,基本的 tcpcopy 使用方法只需简单的三步:在线上机器运行 tcpcopy 复制流量,在辅助机上运行 intercept 捕获响应数据,最后仅需要在测试机上设置一条路由即可。


第一步

在 online server 182.118.7.40 上安装并运行 tcpcopy daemon :

我们从github上下载1.0版本的源码包;

wget
https://github.com/session-replay-tools/tcpcopy/archive/1.0.0.tar.gz -O
tcpcopy-1.0.0.tar.gz

安装依赖包;

yum -y install libpcap-devel

解压编译和安装;

tar xf tcpcopy-1.0.0.tar.gz

cd tcpcopy-1.0.0

./configure  --pcap-capture       
  默认是raw_socket抓包方式,可以根据实际情况修改

make && make install

最后运行 tcpcopy;

tcpcopy -x 80-182.118.7.56:80 -s 182.118.7.63 -c 192.168.1.100 -d  -l tcpcopy.log
 -P /var/run/tcpcopy.pid

注意:日志和pid路径可选,配置成功后建议关掉日志,以免写满磁盘导致程序阻塞

命令概述

将线上80端口收到的流量复制到测试机ip 182.118.7.56 的80端口,并设置辅助机的ip地址为182.118.7.63,且将复制过去的流量中的源地址统一更改为192.168.1.100,这样做的好处是我们在测试机上可以直接针对整个更改后的网段设置一条路由即可。

注意

请求线上服务器的客户端IP来自不同的网段,为了不把回应包再返回给客户端,所以在这里要把源IP修改为 192.168.1.100,好让 tcpcopy 来捕获辅助机的回应


第二步

在 auxiliary server 182.118.7.63 上安装并运行 intercept daemon :

从github上下载1.0版本的源码包;

wget
https://github.com/session-replay-tools/intercept/archive/1.0.0.tar.gz -O
intercept-1.0.0.tar.gz

安装依赖包;

yum -y install libpcap-devel

解压编译和安装;

tar xf intercept-1.0.0.tar.gz

cd intercept-1.0.0

./configure --pcap-capture           默认是raw_socket抓包方式,可以根据实际情况修改

make && make install

最后运行 intercept;

intercept -i eth0 -l
intercept.log -P /var/run/intercept.pid -F ‘tcp and src port 80‘ -d

注意:日志和pid路径可选,配置成功后建议关掉日志,以免写满磁盘导致程序阻塞

成功运行后可以观察到的网路连接状态:

[[email protected] ~]# route -n

Kernel IP routing table

Destination     Gateway  
      Genmask         Flags Metric Ref
           Use Iface

0.0.0.0        
192.168.1.1     0.0.0.0             UG
   100    0        0
           enp0s3

192.168.1.0     0.0.0.0  
      255.255.255.0   U     100    0
       0         
  enp0s3

192.168.8.0     0.0.0.0  
      255.255.255.0   U     100    0
       0
           enp0s3

命令概述

辅助机的 intercept 通过-F 参数制定捕获规则,捕获tcp连接中源端口为80的所有数据,也即是测试机的回应数据。其作用是将测试机路由过来的响应包捕获下来,完成整个请求回应的流程且保证测试机产生的回应数据不会流向线上环境。intercept 会监听 tcp 36524 端口,并和线上机182.118.7.40 的 tcpcopy 之间建立通信,我们通过netstat命令可以观察到。

注意

辅助机和测试机一定要是同一网段


第三步

在 test server 182.118.7.56 上设置一条路由 :

route add -host 192.168.1.100 netmask
255.255.255.255 gw 182.118.7.63

成功运行测试时可以观察到的网络连接状态:

[[email protected] ~]# route -n

Kernel IP routing table

Destination        
 Gateway              Genmask  
             Flags     Metric
  Ref    Use Iface

192.168.1.100  
  182.118.7.63       255.255.255.255    UG
      100        0      
   enp0s3

0.0.0.0        
192.168.1.1     0.0.0.0             UG
   100    0        0
           enp0s3

192.168.1.0     0.0.0.0  
      255.255.255.0   U     100    0
     
 0         
  enp0s3

192.168.8.0     0.0.0.0  
      255.255.255.0   U     100    0
     
 0            enp0s3

命令概述

线上机tcpcopy复制流量时将源地址改写为192.168.1.100网段的地址,那么在测试机上看到的流量中源地址全部是来源于这个地址,我们需要将返回给192.168.1.100这个地址的所有回应包通过这个IP 182.118.7.63 路由出去,这样在辅助机上就可以对回应包进行截获处理了。值得一提的是这种模式是在tcpcopy 1.0版本中对整个架构的一个改进,将原本需要运行在测试机上的intercept移除放到一个独立的辅助机上来,使得测试机需要做的操作少到仅仅是添加一条路由而已,对整个测试机的性能损耗可以忽略,排除了intercept运行在测试机上时产生的性能影响,使得测试数据更加接近真实水平。

注意

Gateway 对应的IP必须是可以访问的,否则路由记录会添加失败


总结:

由于不同的主机网络设定不一样,或自身有误操作却没有发现等问题导致测试环境无法正常运行,那么请使用 tcpdump -i any tcp host 192.168.1.100 这个命令来检查请求包、回应包的流向来确认是哪里出了问题。

时间: 2024-08-01 01:50:22

tcpcopy复制线上流量的相关文章

使用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

使用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导入线上流量进行功能和压力测试

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

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

一. 背景 去年做过一次mysql trace 重放的测试,由于performance schema本身采集样本的长度等限制,实际回放的成功率比较低. 最近找到一款开源的工具,基于TCPCopy实现了线上流量的仿真测试,这款开源工具是网易的王斌开发,后面很多公司的模拟在线测试都是基于TCPCopy实现. https://github.com/session-replay-tools/mysql-replay-module 1.实现原理 生产服务器上部署TCPCopy, 包捕获是在数据链路层增加一

(转) 发布或重启线上服务时抖动问题解决方案

转自 http://www.cnblogs.com/LBSer/p/3703967.html 相关: load.jstack.Java编译.Java运行模式 一.问题描述       在发布或重启某线上某服务时(jetty8作为服务器),常常发现有些机器的load会飙到非常高(高达70),并持续较长一段时间(5分钟)后回落(图1),与此同时响应时间曲线(图2)也与load曲线一致.注:load飙高的初始时刻是应用服务端口打开,流量打入时(Load指的是运行队列(run-queue)的长度:L=等

发布或重启线上服务时抖动问题解决方案

发布或重启线上服务时抖动问题解决方案 一.问题描述       在发布或重启某线上某服务时(jetty8作为服务器),常常发现有些机器的load会飙到非常高(高达70),并持续较长一段时间(5分钟)后回落(图1),与此同时响应时间曲线(图2)也与load曲线一致.注:load飙高的初始时刻是应用服务端口打开,流量打入时(load具体指什么可参考http://www.cnblogs.com/amsun/p/3155246.html). 图1 发布时候load飙高 图2 发布时候响应时间飙高 二.问

性能测试之线上引流测试--让性能测试更真实更丰富

为什么要做引流测试 目前为止大部分的测试是在测试环境下,通过模拟用户的行为来对系统进行验证,包括功能以及性能.在这个过程中,你可能会遇到以下问题: 用户访问行为比较复杂,模拟很难和用户行为一致,模拟不够真实; 线下模拟场景有限,会出现业务覆盖不全的情况.引流测试就是为了解决以上问题,通过把线上的真实流量复制到线下环境,解决测试环境模拟不够真实,或覆盖不够全面的问题. 引流的做法 目前不少公司对引流测试进行了实践,主要有以下4种引流方式: 以上几种办法各有利弊,有的是需要自己开发相应的工具来支持.

App线上推广的笨方法——从0到100万的质变

线上推广APP,有一些笨办法,经常被人忽视,但确是一些成本低.效果好的方法,我们今天就来讲讲这些线上推广APP的笨办法.比如说论坛发贴, QQ群聊,拉注册,比较辛苦,你拉来一个用户注册我们的网站,使用我们的APP,这是比较慢的方法.还有就是社交分享,比如说分享到微博.人人网.微信等等,这些都是App推广中的比较笨的方法. 还有一些快的方法,比如说投放电视广告,比如说上<天天向上>,卫视.汽车.公交车上面的广告.地铁上面的广告,明星代言.事件营销.另外就是疯狂砸钱,像滴滴打车一样.当然快的方法还

蚂蚁金服技术专家分享25个分布式缓存实践与线上案例

前言: 本文主要介绍使用分布式缓存的优秀实践和线上案例.这些案例是笔者在多家互联网公司里积累并形成的优秀实践,能够帮助大家在生产实践中避免很多不必要的生产事故. 一.缓存设计的核心要素 我们在应用中决定使用缓存时,通常需要进行详细的设计,因为设计缓存架构看似简单,实则不然,里面蕴含了很多深奥的原理,如果使用不当,则会造成很多生产事故甚至是服务雪崩之类的严重问题. 1.容量规划 缓存内容的大小缓存内容的数量淘汰策略缓存的数据结构每秒的读峰值每秒的写峰值2.性能优化 线程模型预热方法缓存分片冷热数据