HAProxy 如何转发流量

How HAProxy forward traffic

我在服务器上安装了 HAProxy,我希望 Haproxy 将所有来自端口 9092 的流量分发到服务器 worker0 和服务器 worker1。

配置如下:

frontend sample-traffic
        bind *:9092
        default_backend sample-traffic
        mode tcp
        option tcplog

backend sample-traffic
        balance source
        mode tcp
        server worker0 10.16.38.210:9092 check
        server worker1 10.16.38.211:9092 check
$ netstat -nap | grep 9092
tcp        0      0 0.0.0.0:9092             0.0.0.0:*               LISTEN      8114/haproxy     
$ ps aux | grep 8114
haproxy   8114  0.7  2.9 102784 55848 ?        Ss   Jan11  94:44 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds

好的,haproxy是运行嗯,监听9092端口

这里HAproxy作为一个负载均衡器,只是转发tcp流量。我的问题是,

(1) 我的 tcp 连接是否在 HAproxy 中终止,然后 HAProxy 将我的流量重新转发到我的目标服务器?

之所以问这个问题,是因为看到有个进程在监听9092端口,HAProxy需要接收流量,HAProxy需要终止tcp接收。

然后,HAProxy 的另一端将建立另一个到我的目标服务器的 tcp 连接,并用它来转发流量,所以我认为我的 TCP 连接应该在 HAProxy 中终止。


                       
    +-+----+--+              +-----------------------------+            +-----------------+
    |         | tcp1         |          HAProxy            |   tcp2     |                 |
    | Clients +--------------> receiver        sender----------------->+ App Server       |
    |         |              |                             |            |                 |
    +---------+              +-----------------------------             +-----------------+

但是如果是上面的话,就会有两个tcp socket连接,感觉效率会很低

所以我需要HAProxy专家帮我理解HAProxy内部是如何处理这个场景的,HAProxy内部是一个tcp socket连接还是两个socket连接?

Is my tcp connection terminated in HAproxy and then HAProxy re-forward my traffic to my destination server?

不,这不是 HAProxy 或其他代理的工作方式,连接将通过 HAProxy,并且仅当客户端或服务器出于某种原因终止连接时才会终止。

在您的示例中,您有一个 frontend 监听端口 9092,这个 frontend 在不同的机器上有两个 backend 服务器,也使用相同的端口。

当您的 HAProxy 服务器在端口 9092 接收到流量时,它会与客户端建立一个 TCP 连接,并且还会与您的后端服务器之一建立另一个 TCP 连接以传递流量,因此您将有两个 tcp 连接,一个与 frontend 端的客户端连接,另一个与 backend 端的服务器连接。它就像你画的一样。