TCPcopy-TCP流重播工具

1.什么是tcpcopy

TCPCopy是一种TCP流重放工具,用于支持Internet服务器应用程序的真实测试。

tcp实时流对于Internet服务器应用程序的测试很重要,但是由于线上环境过于复杂,因此很难对其进行模拟。为了支持对Internet服务器应用程序进行更符合生产环境的测试,有了实时流复制工具TCPCopy,该工具可以生成与生产工作负荷类似的测试流。目前,TCPCopy在中国公司被广泛使用。除了占用额外的CPU,内存和带宽外,TCPCopy对生产系统几乎没有影响。在请求多样性,网络延迟和资源占用方面,复现的工作负载与生产环境的工作负载相似。

2.应用场景

  • 分布式压力测试
    • 使用tcpcopy复制实际数据来对服务器软件进行压力测试,可以发现只能在高压力情况下产生的错误。
  • 现场测试
    • 证明新系统是稳定的,可以发现仅在真实线上生产环境中出现的错误
  • 回归测试
  • 性能比较

3.实现原理

TCPcopy-TCP流重播工具_第1张图片

TCPcopy-TCP流重播工具_第2张图片

如上图,搭建并运行一套tcpcopy需要三台机器

  • Online Server:用来运行tcpcopy捕获线上真实流量的服务器,从数据链路层(pcap 接口)抓请求数据包,发包是从IP层发出去;
  • Target Server:运行测试程序,比如nginx、ats、whale。设置适当的路由命令,以将响应数据包(图中绿色箭头所示)路由到辅助服务器。
  • Assistant Server:运行intercept,原则上一定要用TS同网段的一台闲置服务器来充当辅助服务器。AS 在数据链路层截获到响应包,从中抽取出有用的信息,再返回给相应的 OS 上的 tcpcopy 进程。,以及充当黑洞。

理想状态:OS通过tcpcopy发送数据包时,它在到达TS之前可能会遇到很多挑战。由于数据包中的源IP地址仍然是最终用户的IP地址(默认情况下),而不是在线服务器的IP地址,因此某些安全设备可能会将其用于无效或伪造的数据包,并将其丢弃。在这种情况下,当在TS使用tcpdump捕获目标服务器上的数据包时,将不会捕获来自预期最终用户的数据包。如果上述有上述场景需求,就需要选择同一网段中的目标服务器进行测试。

所以最完美的情况是找同一网段的三台服务器来充当TS、OS、AS,还有另一种解决方案。tcpcopy可以将数据包发送到代理,然后代理将相应的请求发送到另一个网段中的目标服务器。

4.部署流程

由于公司的yum源已经集成tcpcopy的组件,这里放出github地址:https://github.com/session-replay-tools/tcpcopy

1) OS

yum install -y tcpcopy
tcpcopy  -x 80-42.236.8.169:80 -s 42.236.8.170 -c 211.91.146.251 -n 1 -d -r 20 -M 1460

-x 本机80端口的流量copy到42.236.8.169的80端口
-s 指定intercept机器(AS)的地址,tcpcopy要和intercept建立连接
-c 伪装地址,在把流量复制到测试服务器的时候,修改数据包的源地址为 211.91.146.251,这样方便指定路由。也可以写成211.91.146.x,这样源地址就是指定网段中的地址了。
-n 流量放大倍数,如果不是压测目的就不用指定这个参数。
-r 流量使用的百分数,表示只copy当前流量的百分之多少,后面接20,表示20%
-d 以守护模式运行。
-M mtu值

2)TS

route -n
route add -host 211.91.146.251 gw 42.236.8.170
route -n                              ##确认下路由是都设置成功

3)AS

intercept -i eth1 -F tcp and src port 80 -d

-i 指定监听在哪个端口。tcpcopy启动的时候会来连这个端口,如果连不上,就会启动失败,默认为公网ip的网卡
-F 过滤规则,语法和pcap一样。
-d 以守护进程方式运行

此时,如果设置正常的话,已经可以在TS上看到响应的流量,并且可以在相应的日志,可以加入相应的白盒黑盒监控等,进行查看。

你可能感兴趣的:(CDN,linux,linux,tcpcopy)