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

 

部署前准备:

1、准备一台线上机器,在该服务器上装tcpcopy,主要将该机器的tcp流量复制出来

2、准备一台测试服务器,将线上流量复制到该服务器上,需要与线上环境一样(这样才能接受到copy过来的请求)

3、准备一台辅助服务器,主要安装intercept这个服务,用于与tcpcopy服务进行通信(注意,该服务不启动的话,tcpcopy服务也起不来)

 

过程:tcpcopy会把要复制的端口的协议包复制出来,发给测试服务器的指定端口,测试服务器收到包后通过在测试服务器上修改路由条件(下面会提到怎么修改),会响应给辅助服务器,辅助服务器再丢掉这些包

 

开始部署

假设3台机器:线上服务器 Online Nginx 10.30.97.38 .测试服务器 Stage Nginx 10.30.96.3 .辅助服务器 Stage SF1R 10.30.96.30

 

线上服务器:

Clone the repo: git clone git://github.com/session-replay-tools/tcpcopy.git

解压安装服务

 

yum -y install libpcap-devel libpcap
tar -zxvf tcpcopy.tar
cd tcpcopy

./configure --prefix=/usr/local/tcpcopy && make && make install

启动命令

/usr/local/tcpcopy/sbin/tcpcopy -x 8080-10.30.96.3:8070 -s 10.30.96.30 -c 5.5.5.x -d -l /var/log/tcpcopy.log

参数详解:

-x 本地服务端口-测试服务器ip:测试服务器端口 

-s 辅助服务器ip

-c 将copy的包的源ip改成5.5.5.x

-d 后台执行

-l 日志输出

 

辅助服务器:

Clone the repo: git clone git://github.com/session-replay-tools/intercept.git

tar -zxvf tcpcopy.tar
cd tcpcopy

./configure --prefix=/usr/local/intercept && make && make install

启动命令

intercept -i eth0  -F tcp and src port 8070 -d

参数详解:

-i 监听的网卡

-F 监听协议

src port 包的源ip未8070

 

测试服务器:

配置路由规则

 route add -net 5.5.5.0 netmask 255.255.255.0 gw 10.30.96.30(辅助服务器ip )

把来自5.5.5.0的网段的包(tcpcopy启动命令配置的)转到10.30.96.30上

需要开启路由转发功能

echo "1" > /proc/sys/net/ipv4/ip_forward

永久生效的话,需要修改sysctl.conf:

net.ipv4.ip_forward = 1

执行sysctl -p马上生效

注意:辅助服务器不能开启这个功能

posted on 2018-01-10 11:03  一天不进步,就是退步  阅读(411)  评论(0编辑  收藏  举报