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

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

https://www.cnblogs.com/276815076/p/8555904.html

假设我们要上线一个两年内不会宕机的先进架构。在上线前,免不了单元测试,功能测试,还有使用ab,webbench等等进行压力测试。

但这些步骤非生产环境下正式用户的行为。或许你会想到灰度上线,但毕竟可能会影响到部分用户,这怎么对得起我们两年内不宕机的承诺呢?

好在网易的 王斌 开发了tcpcopy, 可以导入线上流量进行功能和压力测试。

tcpcopy介绍

tcpcopy是一种请求复制工具。可以将线上流量拷贝到测试机器,实时的模拟线上环境。在不影响线上用户的情况下,使用线上流量进行测试,以尽早发现bug。也可以通过放大流量,进行压力测试,评估系统承载能力。

tcpcopy可以从线上服务器的IP层抓取在线请求的数据包,修改相关属性,利用raw socket output技术(packet injection 技术之一)将其发送给测试服务器进行测试。

发送到测试服务器的数据包会在TCP/IP协议栈被识别,其中带有payload(tcp data)的数据包最终进入到测试服务器的上层应用(如nginx),上层应用在处理完请求之后,将响应传递给测试服务器的TCP/IP协议栈。

在测试服务器上启用ip_queue模块,并使用iptables在IP层将响应结果数据包发往QUEUE(ip_queue)。

测试服务器上运行在用户空间的拦截程序(intercept进程),通过打开netlink的socket接受内核通过ip_queue所传递来的网络数据包(即上层应用的响应内容)进行裁定,将结果返回内核,进行出队列的操作。intercept进程默认会丢弃上层应用的响应内容,返回ip header,以释放tcp连接。

intercept进程也可以通过-x(passlist)参数,不drop指定ip lists发出请求的响应内容。默认drop是为了:

1 减少出口带宽占用,节约成本

2 不影响客户端(线上服务)的`TCP/IP`协议栈

3 不会在互联网上产生ghost数据包

tcpcopy工作流程

如上图,tcpcopy拷贝一次流量访问的步骤如下:

① 一个访问到达线上前端机;

② socket数据包在ip层被拷贝了一份传给tcpcopy进程;

③ tcpcopy修改包的目的及源地址,发给目标测试机;

④ 拷贝的包到达目标测试机;

⑤ 目标测试机的nginx处理访问,并返回结果;

⑥ 返回结果在ip层被截获、丢弃,由intercpet进程拷贝返回结果的ip header并返回;

⑦ ip header被发送给线上前端机的tcpcopy进程。

安装和配置

tcpcopy有两种工作模式:

1 实时拷贝数据包

2 通过使用tcpdump等抓包生成的文件进行离线(offline)请求重放

如果采用实时拷贝线上流程进行导入的方式,需要分别在线上服务器和测试服务器安装tcpcopy,对于离线模式,只需要在测试服务器上安装tcpcopy,编译时指定 --enable-offline。

安装步骤如下:

wget https://github.com/wangbin579/tcpcopy/archive/0.9.0.tar.gz -O tcpcopy-0.9.0.tar.gz --no-check-certificate

tar zxvf tcpcopy-0.9.0.tar.gz

cd tcpcopy-0.9.0

./autogen.sh

./configure --prefix=/usr/local/tcpcopy

make

sudo make install

目标测试机配置

线上服务器拷贝的数据包发送至测试服务器进行处理之后,测试服务器需要通过iptables将响应结果发送至QUEUE(ip_queue),这样测试服务器上运行的intercept拦截进程才能通过打开的netlinksocket获取传递过来的数据包并进行裁定。所以测试服务器上需要开启iptables防火墙,并启用内核模块ip_queue

modprobe ip_queue

/etc/init.d/iptables start

因为线上服务器需要和目标测试服务器通信,传递请求数据包和控制信息(封装的ip packet header),所以需要在测试服务器上添加相关iptables防火墙规则。编辑/etc/sysconfig/iptables,添加:

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 36524 -j ACCEPT

然后重启iptables

/etc/init.d/iptables restart

接着执行:

iptables -I OUTPUT -p tcp --sport 80 -j QUEUE

将响应结果发送至QUEUE(ip_queue),从而实现运行在用户态的进程对相关数据包进行裁定。

相关使用

本文以线上和测试机的web服务都使用80端口,传递控制信息使用默认的36524端口为例。如果使用别的端口,记得修改相关iptables防火墙规则。

离线 offline

1) 在线上服务器抓包

tcpdump -i eth0 tcp and port 80 -s 0 -w online.pcap

2) 将抓包生成的文件拷贝到测试服务器

3) 在测试服务器上进行执行如下命令进行重放

cd /usr/local/tcpcopy/bin

sudo ./intercept

sudo ./tcpcopy -i /path/online.pcap -x 80-10.16.12.11:80

tcpcopy -i <抓包文件地址> -x <port>-<本地ip>:<port>

在线实时复制 online

1) 在测试服务器上启动intercept拦截进程

cd /usr/local/tcpcopy/bin

sudo ./intercept

2) 在线上服务器复制流量到测试服务器

cd /usr/local/tcpcopy/bin

sudo ./tcpcopy -x 80-10.16.12.11:80 -c 10.16.12.12

tcpcopy -x 服务器应用端口号-测试服务器ip地址:测试服务器应用端口 -c 本地服务器ip

相关搜索

Nginx

防火墙

Wget

网易

技术

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