admin 发表于 2017-10-2 07:37:44

TCPCopy 线上流量复制工具


TCPCopy是一种重放TCP流的工具,利用实在情况来测试互联网办事器上的利用法式。
一、描写:
虽然实在的实时流量对于Internet办事器利用法式的测试很重要,可是由于生产情况中的情况很负责,测试情况很难完全模拟线上情况。为了可以更实在的测试,我们开辟了一款线上流量复制工具-TCPCopy,它可以利用线上实在的流量来对测试情况中的办事器停止测试。今朝,TcpCopy技术已经在中国很多公司大量利用。
二、利用处景:
1)散布式压力测试
利用tcpcopy复制实在的数据来停止办事器的压力测试。有些bug只要在高并发的情况下才可以被发现。
2)仿真尝试:
被证实是稳定的新系统,其bug只能在真正利用的时辰才能被发现
3)回归测试
4)性能对照
三、框架:

data/attachment/forum/img/025724zku0xzeogpk0z44f.gif

如Figure1中所示,tcpcopy包括两部分:tcpcopy(client)和intercept(server)(后文中同一将tcpcopy-client称为tcpcopy,将tcpcopy-server称为intercept),当tcpcopy运转在生产办事器并从生产办事器抓取请求时,inteceptor运转在帮助办事器上停止一些帮助工作,例如,响应tcpcopy。牢记,测试利用法式应当运转在测试办事器上。
tcpcopy默许情况下利用socket输入技术在收集层抓取线上的数据包,做一些根基处置(包括:模拟TCP交互,收集控制,以及模拟传输层和利用层),利用socket输出技术发送数据包到测试办事器(如粉色箭头所示)
tcpcopy的测试办事器需要做的唯一操纵是:设备适当的参数使响应信息发送到帮助办事器中(装intercept的办事器)(如绿色箭头所示)
intercept(默许)将响应信息传送给tcpcopy。经过抓取响应包,intercept提取响应头信息,并利用一个特别的通道将响应头信息发送给tcpcopy(如紫色箭头所示)。当tcpcopy接管到响应头信息,它操纵头信息点窜在线打包器的属性并继续发送另一个包。该当留意,来自测试办事器的响应被路由到应当充任黑洞的帮助办事器。
四、快速起头
1、获得intercept的两种方式:
1)Download the latest intercept release.
2)clone git://github.com/session-replay-tools/intercept.git
2、获得tcpcopy的两种方式
1)Download the latest tcpcopy release.
2)clone git://github.com/session-replay-tools/tcpcopy.git
五、获得安装在帮助办事器上的intercept
1)cd intercept
2)./configure
3)挑选适当的设置参数
4)make
5)make install
六、intercept的设置参数
--single            intercept运转在单机情况下
--with-pfring=PATH将途径设备为PF_RING库源
--with-debug      以debug形式编译intercept(保存在日志文件中)
七、获得安装在生产办事器上的tcpcopy
1)cd tcpcopy
2)./configure
3)挑选适当的设置参数
4)make
5)make install
八、tcpcopy的设置参数
--offline 从pcap文件重放TCP流
--pcap-capture 在数据链路层抓包(默许在收集层)
--pcap-send 在数据链路层发包(默许在收集层)
--with-pfring=PATH 将途径设备为PF_RING库源
--set-protocol-module=PATH 设备tcpcopy为内部协议模块工作
--single 假如intercept和tcpcopy都设备为单机形式,只要一个tcpcopy和一个intercept一路工作,将会获得更好的性能
--with-debug 以debug形式编译tcpcopy(保存在日志文件中)
九、运转tcpcopy
确保tcpcopy和intercept都设置为“./configure”
1)在运转利用法式的测试办事器上,正确设备路由号令以将响应数据包发送到帮助办事器上
例如:
假定61.135.233.161是帮助办事器的IP地址。 我们设备以下route号令将一切对62.135.200.x的的响应路由到帮助办事器。
route add -net 62.135.200.0 netmask 255.255.255.0 gw 61.135.233.161
2)在运转intercept的帮助办事器上(需要root权限大概能利用socket通讯的权限)
./intercept -F-i
请留意,过滤器格式与pcap过滤器不异。
例如:./intercept -i eth0 -F 'tcp and src port 8080' -d
intercept将捕捉基于TCP利用的响应,该利用监听在装备的8080端口上
3)生产办事器中(需要root权限大概能利用socket通讯的权限)
./tcpcopy -x localServerPort-targetServerIP:targetServerPort -s
[-c ]
例如(假定61.135.233.160是方针办事器的IP地址):
./tcpcopy -x 80-61.135.233.160:8080 -s 61.135.233.161 -c 62.135.200.x
tcpcopy将抓取当前办事器上80端口的数据包,点窜客户端IP地址为62.135.200.x,将这些数据包发送到ip地址为61.135.233.160,端口为8080的测试办事器,而且毗连61.135.233.161,告诉intercept将响应数据包发送给它(tcpcopy)
虽然“-c”参数是可选的,但在此设备以便简化路由号令。
10、留意
1)只能在linux上测试(kernal 2.6 or above)
2)tcpcopy能够丢包,是以丧失请求
3)root权限或socket权限是必须的(例如 setcap CAP_NET_RAW = ep tcpcopy)
4)TCPCopy现在只支持客户端启动的毗连
5)TCPCopy不支持利用SSL / TLS的办事器利用法式的重放
6)对于MySQL会话重放,请参考 https://github.com/session-replay-tools
7)不应当在帮助办事器上设备ip转发
8)请履行“./tcpcopy -h”或“./intercept -h”以获得更多具体信息
十一、影响身分
有几个身分能够影响TCPCopy,将在以下部分中具体先容:
1)抓包接口
tcpcopy默许利用套接字输入接口在收集层抓取生产办事器的数据包。在系统忙时,系统内核能够会丢包。
假如你设置tcpcopy的参数“--pcap-capture”,tcpcopy将在数据链路层抓包,也可以过滤内核中的数据包。在PF_RING资笔菩,当利用pcap捕捉时,tcpcopy将丧失更少的数据包。
也许抓请求包的最好方式是经过交换机镜像进口的数据包,然后经过负载平衡器将庞大的流量分别到几台机械
2)发送接口
tcpcopy默许利用套接字输出接口在收集层发送数据包到测试办事器。假如你想避免IP毗连跟踪题目大概获得更好的性能表示,设置tcpcopy的参数“--pcap-send”,设备适当的参数,tcpcopy可以在数据链路层发送数据包到测试办事器。
3)数据包在通往测试办事器的路上
当一个数据包被tcpcopy发送时,它能够在到达测试办事器前遭到很多应战。由于数据包中的源IP地址仍然是终端用户的IP地址(默许情况下)而不是生产办事器的IP地址,一些平安装备能够将该包削弱或当做捏造的包抛弃它。这类情况下,你在测试办事器利用tcp抓包工具,能够抓取不到期望的终端用户的数据包。要肯定你能否正处于这类情况下,你可以利用同一网段下的测试办事器做个小测试。假如数据包能被成功的发送到同一网段的测试办事器,而不能发送到分歧网段的测试办事器,那末证实你的数据包在半路被抛弃了。
为领会决这个题目,我们倡议将tcpcopy、测试办事器、intercept摆设在同一个网段内。在同一网段中有一个代理的帮助下还有另一个处理计划,tcpcopy可以向代剃头送数据包,然后代理睬将响应的请求发送到另一个网段中的测试办事器。
留意,在同一网段中的一个虚拟机上摆设方针办事器利用法式能够面临上述题目
4)测试办事器的路由
测试办事器能够设备了反向过滤技术,可以检查包中源IP地址能否是被捏造的。假如是,则该包在收集层被抛弃。
假如在测试办事器中能用tcp抓包工具抓到包,可是测试办事器上的利用法式接收不到任何请求,你应当检查你能否有类似反向过滤技术的设备。假如设备了,你不能不移除相关的设备来让数据包经过收集层。
也有些其他缘由能够致使tcpcopy不能一般工作,例如防火墙设备题目。
5)测试办事器上的利用法式
测试办事器上的利用法式能够不能实时处置一切的请求。一方面,利用中的bug致使请求很长时候得不到响应;另一方面,一些TCP层以上的协议只处置socket缓冲中的第一个请求,将剩下的请求留在socket缓冲中不处置。
6)帮助办事器的路由
你不应当设备ip转发为true大概帮助办事器不能作为一个黑洞工作。
十二、历史版本
2014.09 v1.0 TCPCopy released
十三、毛病和功用请求
有毛病或功用请求?请翻开一个新题目。 在翻开任何题目之前,请搜索现有题目。
十四、版权和答应
版权一切2016按照BSD答应。
要利用MySQL重放Session,请参考:mysql-replay-module
原文链接:https://github.com/wangbin579/tcpcopy

页: [1]
查看完整版本: TCPCopy 线上流量复制工具