工具调试:
线上服务器,启动 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、相比来看,离线版测试更加不便,对环境要求比拟低,但不适宜马上紧急测试,因为须要抓包文件的工夫,而在线版如果领有须要的环境,则能够马上进行测试。能够依据理论状况进行抉择。