文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

基于TCPCopy的仿真压测方案

2023-01-31 08:23

关注

tcpcopy 是一个分布式在线压力测试工具,可以将线上流量拷贝到测试机器,实时的模拟线上环境,达到在程序不上线的情况下实时承担线上流量的效果,尽早发现 bug,增加上线信心。

 

tcpcopy 的优势在于其实时性及真实性,除了少量的丢包,完全拷贝线上流量到测试机器,真实的模拟线上流量的变化规律。

 

1.png

 

 

TCPCopy 分为三个角色:

 

 

数据传输流程图

 1.png

 

简单解释一下工作原理:

 

  1. TCPcopy 从数据链路层 copy 端口请求,然后更改目的 ip 和目的端口。

  2. 将修改过的数据包传送给数据链路层,并且保持 tcp 连接请求。

  3. 通过数据链路层从 online server 发送到 test server。

  4. 在数据链路层解封装后到达 nginx 响应的服务端口。

  5. 等用户请求的数据返回结果后,回包走数据链路层。

  6. 通过数据链路层将返回的结果从 test server 发送到 assistant server。注:test server 只有一条默认路由指向 assistant server。

  7. 数据到达 assistant server 后被 intercept 进程截获。

  8. 过滤相关信息将请求状态发送给 online server 的 tcpcopy,关闭 tcp 连接。

 

Online Server 上的发包:


OS 默认使用 raw socket output 接口发包,此时发包命令如下:

tcpcopy -x 应用端口-Test Server:Test Server应用端口 -s Assistant Server

 

例如:

tcpcopy -x 80-192.168.0.246:80 -s 192.168.0.247 -d

 

此外,新架构还支持通过 pcap_inject(编译时候增加--enable-dlinject)来发包。

 

Test Server 上的响应包路由:

需要在 Test Server 上添加静态路由,确保被测试应用程序的响应包路由到辅助测试服务器,而不是回包给 Online Server。

route add -net 服务器所在网段 gw Assistant Server

 

例如:

route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.0.247

 

Assistant Server 上的捕获响应包:

辅助服务器要确保没有开启路由模式 cat /proc/sys/net/ipv4/ip_forward,为0表示没有开启。
辅助服务器上的 intercept 进程通过 pcap 抓取测试机应用程序的响应包,将头部抽取后发送给 Online Server 上的 tcpcopy 进程,从而完成一次请求的复制。

intercept -i 网卡名 -F 'tcp and src port 应用端口' -d

 

 例如:

intercept -i ens160 -F 'tcp and src port 80' -d

 

-i 参数,还可以为any,表示所有网卡

 

环境说明

角色ip端口
Assistant Server 192.168.0.247
Online Server192.168.0.24580
Test Server192.168.0.24680

 

 

 

 

 

拓扑图


1.png

 

运行流程

 

intercept安装

Assistant Server 上的操作:


下载并安装 intercept 服务端;

# 安装编译环境
apt-get install -y build-essential
 
# 安装pcap依赖包
apt-get install -y libpcap-dev
 
# 下载软件包
# github地址: http://github.com/session-replay-tools/intercept
wget https://github.com/session-replay-tools/intercept/archive/1.0.0.tar.gz -o intercept-1.0.0.tar.gz
tar zxvf intercept-1.0.0.tar.gz -C /usr/src
cd /usr/src/intercept-1.0.0
./configure --prefix=/usr/local/intercept-1.0.0
make && make install
 
# 创建软连接
ln -s /usr/local/intercept-1.0.0/sbin/intercept /usr/bin/intercept
 
# 启动程序
intercept -i ens160 -F 'tcp and src port 80' -d


注意:必须先安装 intercept,否则会导致 tcpcopy 启动时,找不到 intercept

 

tcpcopy安装

Online Server 上的操作:

 

下载并安装 tcpcopy 客户端

# 安装编译环境
apt-get install -y build-essential
 
# 下载软件包
# github地址: http://github.com/session-replay-tools/tcpcopy
wget https://github.com/session-replay-tools/tcpcopy/archive/v1.1.0.tar.gz -o tcpcopy-1.1.0.tar.gz
tar zxvf tcpcopy-1.1.0.tar.gz -C /usr/src
cd /usr/src/tcpcopy-1.1.0
./configure --sbin-path=/usr/local/sbin
make && make install
 
# 创建软连接
ln -s /usr/local/tcpcopy-1.1.0/sbin/tcpcopy /usr/bin/tcpcopy
 
 
# 启动程序
tcpcopy -x 80-192.168.0.246:80 -s 192.168.0.247 -d


注意:192.168.0.246 是  Test Server IP地址,192.168.0.247 是 Assistant Server IP地址

 

Test Server 添加路由

Test Server 上的操作:


添加静态路由:

route add -net 192.168.0.0/24 gw 192.168.0.247

 

注意:192.168.2.0/24 是不存在的网络,是一条专门的路由,用于将数据包转发到Assistant Server 

192.168.0.247 是 Assistant Server IP地址

 

测试效果

Online Server 和 Test Server 已经安装了nginx,如果没有,请使用以下命令安装:

apt-get install -y nginx

 

在客户端浏览器,打开 Online Server 的页面

http://192.168.0.245/

1.png

 

登录到 Online Server ,查看访问日志

tail -f /var/log/nginx/access.log
 
# 日志输出:
192.168.0.136 - - [27/Apr/2019:12:35:56 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"


登录到 Test Server ,查看访问日志

tail -f /var/log/nginx/access.log
 
 
# 日志输出:
192.168.2.254 - - [27/Apr/2019:12:35:56 +0800] "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"

 

虽然访问的是  Online Server  ,但是 Test Server  能收到客户端的访问请求。说明 intercept 转发正常

 

本文参考链接:

https://www.cnblogs.com/zhengyun_ustc/p/tcpcopy.html

https://juejin.im/entry/5ac1922d6fb9a028bc2de3fb


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