我需要从一台机器(端口)和两台不同的机器(端口)发送(重复)流量。我也需要处理TCP会话。
在开始我使用em-proxy,但在我看来,开销是相当大的(它超过CPU的50%)。然后我安装了haproxy,我设法重定向流量(不重复)。开销合理(低于5%)。
问题是我无法在haproxy配置文件中说出以下内容: - 监听特定地址:端口以及您在两台不同机器上发现的任何内容:端口并丢弃其中一个端口的答案。
用于此的Em代理代码非常简单,但在我看来,EventMachine会产生大量开销。
在我挖掘haproxy代码并尝试更改(重复流量)之前,我想知道那里有类似的东西吗?
谢谢。
我已经为此目的创建了一个代理。
https://github.com/chrislusf/teeproxy
用法
./teeProxy -l :8888 -a localhost:9000 -b localhost:9001
tee-proxy是一个反向代理。对于每个传入请求,它将请求克隆为2,然后将它们转发到2个服务器。服务器a
的结果照常返回,但服务器b
的结果将被忽略。
tee-proxy处理GET
,POST
和其他HTTP方法。
iptables实验ROUTE target
怎么样?它有一个用于镜像流量的“tee”选项:
http://www.netfilter.org/projects/patch-o-matic/pom-external.html#pom-external-ROUTE
哪个可以让您通过以下方式镜像流量:
iptables -A PREROUTING -t mangle -p tcp --dport 80 -j ROUTE --gw 1.2.3.4 --tee iptables -A POSTROUTING -t mangle -p tcp --sport 80 -j ROUTE --gw 1.2.3.4 --tee
第二台机器需要在同一个子网上,并且需要监听目标IP地址(而不是回复arps)或者混杂地监听。
试试https://github.com/agnoster/duplicator。
我尝试了teeproxy但是除了GET以外的一些请求得到了奇怪的结果。
我还编写了一个反向代理/负载均衡器,用于与Node.js类似的目的(它只是为了好玩,而不是生产就绪)。
https://github.com/losnir/ampel
它非常自以为是,目前支持:
GET
使用循环选择(1:1)POST
使用请求拆分。没有“主”和“影子”的概念 - 响应的第一个后端是将为客户端请求提供服务的后端,然后所有其他响应将被丢弃。如果有人发现它有用,那么我可以改进它以使其更灵活。
我需要一些能够实现TCP流量的东西,但不是侵入性的,因此无法将某些东西放在中间作为反向代理。
我所做的基本上是使用tcpdump / wireshark逻辑(数据包嗅探)将它包装在Go进程中,你可以配置它做一些事情。
对于谁可能有用,代码可以在这里找到:https://github.com/RobinUS2/teecp