使用tcpcopy

一、背景

一般来说,测试完成后,上线前不用真实的流量测试一下效果,总觉得不太妥,所以需要有工具来copy一下线上流量过来。

项目地址:https://github.com/session-replay-tools/tcpcopy

tcpcopy有两种结构,本文介绍的是intercept与测试机就是同一台机器的情况

二、操作

线上服务 aws-vicviz-p2(172.31.12.83):9091
需要转到 aws-vicviz-r2(172.31.13.153):8092

下载目标机的: wget https://github.com/session-replay-tools/intercept/archive/1.0.0.zip

下载源机的: wget https://github.com/session-replay-tools/tcpcopy/archive/v1.1.0.zip

目前这两个版本是匹配的

2.1 到目标机(aws-vicviz-r2)上去执行

1) 加载ipqueue模块
modprobe ip
queue
lsmod |grep ip_queue 查看是否加载成功

2)设置路由表
./configure --traditional 遇到了: checking for pcap.h ... not found
这时sudo yum install libpcap-devel安装好就可以找到了

make && make install

3)设置iptables

iptables -I OUTPUT -p tcp --sport 8092 -j QUEUE
注意,这个8092就是我们目标机(测试机)上应用程序监听的端口(例如springboot的),如果是别的话需要调整成对应的。

  • iptables -L -vnx 查看防火墙策略
  • 或者这样查看:sudo iptables -L OUTPUT --line-numbers
  • 删除:sudo iptables -D OUTPUT 1

4)执行intercept

/cluster/software/tcpcopy/intercept-1.0.0 [root@aws-vicviz-r2 intercept-1.0.0]#sudo /usr/local/intercept/sbin/intercept -d 查看一下进程: [root@aws-vicviz-r2 intercept-1.0.0]# ps -aux |grep intercept root 4144 0.2 0.0 24112 20472 ? Ss 00:50 0:00 /usr/local/intercept/sbin/intercept -d

这样就表示在目标机器上已经准备好将copy过来的tcp包转给我们的应用进程了。

2.2 在源机(aws-vicviz-p2)上执行

1)安装tcpcopy

[work@aws-vicviz-p2 tcpcopy-1.1.0]$ pwd /home/work/bigdata/software/tcpcopy-1.1.0 ./configure make
make install出现了问题,说是没有权限:
mkdir: cannot create directory ‘/usr/local/tcpcopy’: Permission denied
看上去是./configure需要加一下路径 于是修改一下: [work@aws-vicviz-p1 tcpcopy-1.1.0]$ ./configure --prefix=/home/work/bigdata/software/tcpcopy/tcpcopy-1.1.0/tcpcopyinstall make
make install
就安装到了指定的目录下面了。

开始执行: sudo /home/work/bigdata/software/tcpcopy/tcpcopy-1.1.0/tcpcopyinstall/sbin/tcpcopy -x 9091-172.31.13.153:8092 -s 172.31.13.153 -c 172.31.12.83 -n 1 -d

然后就会发现流量已经copy过来了。 其中n为流量copy的倍数,例如想以线上流量的100倍来测试,n写成100就可以了。

三、一些问题

3.1 我在r9这台机器make server时,提示少了一些.h的依赖。换到r2这台机器就好了,所以和机器环境还是有一些关系的。需要解决一下依赖问题。

3.2 另外intercept机器和target机器分开的新架构我还没有使用。

comments powered by Disqus