在线系统介绍:
假设我们有在线机器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上面的各种业务:
相关推荐
智能客服体系架构和应用案例,精品一级
52页华为企业数据架构、应用架构及技术架构设计方法.pptx
OpenNebula架构及应用案例分析OpenNebula架构及应用案例分析
应用架构入门与实例,应用架构入门与实例应用架构入门与实例
mvc三层架构应用案例简单代码 详见其中brand-demo 技术:mybatis+maven+mysql+JSP+HTML+servlet+JS
TCP,UDP网络编程实例。。。。。。。。。。。。。。
软考论文案例-论微服务架构及其应用
一个socket的网络应用实例,能实现两个客户端之间的通讯!适合于嵌入式的应用
MATLAB优化算法实战应用案例-MATLAB工程应用实例
本书以Web Services技术系列为主线,逐一详细分析解释包括Web Services的各种核心技术,在分析阐述的同时,使用了大量的应用设计案例和基于Microsoft.NET的开发实例,以使读者能够更形象地理解这些技术与技术的设计...
六层架构 三层架构 C# 抽象工厂应用 实例 北大青鸟高老师 沈阳森淼
在不同的架构设计方法中出现的软件架构视图种类很多,本文介绍最常用的两种架构视图——逻辑架构视图和物理架构视图,并通过具体案例的分析说明如何运用它们进行架构设计。当观察和描述事物大局的时候,逻辑架构和...
1、 金融、学校、钢铁、能源等多行业应用架构设计实践案例介绍; 2、 应用架构设计案例实操。 案例练习: 1、大型企业数据架构设计案例赏鉴 2、企业交互数据表收集、数据建模案例练习 案例练习: 1、 各行业大型...
本实例实现了一个基于复杂三层架构的CSharpStudy网,利于初学者理解复杂三层架构。
PyFlink 架构、应用案例及未来规划
2018年区块链总体发展形式、应用情况、存在机会、投资机会,以及常见的骗局、发币、追溯等应用案例,属于比较粗略宏观的学习资料。
企业架构设计(业务架构、数据架构、应用架构、技术架构)方法及实例.pptx
交通行业架构设计(业务架构、数据架构、应用架构、技术架构)方法及实例.pptx
ARM嵌入式应用程序架构设计实例精讲--基于LPC1700 配套资料.rar
VDI虚拟桌面架构及其应用-整合版本 远程虚拟桌面技术 VDI虚拟桌面架构:1虚拟机技术2远程桌面显示协议3虚拟集群管理 VDI 部署实例 VDI 发展趋势