在线系统介绍:
假设我们有在线机器A,在线机器B,在线机器C三台服务器,其中在线机器A,上面运行nginx(80端口)的业务系统,供最终用户访问,同时nginx还会内网访问在线机器B上面的adserver(端口11311)业务,在线机器C运行着伪在线业务msyql(利用sysbench模拟的)
测试系统:
我们有测试服务器a,b。
其中a上面运行如下几个系统:
1)nginx业务系统(端口为18080)
2)adserver业务(进程为asyn_server,端口为11811)
3)mysql(3306端口)
这里nginx会访问asyn_server进程,mysql是独立的应用。
目的:
我们需要把在线系统的nginx应用和asyn_server应用导入到测试机器a中,同时还要复制在线机器C中的mysql请求到测试机器a中去。
如何在测试机器a中设置路由:
对于测试机器b,则是运行intercept的地方,用来捕获测试机器a中的mysql的响应,nginx的响应和asyn_server的部分响应(因为测试机器a中的nginx也会访问asyn_server,这部分响应不应该路由到测试机器b)。
因此测试机器a上面的应用有外网应用(nginx)和内网应用(asyn_server和mysql应用),该如何设置路由呢?(这里路由设置是关键)
1)设置nginx的响应路由:
测试机器a中的nginx走外网网卡,我们设置如下:
route del default gw 原先的网关ip地址
route add default gw 机器b的外网ip地址
这样设置后,如果外网响应最终没有匹配路由的话,就会走默认网关,也即流向到测试机器b中去(注意:来自同一网段的请求,如果采用外网地址访问,其响应不会走默认路由)。
这样nginx的响应路由就设置好了。
2)设置asyn_server的响应路由:
由于在线的asyn_server是被nginx访问的,我们假设只有在线机器A上面的nginx来访问,而且是采用内网地址(非localhost)来访问asyn_server的。
我们设置路由如下:
route add -host 在线机器A的内网ip地址 gw 测试机器b的内网ip地址
这样复制的asyn_server的请求到了测试机器a后,其响应就会流向到测试机器b中去,但测试机器a中的nginx访问asyn_server的请求,会返回给nginx。
3)设置mysql的响应路由:
由于我们测试机器a上面的mysql,会DNS查询外网,所以必须找出访问的ip地址,我们假设要访问的外网ip地址为机器D的ip外网地址,需要开通这个ip地址的权限:
route add -host 机器D的ip外网地址 gw 原先的网关ip地址
这样设置好了以后,mysql请求复制在我这儿才能顺序进行
mysql请求本身访问采用了内网方式,而mysql的请求客户端ip地址为在线机器C,那么设置路由如下:
route add -host 在线机器C的内网ip地址 gw 测试机器b的内网ip地址
运行:
测试机器a的路由设置好以后,启动nginx应用,asyn_server和mysql应用,就等请求复制过来了。
我们在测试机器b中启动多个intercept实例,分别捕获nginx的响应,asyn_server的响应和mysql的响应
捕获mysql响应( ./configure --enable-advanced --enable-pcap --enable-combined --enable-mysql)
sudo ./intercept -F 'tcp and src port 3306' -p 36525 -i eth0 -d
捕获nginx响应 (./configure --enable-advanced --enable-pcap --enable-combined)
sudo ./intercept -F 'tcp and src port 18080' -p 36526 -i eth1 -d
捕获asyn_server响应(./configure --enable-advanced --enable-pcap --enable-combined)
sudo ./intercept -F 'tcp and src port 11811' -i eth0 -d
当然intercept也可以只运行一个实例(-F参数设置过滤好响应包的捕获条件),没有必要一个应用一个intercept实例
我们在在线机器A复制nginx请求(./configure --enable-advanced --enable-pcap --enable-combined):
sudo ./tcpcopy -x 80-测试机器a的外网ip地址:18080 -p 36526 -s 测试机器b的内网ip地址 -i eth0 -d
由于在线nginx前面有lvs,这里请求走的内网网卡
我们在线机器B复制asyn_server的请求(./configure --enable-advanced --enable-pcap --enable-combined):
sudo ./tcpcopy -x 11311-测试机器a的内网ip地址:11811 -s 测试机器b的内网ip地址 -i eth0 -d
从eth0捕获内网请求
我们在在线机器C中复制mysql请求(./configure --enable-advanced --enable-pcap --enable-combined --enable-mysql):
sudo ./tcpcopy -x 3306-测试机器a的内网ip地址:3306 -u root@密码 -s 测试机器b的内网ip地址 -p 36525 -i lo -d
从lo捕获mysql请求
效果演示
复制以后,我们截图如下:
在线机器A,复制nginx请求,运行tcpcopy
在线机器B,复制asyn_server请求
在线机器C,复制mysql请求
测试机器b上面的intercept
测试机器a上面的各种业务:
相关推荐
【系统测试与质量保障经验沉淀】TCPCopy在架构测试中的应用 系统测试是软件开发过程中至关重要的一环,它确保产品的稳定性和可靠性。质量保障则是系统测试的核心目标,旨在通过一系列测试方法和技术来保证软件质量...
在IT行业中,构建一个高性能、高并发的TCP服务器是许多应用程序的基础,特别是在网络服务、游戏服务器、实时数据...通过`http`和`proxy`等实例,我们可以学习如何在实际项目中应用这些知识,实现复杂而高效的网络服务。
在电子书《ZeroMQ 云时代极速消息通信库》中,不仅包含了ZeroMQ的基础知识,还可能涉及到了其在分布式系统中的应用案例和高级使用技巧。 1. ZeroMQ简介 ZeroMQ(通常缩写为0MQ,也被称作ØMQ)是一个开源的网络库,...
总的来说,《深入浅出Netty_netty5.0_》这本书将带领读者深入理解Netty 5.0的各个方面,包括它的设计理念、核心组件、高级特性以及实际应用案例。通过学习,读者不仅可以掌握Netty的使用技巧,还能对网络编程有更...
标题与描述均聚焦于“db2的安装过程”,这一知识点主要涵盖了DB2 Enterprise Server Edition的安装...这一过程体现了IT项目实施的专业性和复杂性,对于系统架构师、数据库管理员和IT运维人员来说,都是至关重要的技能。
- **实战案例**:提供实际的项目示例,演示如何使用Netty构建服务器和客户端应用。 - **故障排查和监控**:学习如何在生产环境中监控和调试Netty应用,确保系统的稳定运行。 通过阅读《Netty权威指南 第2版》,...
《Netty实战代码-2019-Netty-Action-Mayday-2019》是针对Netty框架的一份实战教程,包含了2019年Netty开发的实例代码。Netty是一个高性能、异步事件驱动的网络应用程序框架,主要用于快速开发可维护的高性能协议...
在IT行业中,网络通信是不可或缺的一部分,而Socket作为网络编程的基础接口,被广泛应用于各种分布式系统、客户端-服务器架构的应用程序中。本文将深入探讨如何使用Socket进行同步和异步通信,以C#语言为例,结合`...
综上所述,OpenDDS作为一个强大的实时数据分发平台,不仅提供了丰富的功能特性,还支持高度的可配置性和灵活性,能够满足各种复杂应用场景的需求。无论是对于实时系统的开发还是研究,OpenDDS都是一个值得深入探索的...
- **包**:使用`strings`和`strconv`包进行更复杂的字符串处理。 **4.11 时间和日期** - 使用`time`包进行处理。 **4.12 指针** - 用于存储变量的地址。 #### 五、控制结构 **5.1 if-else结构** - 条件判断语句...
struct soap *soap_copy(struct soap *soap) 定义一个环境变量并从已有的环境变量中拷贝环境信息 环境变量定义好后就可以重复使用而不必再次初始化了。只有当线程独占访问时,我们才需要一个新的环境变量。例如...
- **网结构**: 可以表示更复杂的网络关系,但不易于查询和维护。 - **线性表**: 适用于简单的一维数据存储。 - **二维表**: 关系数据库中最基本的数据组织形式。 **例题**: 在关系数据库中,用来表示实体之间...
答:函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化 必须由程序员在程序中显式地指定。 16一般数据库若出现日志满了,会出现什么情况,是否还能使用? 答:只能执行查询等读操作,不能...
MVC(Model-View-Controller)模式是一种软件架构模式,将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。 **5. PIMPL** PIMPL(Pointer to IMPLementation)是一种编程技巧,...