基于流量回放的性能测试

  • TCPCopy使用简介

一、 TCPCopy使用简介

1 概述

tcpcopy是一种请求复制(所有基于tcp的packets)工具,可以把在线流量导入到测试系统中去(也可以在测试系统内部放大流量),从而模拟真实运行环境,以便排查测试系统的性能问题和风险。TCPCopy的优势在于其实时性及真实性,除了少量的丢包,可以完全拷贝线上流量到测试机器,真实的模拟线上流量的变化规律。
在tcpcopy 1.0版本中对整个架构进行了改进,将原本低版本tcpcopy需要运行在测试机上的intercept移除放到一个独立的辅助机上来,使得测试机需要做的操作少到仅仅是添加一条路由而已,对整个测试机的性能损耗可以忽略,排除了intercept运行在测试机上时产生的性能影响,使得测试数据更加接近真实水平。


TCPCopy框架图

2 下载工具

下载tcpcopy及intercept:
https://github.com/wangbin579/tcpcopy
https://github.com/session-replay-tools/intercept

3 在线流量复制配置方法

说明:
假定我们现在有3台机器:
线上服务器:172.16.1.23
辅助服务器:172.16.1.24
测试服务器:172.16.1.25
若我们现在想将线上服务器172.16.1.23 80端口的流量导入到测试服务器172.16.1.25,我们需要按照下述流程进行操作。

3.1 线上服务器(流量源)部署tcpcopy

解压并安装:

#tar xf tcpcopy-1.0.0.tar.gz
#cd tcpcopy
#./configure
#make && make install

执行下述命令若能显示版本号则表示安装成功:

#/usr/local/tcpcopy/sbin/tcpcopy -v
tcpcopy version:1.0.0

启动脚本范例:

#/usr/local/tcpcopy/sbin/tcpcopy -x 80-172.16.1.25:80 -s 172.16.1.24 -c 172.16.100.x -d -C 4 -l /var/log/tcpcopy.log

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

3.2 辅助服务器(截获返回数据)部署intercept

解压并安装:

> tar xf intercept-1.0.0.tar.gz
> cd intercept
>./configure
> make && make install

执行下述命令若能显示版本号则表示安装成功:

> /usr/local/intercept/sbin/intercept -v
> intercept version:1.0.0

启动脚本范例:

> /usr/local/intercept/sbin/intercept -i em2 -l /var/log/intercept.log -F 'tcp and src port 80' -d

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

3.3 测试服务器(需要导流的目标机器)配置路由

添加路由配置范例:

> route add -net 172.16.100.0 netmask 255.255.255.0 gw 172.16.1.24

说明:
线上机tcpcopy复制流量时将源地址改写为172.16.100网段的地址,那么在测试机上看到的流量中源地址全部是来源于这个网段,
我们仅仅需要将返回给这个网段的所有客户端的请求全部通过辅助机 172.16.1.24 路由出去,这样在辅助机上就可以对全部的回应包进行截获处理了。

4 离线回放部署及配置方法

说明
整体操作流程也是与在线流量copy一样的,唯一的区别是不再是复制在线的即时流量,而是事先将在线流量录制为pcap离线文件然后进行回放。
注:因为线上不同时间段的用户量不一样,用户行为也是随时变化的,多次复制的线上流量肯定是会有所差异的,这样对服务器产生的压力也不一样。所以在做对比性的测试时推荐使用离线回放的方式,以确保每次测试时的请求及对服务器产生的压力是一致的。

4.1 安装并配置支持离线模式的tcpcopy

网上介绍0.98版本以上的tcpcopy才支持离线回放模式,保险起见推荐下载1.0.0最新版的tcpcopytcpcopy。
需要在configure时加上--offline参数才能支持离线回放(可执行configure --help查看帮助信息)
依次执行:

> ./configure --offline
> make&make install
4.2 使用tcpdump录制pcap离线文件
> tcpdump -i eth0 -w online.pcap tcp and port 54322    #录制54322端口的tcp请求,保存到online.pcap文件

参数说明:
-i eth0:eth0为网卡,获取方式可在liunx系统下执行ifconfig查看所有的网卡,选取需要的那个。
-w online.pcap:保存所录制请求的pcap文件,以便后续进行回放。可设置路径,e.g.-w /home/user/test.pcaptcp and port 80:截获端口为80的tcp请求,也可添加udp请求,和更改服务端口80,e.g. tcp and port 16001
-s 0:默认的话,tcpdump只显示部分数据包,-s snaplen是控制包长度的,默认是68字节,-s 0 则为全部字节,在使用过程中,如果添加-s则回放时会出现错误。可不使用该参数

