tcpcopy使用说明

简介

XCopy是由网易主导,多家公司成员1参与开发的具有在线server流量复制功能的一系列开源软件的总称,目的是复制在线server流量到测试系统中去,并引入在线的复杂性到测试系统,从而可以在测试系统中充分暴露在线的问题,帮助用户提前解决在线问题,降低上线失误率或者实现零失误。

XCopy系列包括TCPCopy、UDPCopy、MysqlCopy等开源软件(这些软件都集成在tcpcopy开源项目内)。

XCopy分为在线和离线工作方式,在线方式主要用来实时捕获在线请求数据包,离线方式主要从pcap 格式的文件中读取在线请求数据包。由于离线方式依赖于抓包工具(如tcpdump),而抓包工具在压力比较大的场合一般丢包非常严重,而且还会严重影响在线IO,因此一般不推荐在高压情况下使用离线回放方式。

XCopy 可以应用在以下领域:

1) 性能压力测试,如系统性能瓶颈查找、内核参数调优、不同程序性能比较等

2) 系统可用性测试

3) 冒烟测试

4) 回归测试,特别是针对技术类重构的测试

TCPCopy是XCopy系列中最重要的一个组件,其功能是复制在线server的TCP类型的请求数据包,修改TCP/IP头部信息,发送给测试服务器,达到欺骗测试服务器的TCP 程序的目的,从而为欺骗测试服务器上面的上层应用打下基础。

由于互联网大部分应用是基于TCP的,并且其中的大部分协议是很容易被欺骗的,因此只需TCPCopy就能欺骗大部分上层协议,如HTTP协议、memcached协议、POP3协议、SMTP 协议、各种私有协议等等。

tcpcopy示意图和说明

2.1 tcpcopy架构原理图(图1)

图1

在架构中,intercept在IP层截获上层应用的响应包。IP层截获上层应用响应包的技术有很多,TCPCopy采用了netlink技术(intercept 通过此接口获取响应包)与内核进行交互。根据Linux内核版本不同,可以采用IP Queue或者NFQueue来传递响应包intercept,具体如下:

内核版本<3.5, 默认采用IP Queue 传递响应包给intercept

内核版本>=3.5,默认采用NFQueue 传递响应包给intercept

当响应包传递给intercept 后,我们提取响应包的必要信息(一般为TCP/IP 头部信息),传递给tcpcopy,同时通过verdict 告诉内核,该如何处理这些响应包(如果没有设置白名单,这些响应包会在IP层被丢弃掉,从而无法被工作在数据链路层的tcpdump抓到)。

默认情况下,测试服务器的响应信息并不会返回给客户端,这样做的好处有:

1)不会增加出口带宽费用,节省测试成本

2)不会在互联网产生ghost 数据包

3)不会干扰客户端的TCP/IP 协议栈

 

2.2 模拟手机行情环境使用tcpcopy示意图(图2):

图2

模拟环境中服务器为生产环境一对一复制,使用相同配置与数据格式。通过使用TCPcopy软件复制用户实际操作请求,导入到测试手机行情服务器中。

2.3 tcpcopy类型说明

tcpcopy软件分为两种模式,在线版和离线版,可以选择适合自己一种方式进行测试即可,接下来进行一下简单说明:

2.3.1 在线版tcpcopy

需要两台服务器,一台正式生产服务器和一台测试模拟服务器,通过正式生产服务器在线真实情况通过tcpcopy软件,进行复制到测试模拟服务器上,进行压力测试。要求必须正式生产服务器开启运行中,进行真实模拟生产情况,并可以倍数放大环境,进行压力测试,现在版对于环境要求较高,要求生产服务器和当时用户信息情况进行测试。

2.3.2 离线版tcpcopy

只需一台测试模拟服务器即可,但必须在正式生产服务器上进行抓包生产文件,抓包文件就像录像带一样,在什么时间和生产环境中抓包的文件,在测试模拟服务器上进行回放还原也是当时的真实情况。比如抓包在12点至12点05分的文件,在测试模拟服务器上还原也是五分钟,用户信息也是当时五分钟内的情况。也可以进行倍数放大当时环境,进行压力测试。离线版对环境要求较低,只需一台测试模拟服务器,但需要花一定时间进行抓包,一旦有抓包文件,模拟就非常方便。

