【发布时间】: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