4.3tcpcopy、intercept、路由配置

假设有3台机器:
测试机(被测应用所部署的服务器):10.1.2.196 172.16.1.25
辅助机(三次握手回包):10.1.2.203 172.16.1.24
流量回放机(回放pcap离线文件):10.1.2.195 172.16.1.23
辅助机执行intercept(捕获tcp连接中源端口为54322的所有数据)

> /usr/local/intercept/sbin/intercept -i em2 -l /var/log/intercept.log -F 'tcp and src port 54322' -d

流量回放机执行tcpcopy(将流量复制到测试机的54322端口,指定事先录制好的online.pcap文件):

> /usr/local/tcpcopy/sbin/tcpcopy -l /var/log/tcpcopy.log -x 54322-172.16.1.25:54322 -s 172.16.1.24 -c 172.16.1.x -i ./online.pcap

测试机配置路由(将返回给172.16.1网段的所有客户端的请求通过辅助机路由出去,以便辅助机对回包截获处理):

> route add -net 172.16.1.0 netmask 255.255.255.0 gw 172.16.1.24

回放流量时可以通过 tcpdump -n port 54322的方式抓包测试,亦可观察测试服务的日志确认是否有请求进来,至此流量回放完成。

4.4简化配置及操作方法

以上操作使用的是传统的部署模式,需要占用3台机器。若测试机不足时,也可以简化部署,将intercept直接部署在测试机上(可以省去配置route的操作),如:
测试机执行intercept

> /usr/local/intercept/sbin/intercept -i eth1 -l /var/log/intercept.log -F 'tcp and src port 54322' -d

流量回放机执行tcpcopy(需要通过-c参数将访问测试机的客户端ip地址改写为不存在或无法访问的地址,总之不能让响应包回到真正的客户端,否则会干扰测试的进行):

> /usr/local/tcpcopy/sbin/tcpcopy -l /var/log/tcpcopy.log -x 54322-172.16.1.25:54322 -s 172.16.1.25 -c 172.16.88.88 -i ./online.pcap

补充说明
开启tcpcopy或intercept后最好ps一下相关进程,以便确认启动成功。若未启动成功可以查看/var/log/tcpcopy.log(通过启动参数l自行指定)中的报错详情。
若要关闭服务,则直接kill掉tcpcopy或intercept中的一个进程即可,kill掉其中一个进程另一个进程会自动终止。
常见错误解决
1.执行./configure时报错:checking for pcap.h … not found
解决办法:yum install libpcap libpcap-devel(需要用到pcap库头文件)
2.运行TCPCopy命令时日志报错:[error] Can not connect to remote server(10.16.6.62:36524) (Connection refused)
解决办法:首先看看intercept是否已启动。如果已启动成功,看看是否辅助服务器的36524端口不能访问到,没有开通这个端口的权限。在iptable中加上对这个端口的访问(在运行TCPCOPY程序时,会去连辅助机的这个端口,这个端口是由intercept程序监听)
参考资料
https://github.com/wangbin579/tcpcopy
https://mfcheer.github.io/2017/02/28/tcpcopy工具分享/
http://ju.outofmemory.cn/entry/106907

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • 1概述 tcpcopy是一种请求复制(所有基于tcp的packets)工具,可以把在线流量导入到测试系统中去...
    shine_在路上阅读 21,777评论 2 11
  • 一、工具介绍 Tcpcopy是一个分布式在线压力测试工具,可以将线上流量拷贝到测试机器,实时的模拟线上环境,达到在...
    烨枫_邱阅读 955评论 0 1
  • 点击链接加入QQ群 522720170(免费公开课、视频应有尽有):https://jq.qq.com/?_wv=...
    测试帮日记阅读 1,119评论 0 0
  • 此刻的我侧身仰在床上,看着窗外那么好的阳光,心里都痒痒,好想出门玩耍呀~ 刘花生已经29周2天了,我的小心心既高兴...
    白大花阅读 204评论 1 0
  • 拉了十天的keep,今天开始补上课程,加油,像110奋斗~~~
    阿茹wang阅读 197评论 0 0