您的位置:首页 > 理论基础 > 计算机网络

如何利用tcpcopy来试验nginx hmux模块(以下所涉及到的tcpcopy,均是采用的是0.5以下的版本)

2011-09-26 14:07 309 查看
场景是这样的:

公司原来是利用nginx-->apache-->resin(hmux 6800)来做的。

现在已经书写了nginx hmux模块,完全可以这样nginx--->resin(hmux 6800),把系统架构简化了。

那么是不是直接替换呢,这样做有很大的风险,万一上线全面崩溃,怎么办,公司损失不说,个人在公司的职业生涯也结束了。

怎么办,怎么办?

有人说,我们逐步逐步上线,但这样也会有风险,压力大和压力小的时候是不一样的,而且这样的周期过长,等不及。

幸好有tcpcopy,请求复制工具,一个极具实用的工具(也是我们开发的)。

我们复制客户端过来的请求,也就是nginx处理的请求,复制一份到我们的测试机器上去,既不怎么影响在线,又能达到上线测试的目的。

我们在linux测试机器上部署上tcpcopy中的server,是这样部署的:

        modprobe ip_queue (如果这个内核模块没有启动的话,要启动这个,不过内核版本要支持这个)

        设置iptables

        iptables -I OUTPUT -p tcp --sport 8022  -j QUEUE

        为啥要设置这个呢,为的就是截获测试机器的响应的,否则直接返回客户端是肯定不行的。

       ./interception 以root用户权限运行此程序

      当然在测试服务器部署上我们的nginx hmux模块,等待请求的到来。

      测试机器部署完毕

我们需要复制请求,在在线服务器怎么做呢?

      很简单,只需要运行我们的程序

      ./tcpcopy 61.135.250.217 80 61.135.250.208 8022

      这里测试机器ip为61.135.250.208,在线服务器为61.135.250.217

     由于客户端过来的请求packets,目的地址就是61.135.250.217,目的端口80,我们需要改变复制包的目的地址和目的端口,改成测试服务器的ip地址和端口号,这样才能 访问测试服务器,那访问测试服务器后的response怎么办,那就是由测试服务器上的interception来截获了,不会直接返回给客户端。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息