0


这就是Tcpcopy

TCPCOPY
1、 TCPCOPY简介
1.1、 什么是Tcpcopy
Tcpcopy是一个分布式压力测试工具,可以将线上流量拷贝到测试机器,实时模拟线上环境,达到在程序不上线的情况下实时承担线上流量的效果,尽早发现bug增加上线信心。
1.2、 Tcpcopy的工作原理
TCPCopy是一种请求复制(复制基于 TCP 的 packets)工具 ,通过复制在线数据包,修改 TCP/IP 头部信息,发送给测试服务器,达到欺骗测试服务器的TCP 程序的目的,从而为欺骗上层应用打下坚实基础。
1.3、 Tcpcopy的功能
1)分布式压力测试工具,利用在线数据,可以测试系统能够承受的压力大小(远比ab压力测试工具真实地多),也可以提前发现一些bug
2)普通上线测试,可以发现新系统是否稳定,提前发现上线过程中会出现的诸多问题,让开发者有信心上线
3)对比试验,同样请求,针对不同或不同版本程序,可以做性能对比等试验
4)流量放大功能,可以利用多种手段构造无限在线压力,满足中小网站压力测试要求
5)利用TCPCopy转发传统压力测试工具发出的请求,可以增加网络延迟,使其压力测试更加真实
6)热备份
1.4、 Tcpcopy组成部分
1)TCPCopy Server(tcpcopy):部署在 测试服务器 ,用于接收复制的线上请求,github地址:https://github.com/session-replay-tools/tcpburn
2)TCPCopy Client(intercept):部署在 线上服务器 ,用于捕获线上请求,通过修改TCP/IP数据包,发送到TCPCopy Server进行稳定性测试,截获响应包,并传递响应包头信息给TCPCopy client,以完成TCP交互。
Github地址:https://github.com/session-replay-tools/intercept
1.5、 Tcpcopy工作过程
客户请求→线上服务器
→拷贝端口请求到TCP COPY,修改目的地址(测试服务器地址)和源地址
→测试服务器收到端口请求后,将按照修改后的源地址做路由转发给辅助服务器
→辅助服务器intercept,收到数据包,过滤相关信息
→发送请求状态给tcp copy,并关闭tcp
在这里插入图片描述

2、 TCPCOPY部署
2.1、 资源规划
主机名 ip地址 角色 内存 CPU 硬盘
线上服务器 172.26.73.127 Tcpcopy 4G 2核 40G
测试服务器 172.26.73.128 克隆生产环境 4G 2核 40G
辅助服务器 172.26.73.129 intercept 4G 2核 40G
2.2、 环境拓扑
所需所有软件包手动上传即可,无网环境亦可完成部署
系统版本:CentOS 7.4
Tcpcopy版本:1.0.0
intercept版本:1.0.0
2.3、 准备工作
2.3.1、 关闭防火墙和selinux
[root@SC ]# systemctl stop firewalld
[root@SC ~]# systemctl disable firewalld
[root@SC
]# setenforce 0
[root@SC~]# sed -i s/enforcing/disabled/g /etc/selinux/config
另外两台主机同上
2.3.2、 时间同步
[root@SC ~]# yum -y install ntpdate
[root@SC ~]# ntpdate ntp1.aliyun.com
7 Jul 23:17:26 ntpdate[6074]: adjust time server 120.25.115.20 offset -0.008534 sec
另外两台主机同上
2.4、 线上机器安装Tcpcopy
2.4.3、 有网环境直接下载
[root@SC ~]# wget https://github.com/session-replay-tools/tcpcopy/archive/1.0.0.tar.gz
2.4.4、 无网环境上传并解压
[root@SC ~]# tar -zxvf 1.0.0.tar.gz -C/usr/local/
[root@SC ~]# cd /usr/local/tcpcopy-1.0.0/
2.4.5、 预编译
[root@SC tcpcopy-1.0.0]# ./configure --prefix=/opt/tcpcopy/
如遇到gcc报错安装依赖:yum -y install gcc gcc-c++ autoconf automake make
2.4.6、 编译并安装
[root@SC tcpcopy-1.0.0]# make && make install
2.5、 辅助机器安装intercept
[root@FZ ~]# yum -y install libpcap-devel
centos8执行会报错Error: Unable to find a match: libpcap
解决方法:wget https://vault.centos.org/centos/8/PowerTools/x86_64/os/Packages/libpcap-devel-1.9.1-5.el8.x86_64.rpm
rpm -ivh libpcap-devel-1.9.1-5.el8.x86_64.rpm --force –nodeps
2.5.7、 有网环境直接下载
[root@FZ ~]# wget https://github.com/session-replay-tools/intercept/archive/1.0.0.tar.gz
[root@FZ ~]# tar -zxvf 1.0.0.tar.gz -C/usr/local/
[root@FZ ~]# cd /usr/local/intercept-1.0.0
2.5.8、 预编译
[root@FZ beta-ca intercept-1.0.0]# ./configure --prefix=/opt/tcpcopy/
如遇到gcc报错安装依赖:yum -y install gcc gcc-c++ autoconf automake make
2.5.9、 编译安装
[root@FZ beta-ca intercept-1.0.0]# make && make install
2.6、 部署
2.6.10、 线上主机测试主机开启http服务
为了简单期间,我们在线上和测试服务器上各启一个简单的http服务器,最简单的办法,不用apache和nginx,直接用python自带的模块。HTTP服务启动命令如下:
[root@SC Python-3.10.0]# python -m SimpleHTTPServer
[root@CS Python-3.10.0]# python -m SimpleHTTPServer
centos8执行:python3 -m http.server 8000
2.6.11、 辅助服务器开启intercep
(步骤不能错,没有intercep的话tcpcopy启动不起来)
[root@FZ ~]# /opt/tcpcopy/sbin/intercept -i eth0 -F ‘tcp and src port 8000’ -d
2.6.12、 线上服务器开启tcpcopy
[root@SC ~]# /opt/tcpcopy/sbin/tcpcopy -x 172.26.73.127:8000-172.26.73.128:8000 -s 172.26.73.129 -n 10 -d
注意:如果有防火墙,请再开启tcpcopy之前先加防火墙规则入下
-x, 是指本机8000端口的流量copy到192.168.88.66的8000端口
-s, 指定intercept机器的地址,tcpcopy要和intercept建立连接
-c 伪装地址,在把流量复制到测试服务器的时候,修改数据包的源地址为192.168.100.100,这样方便指定路由。也可以写成192.168.100.x,这样源地址就是指定网段中的地址了。
-n 流量放大倍数,如果不是压测目的就不用指定这个参数。
-d 以守护模式运行。
2.6.13、 测试服务器上开启路由
(切记辅助服务器要和测试服务器在一个子网里):
[root@CS ~]# route add -host 172.26.73.127 gw 172.26.73.129
3、 测试效果
3.1.1、 在另外一台机器上,向线上服务器发起请求,然后查看两个HTTP服务器的实时日志:
在这里插入图片描述

3.1.2、 线上服务器返回结果:
在这里插入图片描述

3.1.3、 测试服务器返回结果:
在这里插入图片描述

标签: 网络 测试工具

本文转载自: https://blog.csdn.net/awerft/article/details/125782493
版权归原作者 Ealien魚 所有, 如有侵权,请联系我们删除。

“这就是Tcpcopy”的评论:

还没有评论