工具调试:

线上服务器,启动tcpcopy:

./tcpcopy -x 8090-192.168.57.126:8090 -s 192.168.57.128 -c 10.5.214.x

测试服务器,增加路由:

route add -net 10.5.214.0 netmask 255.255.255.0 gw 192.168.57.128

辅助服务器,启动监听:

./intercept -i eth0 -F 'tcp and src port 8090' –d

留神:具体命令及阐明请参考《tcpcopy装置教程》文档

1 应用tcpdump实时复制流量

通过该形式,能够实时的获取线上的流量并在测试环境施行压测。

实时获取流量命令:

./tcpcopy -x 8090-192.168.57.126:8090 -s 192.168.57.128 -c 10.5.214.x –n 5

其中:

8090为线上服务本机监控的8090端口

192.168.57.126:8090 为测试环境的地址及端口

-s 192.168.57.128指辅助服务器 (_intercept__用于丢包_)

-c 10.5.214.x 为将客户端的申请起源ip批改为指定的某些ip,不便日志收集、治理和查找

-n 5 指流量放大倍数

2 应用tcpdump生成文件进行离线申请重做

2.1 抓包生成离线文件

通过该形式,能够将线上服务器的申请抓取保留成一个文件,而后将该文件放在测试服务器上进行申请回访,实现离线压测

线上服务器抓取申请保留至文件命令:

tcpdump -i eth0 tcp and port 80 -s 0 -w online.pcap

或者 tcpdump -i any tcp and port 80 -s 0 -w online.pcap

阐明:

-i eth0:eth0为网卡,获取形式可在liunx零碎下执行ifconfig查看所有的网卡,选取须要的那个。

-w online.pcap:为获取pcap文件进行回放,可设置门路,e.g. -w /home/user/test.pcap

tcp and port 80: 截获端口为80的tcp申请,也可增加udp申请,和更改服务端口80,e.g. tcp and port 16001
-s 0: 默认的话,tcpdump只显示局部数据包,-s snaplen是管制包长度的,默认是68字节,-s 0 则为全副字节,在应用过程中,如果增加-s则回放时会呈现谬误。可不应用该参数

2.2 离线申请重做

1、在测试服务器上安装tcpcopy

2、将现网dump的pcap包拷贝到测试服务器上

3、执行以下门路进行回放重做:

./tcpcopy -x 8090-192.168.57.126:8090 -s 192.168.57.128 -i /data/test_web/online.pcap

可能呈现的问题:

1、谬误提醒:tcpcopy: illegal argument "i"

解决办法:须要装置tcpcopy的离线模式

3 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 模式下才无效

l --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 的状况下)

l --enable-pcap阐明

这种模式是为了可能利用pcap 库(1.0 版本及其当前)进行抓包,利用pcap 的内核过滤接口,实践上能够晋升抓申请数据包的效率,比方当在线机器利用品种比拟多,须要复制某一个利用的申请到测试零碎的时候,这种形式效率会比拟高。

3.7 -F 参数

格局:-F < filter>

指定抓包的过滤条件,具体格局能够参考tcpdump 或者pcap filter 的格局

一旦设置此参数,tcpcopy 不会主动去结构filter,采纳-F 参数指定的filter 去过滤申请

数据包

举例:

tcpcopy  -x 12345-221.130.189.25:12345 -F 'tcp and dst port 11311 and dst host 10.100.10.1'

复制目标地址为10.100.10.1 且目标端口为11311 的TCP 申请数据包

须要留神的是此参数只有在pcap 模式下才无效(编译./configure --enable-pcap 的状况下)

--enable-pcap阐明参见3.6

3.8 -C 参数

指定tcpcopy 和intercept 之间的连贯数量,默认为2 条连贯供响应包的返回和路由信息的传递,最高16条。在低压状况下,加大此参数,能够进步吞吐量,但整体性能会有肯定水平的降落。

举例:

tcpcopy  -x 12345-221.130.189.25:12345 -C 4

3.9 -c 参数

格局:-c <IP,>

扭转申请数据包的源IP地址为IP地址列表中的某个IP地址

举例:

假如你复制的申请是本地localhost(127.0.0.1)的申请(比方抓包失去的后果相似于

127.0.0.1:80à127.0.0.1:8080),那么间接复制这样的申请到其它机器下来,个别是不行的,

须要批改数据包的源IP地址,-c参数就是用来扭转源IP 地址的。

举例

./tcpcopy -x 8080-192.168.0.2:8080 -c 192.168.0.1

复制127.0.0.1下面的8080端口利用的申请到192.168.0.2下面的8080端口,同时批改

源IP地址127.0.0.1为192.168.0.1地址。

须要留神如下内容:

1)此参数在跨网段安全性比拟高的场合,比拟无效。

2)tcpcopy 仅仅扭转客户端IP,不会主动解决扭转所带来的端口抵触问题。

3)当客户端IP 地址较多时,为了尽可能地防止端口抵触问题,IP 地址列表的数目个别

越多越好。

3.10 -n 参数

如果你要进行多重复制,那么此参数的值就是代表复制过来的流量是在线的n 倍,倍数

越小,成果越好,因为多重复制的原理是批改端口号,因而复制的倍数越大,端口抵触的概

率越大,特地是源IP 地址非常少,短连贯的的内网利用场合。零碎默认最大值为1023 倍。

举例

./tcpcopy -x 80-192.168.0.2:8080 -n 3

复制3 倍的在线服务器的80 端口利用申请流量到192.168.0.2 的8080 端口

3.11 -f 参数

如果你要运行多个tcpcopy 实例,复制申请到同一台测试服务器下面去,那么此参数就

是为此设置的,常见于逐渐增大流量的场合。最大值为1023。