2.3.3 在线版和离线版总结

相比来看,离线版测试更加方便,对环境要求比较低,但不适合马上紧急测试,因为需要抓包文件的时间,而在线版如果拥有需要的环境,则可以马上进行测试。可以根据实际情况进行选择。

2.3.4 MysqlCopy说明

MysqlCopy是建立在TCPCopy基础上的,针对mysql应用的请求复制工具。

这里需要注意的是MysqlCopy只支持Mysql 4.1 and later,不支持之前的老版本。

MysqlCopy需要两台服务器进行数据库压力测试,客户任何访问数据库和修改数据库,都会将此复制到测试数据库服务器上做同样的操作,如果想进行压力测试可以借用sysbench软件实现。

tcpcopy参数说明

3.1 -x 参数

格式:-x <transfer,>

Transfer 具体格式如下:

服务器对外IP 地址:服务器应用端口号-测试服务器IP地址:测试服务器应用端口

Transfer 之间用“,”隔开,IP 地址和端口号之间用“:”隔开,服务器应用端口号和测

试服务器IP 地址之间用‘-’隔开

举例:(在生产环境服务器上执行下边命令,80是行情端口,192.168.0.2是测试ip,18080是测试端口)

./tcpcopy -x 80-192.168.0.2:18080

复制在线机器的80 端口应用的请求到192.168.0.2 上面的18080 端口

3.2 -i 参数

在离线模式下使用哪个离线文件

格式:-i <file>

其中file 是pcap 离线文件的文件路径

举例:tcpcopy -i online.pcap -x 12345-221.130.189.25:12345

3.3 -o 参数

格式:-o < device,>

指定从哪个网卡设备上发包

举例:

tcpcopy -o eth0 -x 12345-221.130.189.25:12345

从eth0 设备上来发包

需注意如下事项:

1)此参数只有在编译./configure --enable-dlinject 模式下才有效

--enable-dlinject说明

此模式是为了支持tcpcopy 能够从数据链路层发送请求数据包。

从数据链路层发包的好处是不会去干扰在线服务器的IP 模块(比如不会去干扰ip_conntrack 模块),但不好的地方是需要自己去解决路由问题。

2)-o 参数需要设置成与转发IP 地址相匹配的网卡设备

比如:转发IP 地址为外网IP 地址,那么-o 参数就设置成外网网卡设备的名称

3.4 -I 参数

离线模式下,降低请求之间的间隔,对稀疏的请求访问,其加速非常有效果

举例:

./tcpcopy -x 80-192.168.0.2:8080 -I 1000 -i online.pcap

对请求之间间隔1000毫秒以外的请求进行加速

注意只有在离线模式下有效

3.5 -a 参数

离线模式下,对请求数据包的访问进行加速

举例:

假设online.pcap 文件为在线请求数据包的抓包文件,时间为60 分钟

./tcpcopy -x 80-192.168.0.2:8080 -a 2 -i online.pcap

执行此命令后,离线回放加速了2 倍,只需要30分钟,离线回放就能完成

需要注意的是,此命令只有在离线模式下才有效,而且-a 参数设置越大,丢请求的概率

也越大。

3.6 -B 参数

格式:-B < num>

指定pcap 抓请求数据包的缓冲区大小,默认为16(单位为M)

举例:tcpcopy  -x 12345-221.130.189.25:12345 -B 32

需要注意的是此参数只有在pcap 模式下才有效(编译./configure --enable-pcap 的情况下)

--enable-pcap说明

这种模式是为了能够利用pcap 库(1.0 版本及其以后)进行抓包,利用pcap 的内核过滤接口,理论上可以提升抓请求数据包的效率,比如当在线机器应用种类比较多,需要复制某一个应用的请求到测试系统的时候,这种方式效率会比较高。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值