操作Client-VM2
modprobe ip_queue iptables -I OUTPUT -p tcp --sport 80 -j QUEUE interception
操作Client-VM1
tcpcopy 10.1.6.205 80 10.1.6.206 80
之前已经清空了两台机器的apache访问日志,现在访问205的web页面同时观察206的访问日志清空,会发现在205中记录的访问日志也会在206中出现。也可以把多台机器的访问copy到一台机器,很有意思吧,国产开源支持一下。
代码连接:http://code.google.com/p/tcpcopy/
作者交待了一些注意事项:
1)Linux平台,内核2.6+,需要支持netlink机制
2)TCPCopy中的tcpcopy和interception程序运行需要root权限
3)interception在同一台机器只需要要运行一个实例,多个实例还不支持
4)TCPCopy client需要连接测试服务器的36524端口,所以要对外开放36524端口
5)TCPCopy由于依赖于抓包函数,压力大的时候,抓包函数本身不可靠,所以会丢包,
进而丢失请求
6)由于interception程序密切跟ip queue内核模块相关,所以当压力很大的时候请求
丢失率很高,需要优化sysctl系统参数才能达到好的效果(通过cat /proc/net/ip_queue,
查看ip queue运行情况,如果Queue dropped的数值不断增大,则需要修改ip_queue_maxlen参数,
比如echo 4096 > /proc/sys/net/ipv4/ip_queue_maxlen;
如果Netlink droppedde的数值不断增大,修改net.core.rmem_max和net.core.wmem_max参数,
比如sysctl -w net.core.rmem_max=16777216和sysctl -w net.core.wmem_max=16777216)
7)复制同一台机器进程之间的请求,也即Local Requests,请设置lo MTU不超过1500,
并且在配置文件中不要设置127.0.0.1地址,要设置内网或者外网地址
8)TCP segmentation offloading相关问题(要注意网卡tso和gro要关闭)
如果tcpcopy所抓的数据包大小超过MTU,那么由于raw socket output的原因,需要你
改变在线设置,比如:ethtool -K eth1 tso off ; ethtool -K eth1 gro off
9)TCPCopy server,也即interception程序有可能会成为性能瓶颈,特别是对大数据响应这种情况
10)测试环境最好和在线环境一致,比如连接都保持keepalive
11)TCPCopy只与ip、tcp层的数据有关,如果请求验证与tcp层以上的协议有关,则系统不能正常运行。
例如:mysql连接协议,由于权限认证与tcp层上面的mysql协议有关,所以复制过去的请求会被目
标测试服务器认为非法请求,这个时候需要针对mysql协议作具体针对性的处理,tcpcopy程序才能正常运行
12)多层架构环境下,测试系统一定要独立,与在线系统没有业务关联,否则会影响在线
13)丢失请求率跟网络状况有关,最好在内网内复制请求
14)本系统不支持域名,只支持ip地址
15)针对长请求(比如上传文件),本系统不是很支持,预计0.5版本会支持
16)客户端ip地址为内网ip地址,一般情况下其应用请求是无法复制到外网测试机器上面去的。
17)为了避免不必要的麻烦,关闭的时候先关闭tcpcopy,然后再关闭interception
18)如果你想多重复制在线流量,见如下文档(0.4.0+版本)
http://blog.csdn.net/wangbin579/article/details/7476413
19)在测试过程中,如果你还想访问测试服务器的服务(0.3.5+版本),见如下文档
http://blog.csdn.net/wangbin579/article/details/7476477
20)如果请求丢失率还是比较高,可以在log.h中设置 #define DEBUG_TCPCOPY 1
(0.3.2+版本),重新编译,运行,输出若干分钟的log,发送给我([email protected])
21)由于更新比较快,高版本针对某些应用,请求丢失率反而有可能会下降,由于需要回归的测试太多,请谅解
22)目前追求的是功能,性能优化和代码重构会在稳定以后进行
23)源代码只部属到github
24)更多文档和实战,请访问 http://blog.csdn.net/wangbin579/article/category/926096
25)个人微博:http://weibo.com/tcpcopy