举例:

./tcpcopy -x 80-192.168.0.2:8080

./tcpcopy -x 80-192.168.0.2:8080 -f 1

./tcpcopy -x 80-192.168.0.2:8080 -f 2

这里咱们在在线服务器运行三个实例,能够把测试服务器的流量放大到在线的3 倍。

须要留神的是,如果要用-f 参数,复制给同一台测试服务器下面的同一个利用的不同tcpcopy 实例之间的-f 参数的值必须是不同的。

3.12 -r 参数

如果你想复制在线服务器利用的局部流量,能够采纳-r 参数来实现,参数范畴是1~99,

其它值都是全流量复制。

举例:

./tcpcopy -x 80-192.168.0.2:8080 -r 20

这里tcpcopy 复制在线服务器8080 端口利用的20%流量给后端服务器,须要留神的是

20%是依据session(这里session 是由客户端IP,客户端端口决定)来统计的。

-r 参数常见于对测试利用进行profile 的场合或者测试服务器配置不如在线服务器的场

合。

3.13 -M 参数

此参数设置tcpcopy 发送数据包的MTU 值,默认为1500 字节,如果零碎MTU 值小于

1500 字节,须要调整此参数,否则会导致tcpcopy 发送数据包失败。

举例:tcpcopy  -x 12345-221.130.189.25:12345 -M 1200

3.14 -m 参数

此参数个别只有在Linux 内核2.6.32 版本及其当前版本才无效,如果内存超过了此设置值,那么tcpcopy 就主动退出,默认是512M,这是为了爱护在线,避免tcpcopy 占用过多内存。

举例:tcpcopy  -x 12345-221.130.189.25:12345 -m 1024

3.15 -s 参数

格局:-s <server,> intercept server list

server 具体格局如下:

ip_addr1:port1, ip_addr2:port2, ...

指定真正运行intercept 的地址列表,通过此参数能够和任意一台服务器的任意一个

intercept 实例进行通信。

举例如下:

./tcpcopy -x 80-10.120.12.211:28080 -s 10.120.12.161:36525

复制在线80 端口的流量到IP 地址为10.120.12.211 的测试子系统中去(其中测试零碎

下面运行28080 端口服务), 并设置tcpcopy 与intercept 的通信地址列表( tcpcopy 与

10.120.12.161 下面的36525 端口的intercept 通信)。

留神:

-s 参数只有编译./configure --enable-dr 或者新架构下才无效

l --enable-dr阐明

通过编译后,工作在DR模式。DR模式取之于LVS 的DR 利用场景,是为了解决复制在线流量给带有LVS(因为大部分场景下采纳DR)的子系统。

因为在线流量复制给LVS 后,LVS会把不同连贯的数据包依照肯定的策略分发给不同的测试服务器,导致了与惯例TCPCopy 用法的不同。

上面内容讲述的是在传统架构下的DR 模式相干内容。

为了解决响应包如何返回的问题,此模式下的tcpcopy 会把每个会话的路由信息传递给每一台测试服务器下面相应的intercept。因而tcpcopy 执行命令的时候会多出-s 参数,用来指定真正的real server 的IP 地址,而intercept 则须要设置-x 参数,参数的值就是LVS服务器的所用的理论IP地址,设置的目地是让LVS 收回的数据包(即检测real server 的衰弱水平的数据包)可能通过测试服务器的IP层,这样LVS 才会认为这些real server 是衰弱的,而不是处于解体的状态。

实践上,如果数据包达到测试服务器之前,其目标IP 地址存在NAT 变换(DestinationNetwork Address Translation.),也就是说目标IP地址会被扭转的状况下,那么DR模式也能实用,这种场景下的利用能够看成是DR的一种非凡利用场景。

值得注意的是,默认状况下,如果LVS 子系统中的一台real server 机器下面intercept过程解体后,仅仅重新启动intercept, TCPCopy 不会失常工作,须要重新启动所有tcpcopy能力顺利工作,为了防止此麻烦, tcpcopy 运行的时候须要加上-L 参数即可解决此问题。

3.16 -t 参数

如果你的在线利用响应十分慢或者长连贯利用的场合,那么举荐设置更大的-t 参数值(默认是120s,如果120s 内没有收到测试服务器的响应,那么这个申请会话就可能被tcpcopy给抛弃掉)。

举例:

tcpcopy  -x 12345-221.130.189.25:12345 -t 180

3.17 -l 参数

设置谬误日志文件的门路

举例:tcpcopy  -x 12345-221.130.189.25:12345 -l /tmp/error.log

3.18 -p 参数

格局:-p <num> remote server listening port

近程intercept 的监听端口,默认是36524。

举例:

tcpcopy  -x 12345-221.130.189.25:12345 -p 36525

注意事项:

在configure --enable-dr 或者新架构下,如果tcpcopy 在-s参数中仅仅设置了IP 地址,那么端口就采纳默认的-p参数值;如果-s参数设置了端口号,那么零碎将替换掉-p参数所设置的端口值。

3.19 -d 参数

设置tcpcopy以daemon(后盾)运行

举例:

tcpcopy  -x 12345-221.130.189.25:12345 -d

查看过程就能够发现

ps -ef | grep tcp

root     1452     1  1 16:29       00:00:00 tcpcopy -x 12345-221.130.189.25:12345 -d

适用范围

1、 通过nginx申请比对,发现登录失败,登陆后操作要害申请均为302重定向(前台)

2、 登录ticket存在时效,不适宜离线回放

3、 相比来看,离线版测试更加不便,对环境要求比拟低,但不适宜马上紧急测试,因为须要抓包文件的工夫,而在线版如果领有须要的环境,则能够马上进行测试。能够依据理论状况进行抉择。