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马上生效
注意:辅助服务器不能开启这个功能
微信公众号: 架构师日常笔记 欢迎关注!