一、tcpcopy这个软件第一次听说还是在9月份的系统架构师大会上听说的,可一直没时间折腾,前几天弄了一套环境想体验一把,没想到第一次就各种不顺利,在这里特别感谢作者@王斌的细心指导排查,最后找到了问题辅助服务器上开启了路由功能(net.ipv4.ip_forward = 0),真是太坑爹了,tcpcopy的相关介绍请看tcpcopy的介绍、功能,tcpcopy分为tcpcopy client和tcpcopy server,其中tcpcopy client运行在在线服务器上面,用来捕获在线请求数据包;tcpcopy server(监听端口为36524)运行在测试辅助机器(新架构)上面,在测试服务器的响应包丢弃之前截获测试服务器的响应包,并通过tcpcopy client和tcpcopy server之间的tcp连接传递响应包的tcp和ip
头部信息给tcpcopy client,以完成tcp交互。
二、环境
client: 10.10.1.245 线上server:10.10.2.240 测试server:10.10.2.241 辅助server:10.10.2.242
三、部署
1、线上和测试服务器的web服务部署这里就不在描述,本文中web服务跑在80端口上
2、10.10.2.240(tcpcopy client)和10.10.2.242(tcpcopy server)上部署tcpcopy
yum -y install libpcap-devel wget http://tcpcopy.googlecode.com/files/tcpcopy-0.9.6.tar.gz tar -zxvf tcpcopy-0.9.6.tar.gz cd tcpcopy-0.9.6 ./configure --enable-advanced --enable-pcap make make install
3、启动线上服务器(10.10.2.240)的tcpcopy client
/usr/local/bin/tcpcopy -x 10.10.2.240:80-10.10.2.241:80 -s 10.10.2.242 -i eth1 -d 解释:复制线上10.10.2.240:80的流量到测试服务器10.10.2.241:80,-s指定辅助服务器(intercept serve),-i 指定从那块网卡抓包
4、启动辅助服务器(10.10.2.242)的tcpcopy server
/usr/local/bin/intercept -i eth1 -F 'tcp and src host 10.10.2.241 and src port 80' -d
5、测试服务器上加路由:
route add -host 10.10.1.245 gw 10.10.2.242 解释:客户端(10.10.1.245)的请求走辅助服务器(10.10.2.242),如果是外网的应用,测试服务器的默认路由可以设置成辅助服务器。
到此,整个环境已经ok了,你在client上访问线上服务器,测试服务器同样也会收到请求,部署的过程中需要注意的两点:
1、辅助服务器上一定不要开路由功能,开了的话他也会给client回包,导致流量复制失败;
2、启动顺序,先启动tcpcopy server,后启动tcpcopy client
PS:
1、如何复制N倍流量到测试机?有两种方法,举例复制3倍流量的两种方法:
第一种: /usr/local/bin/tcpcopy -x 10.10.2.240:80-10.10.2.241:80 -s 10.10.2.242 -i eth1 -d -n 3 第二种: /usr/local/bin/tcpcopy -x 10.10.2.240:80-10.10.2.241:80 -s 10.10.2.242 -i eth1 -d /usr/local/bin/tcpcopy -x 10.10.2.240:80-10.10.2.241:80 -s 10.10.2.242 -i eth1 -d -f 1 /usr/local/bin/tcpcopy -x 10.10.2.240:80-10.10.2.241:80 -s 10.10.2.242 -i eth1 -d -f 2
2、如何把线上流量导入到测试系统LVS中?下面具体介绍:
A、环境: 线上server:10.10.2.100 外网IP:x.x.x.x 测试server1:10.10.2.241 测试server2:10.10.2.242 辅助sever: 10.10.2.246 LVS 调度:10.10.2.240 VIP :10.10.2.245 B、说明: 1、10.10.2.240是LB,10.10.2.241和10.10.2.242是realserver 2、realserver上部署了和线上一样的web应用,同时修改默认网关为辅助server route del default gw 10.10.2.1 route add default gw 10.10.2.246 PS:在设置默认网关为辅助服务器的同时要保证lvs可以正常监控到realserver,也就是要保证LB和realserver之前的网络是正常,大家的网络环境都不一样,这个需要注意一下 3、辅助server在上面运行intercept,运行方法如下: /usr/local/bin/intercept -i eth1 -F 'tcp and src port 80' -d 4、线上server运行tcpcopy,运行方法: /usr/local/bin/tcpcopy -x 80-10.10.2.245:80 -s 10.10.2.246:36524 -i eth0 -d 解释:复制网卡设备eth0上面的在线80端口的数据包到虚拟ip地址为10.10.2.245的系统中去,其中测试应用端口号为80端口,运行intercept的机器ip地址为10.10.2.246,端口号为36524。 PS:如果要复制的流量很大,那一台辅助server岂不是成了瓶颈?别急,辅助server可以扩展的,比如有两台辅助server10.10.2.246和10.10.2.247,那线上server的tcpcopy可以这样运行: /usr/local/bin/tcpcopy -x 80-10.10.2.245:80 -s 10.10.2.246:36524,10.10.2.247:36524 -i eth0 -d
实际效果如下: