27

我需要从一台机器(端口)和两台不同的机器(端口)发送(重复)流量。我还需要处理 TCP 会话。

在开始时我使用了em-proxy,但在我看来开销相当大(它超过了 CPU 的 50%)。然后我安装了haproxy并设法重定向流量(不重复)。开销是合理的(小于 5%)。

问题是我不能在 haproxy 配置文件中说以下内容:
- 监听特定地址:端口以及您在两台不同机器上发送的任何内容:端口并丢弃其中一台的答案。

用于此的 Em-proxy 代码非常简单,但在我看来 EventMachine 会产生很多开销。

在我挖掘 haproxy 代码并尝试更改(重复流量)之前,我想知道那里有类似的东西吗?

谢谢。

4

5 回答 5

28

我为此目的创建了一个代理。

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 方法。

于 2013-09-25T18:50:08.120 回答
10

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),要么混杂地监听。

于 2011-08-31T14:03:57.833 回答
3

试试https://github.com/agnoster/duplicator

我尝试了teeproxy,但在 GET 之外的一些请求中得到了奇怪的结果。

于 2015-05-08T09:17:02.890 回答
0

我还为与 Node.js 类似的目的编写了一个反向代理/负载均衡器(它只是为了好玩,目前还没有准备好生产)。

https://github.com/losnir/ampel

很有主见,目前支持:

  • GET使用循环选择 (1:1)
  • POST使用请求拆分。没有“master”和“shadow”的概念——第一个响应的后端是为客户端请求提供服务的后端,然后所有其他响应都将被丢弃。

如果有人觉得它有用,那么我可以改进它以使其更加灵活。

于 2018-07-23T10:02:18.730 回答
0

我需要一些可以处理 TCP 流量的东西,但又不具有侵入性,因此不能在中间放置一些东西作为反向代理。

我所做的基本上是使用 tcpdump/wireshark 逻辑(数据包嗅探)将它包装在一个 Go 进程中,您可以配置它来做一些事情。

代码可以在这里找到:https ://github.com/RobinUS2/teecp

于 2019-02-15T13:48:33.483 回答