我也搞搞在线测试1--玩玩tcpcopy

一直对测试抱有怀疑的态度,线上环境这么复杂,怎么可以测的出什么有用的东西呢?可转身一想,不对,要是不测,不就更是什么也不知道了。于是,还是测吧,忽略结果的正确性,只从压力性方面看,还是可以看到很多有价值的东西。

第一次听说tcpcopy是在去年的时候,系统架构师大会时王斌有分享过(当然,我从没参加过大会,没钱、没票),当时在脑海里就留下了一个印象:好厉害的东西。

如下图,这是新版tcpcopy的架构图(第一次使用,就正好遇到新版发布,很兴奋):

从图上可以看的出来,运行tcpcopy需要3个组件:

1.线上服务器(online server):你想复制流量的那一台服务器,安装tcpcopy将流量复制一份到测试服务器
2.测试服务器(test server):需要把待测试应用的需要被捕获的响应数据包信息路由到辅助服务器assistant server 上面
3.辅助服务器(assistant server):需要安装intercept,我们在数据链路层截获到响应包,从中抽取出有用的信息,再返回给相应的tcpcopy

tcpcopy的架构发展史:http://blog.csdn.net/wangbin579/article/details/8949315

tcpcopy1.0系列使用方法:http://blog.csdn.net/wangbin579/article/details/8950282

将上面两篇文章看过后,基本上对tcpcopy就有了一个大概的了解,然后再看下官方github上的介绍,就可以直接上手测试使用了。

官方github项目介绍,参考地址:https://github.com/wangbin579/tcpcopy


我的安装与测试流程,是按照官方文档里的步骤来的,甚至命令都直接照搬(恩,简单省事,少出错),如下是一次我对线上业务做测试时的记录:

环境:
218.9.147.201:待测试服务器
218.9.147.202:线上服务器
218.9.147.205:辅助服务器

一: 安装tcpcopy

环境:CentOS 5.4 x86_64

1.在线上服务器218.9.147.202上安装tcpcopy

[root@cnc ~]# git clone git://github.com/session-replay-tools/tcpcopy.git
[root@cnc ~]# cd tcpcopy/
[root@cnc tcpcopy]# ./configure --pcap-capture --prefix=/usr/local/tcpcopy
[root@cnc tcpcopy]# make && make install

源码安装时会提示: checking for pcap.h … not found

恩,可以判断是pcap库的问题,安装相关依赖就行,搜索如下结果:

yum -y install libpcap-devel libpcap

结果被坑,centos 5.4中没有libpcap-devel 这个包,病机乱投医,想试试直接源码安装libpcap看结果:

[root@cnc ~]# wget http://www.tcpdump.org/release/libpcap-1.1.1.tar.gz
[root@cnc ~]# tar zxvf libpcap-1.1.1.tar.gz
[root@cnc ~]# cd libpcap-1.1.1
[root@cnc libpcap-1.1.1]# ./configure
[root@cnc libpcap-1.1.1]# make && make install

源码安装libpcap可以看下这篇文章:http://www.question-defense.com/2010/07/07/install-newest-libpcap-version-on-centos-linux

2.在辅助服务器218.9.147.205上安装intercept

[root@cnc ~]# tar zxvf intercept-1.0.0.tar.gz
[root@cnc ~]# cd intercept-1.0.0
[root@cnc intercept-1.0.0]# ./configure --prefix=/usr/local/intercept
[root@cnc intercept-1.0.0]# make && make install

二: 配置使用tcpcopy

1.首先在测试服务器218.9.147.201上,添加客户端(就是http请求是从谁发出来的)的路由到辅助服务器

/sbin/route add -net 62.135.200.0 netmask 255.255.255.0 gw 218.9.147.205

2.然后在辅助服务器218.9.147.205上开启intercept,监听测试服务器发过来的response,

/usr/local/intercept/sbin/intercept  -i bond0 -F 'tcp and src port 80' -d

3.在线上服务器218.9.147.202上,开启tcpcopy将流量复制到测试服务器

需要注意的是-c 改变了原来客户端的地址,将原来客户端的地址改为62.135.200.x中的任意一个。这个操作在作者的官方博客里有具体讲到,具体细节原理,可以直接看作者博客。

/usr/local/tcpcopy/sbin/tcpcopy -x 80-218.9.147.201:80 -s 218.9.147.205 -c 62.135.200.x -F 'tcp port 80' -i bond0  -l /tmp/tcpcopy.log -d

查看效果,如下图,可以看到日志里已经有访问过来了,并且客户端ip都变为62.135.200.x中的一个了:

自言自语:

恩,从标题就看到出来,这是还要写写其他的测试工具的节奏,敬请期待。