【问题标题】:How HAProxy forward trafficHAProxy 如何转发流量
【发布时间】:2021-04-25 08:24:49
【问题描述】:

我在我的服务器中安装了一个 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连接?

【问题讨论】:

    标签: haproxy


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 也就是说,上图是正确的,它有两个连接。我的理解正确吗?
    • 是的,一个连接由客户端启动到 HAProxy 中的前端端口,另一个连接由 HAProxy 服务器启动到后端,这基本上是代理的工作方式,它们是连接的中介。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 2020-08-21
    • 1970-01-01
    • 2013-11-15
    • 2015-07-22
    • 2016-12-25
    相关资源
    最近更新 更多