简介 TCPCOPY 是一个 tcp 流量的实时复制工具,其1.0版本由网易工程师 @tcpcopy 开发和维护。一般用来将生产环境的线上流量实时复制到测试环境进行测试。例如新系统上线前,如果我们希望进行一些基本的压力测试,那么我们可以直接利用 tcpcopy 来复制线上的流量过来对系统进行测试,这样的好处是测试数据接近真实水平,且实施起来相对简单。
一、架构
二、安装 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 测试中用到的3台服务器信息如下: 线上服务器 online server 内网IP地址 172.16.0.8/24 外网IP 223.202.0.8/28 测试服务器 test server 内网IP地址 172.16.0.230/24 外网IP 223.202.0.13/28 辅助服务器 assistant server 内网IP地址 172.16.0.219/24 外网IP 223.202.1.76/24 172.16.0.8是线上服务器,172.16.0.230和172.17.0.219是测试环境。我们在172.17.0.8上运行tcpcopy把线上流量拷贝到172.17.0.230,在172.17.0.230上我们通过路由将应答转向 172.16.0.219,在172.16.0.219上把应答丢弃。 第一步,在 online server 172.16.0.8上安装并运行 tcpcopy daemon : 我们从github上下载1.0版本的源码包; wget https://github.com/session-replay-tools/tcpcopy/archive/1.0.0.tar.gz -O tcpcopy-1.0.0.tar.gz 安装依赖包; yum -y install libpcap-devel 解压编译和安装; tar zxvf tcpcopy-1.0.0.tar.gz cd tcpcopy-1.0.0 ./configure (默认raw socket方式抓包) make make install 最后运行 tcpcopy; /usr/local/tcpcopy/sbin/tcpcopy -x 80-172.16.0.230:80 -s 172.16.0.219 -c 192.168.100.x -d -C 4 -l tcpcopy.log -P /var/run/tcpcopy.pid 指令说明: -x 80-172.16.0.230:80将本机上80端口的流量复制到172.16.0.230(测试服务器)的80端口 -s指定intercept进程所在的服务器172.16.0.219。(丢包服务器) -c修改请求的host地址为192.168.100.x,以便在230测试服务器上设置路由(设置路由是为了将应答转向丢219包服务器) -C 开启4个进程 -d 以daemon形式运行 -l 记录日志 -P 记录pid 其他参数可以通过/usr/local/tcpcopy/sbin/tcpcopy -h查看 成功运行后可以观察到的网路连接状态: #ss -an|grep 172.16.0.219 ESTAB 0 0 172.16.0.8:49034 172.16.0.219:36524 ESTAB 0 0 172.16.0.8:49035 172.16.0.219:36524 ESTAB 0 0 172.16.0.8:49032 172.16.0.219:36524 ESTAB 0 0 172.16.0.8:49033 172.16.0.219:36524 第二步,在 auxiliary server 172.16.0.219上安装并运行 intercept daemon : 从github上下载1.0版本的源码包; wget https://github.com/session-replay-tools/intercept/archive/1.0.0.tar.gz -O intercept-1.0.0.tar.gz 安装依赖包; yum -y install libpcap-devel(CentOS6系统直接yum安装即可1.4版本) 注意CentOS5系统libpcap-devel版本是libpcap-devel-0.9.4-15.el5,intercept-1.0需要libcap-devel1.4以上版本此时需要源码包安装 yum remove libpcap wget http://www.tcpdump.org/release/libpcap-1.4.0.tar.gz tar zxvf libpcap-1.4.0.tar.gz cd libpcap-1.4.0 ./configure make make install 解压编译和安装; tar zxvf intercept-1.0.0.tar.gz cd intercept-1.0.0 ./configure (默认raw socket方式抓包) make && make install 最后运行 intercept; /usr/local/intercept/sbin/intercept -i eth1 -l intercept.log -P /var/run/intercept.pid -F 'tcp and src port 80' -d 指令说明: -i 监控网卡接口 -l 记录日志 -F 监控的协议和端口 -P 记录pid -d 以daemon形式运行 其他参数可以通过/usr/local/intercept/sbin/intercept -h查看 成功运行后可以观察到的网路连接状态: # ss -an |grep 36524 LISTEN 0 5 *:36524 *:* ESTAB 0 66 172.16.0.219:36524 172.16.0.8:49034 ESTAB 0 0 172.16.0.219:36524 172.16.0.8:49035 ESTAB 0 66 172.16.0.219:36524 172.16.0.8:49032 ESTAB 0 0 172.16.0.219:36524 172.16.0.8:49033 第三步,在 test server 172.16.0.230上设置一条路由 : [root@bogon ~]# route add -net 192.168.100.0 netmask 255.255.255.0 gw 172.16.0.219 成功运行测试时可以观察到的网络连接状态: # ss -an |head State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 0 127.0.0.1:199 *:* LISTEN 512 0 *:80 *:* ESTAB 0 0 172.16.0.230:80 192.168.100.1:62602 ESTAB 0 0 172.16.0.230:80 192.168.100.4:54595 ESTAB 0 0 172.16.0.230:80 192.168.100.3:53566 ESTAB 0 0 172.16.0.230:80 192.168.100.6:49260 ESTAB 0 0 172.16.0.230:80 192.168.100.8:57598 ESTAB 0 0 172.16.0.230:80 192.168.100.7:64454 ESTAB 0 0 172.16.0.230:80 192.168.100.1:63081
参考链接: 1 2 3 http://blog.csdn.net/wangbin579/article/details/8949315 http://blog.csdn.net/wangbin579/article/details/8950282