4

我正在使用 Docker Container 对 Haproxy 进行“性能评估”的个人项目。我正在使用 Python 编程并使用 iperf 进行流量生成。

我创建了几个 Docker 容器作为客户端和服务器。客户端应该通过充当负载均衡器的 Haproxy 容器向服务器发送 udp 流量。

问题是当我尝试将 udp 流量从客户端发送到服务器时,Haproxy 拒绝连接。我在官方文档中没有找到如何绑定或监听 UDP 端口。

预先感谢您的回复。

这是我的 haproxy.cfg 的副本。

global quiet nbproc 4 daemon listen tcp_haproxy 172.17.4.230:5001 balance roundrobin server server0 172.17.4.227:5001 server server1 172.17.4.228:5001 server server2 172.17.4.229:5001

4

2 回答 2

9

当我读到它时,这个问题更多的是关于 UDP 负载平衡而不是 Docker。如果我误读了这个问题,请随时纠正我。

你可能不会喜欢这个答案,但这里有。HAProxy 不支持 UDP官方主页明确将HAProxy 描述为TCP 和 HTTP代理(暗示,这意味着“没有 UDP”)。ServerFault上也有这个关于 UDP 负载均衡话题的问题,里面也讨论并快速驳回了 HAProxy。

由于我自己不喜欢“那不可能,处理它”作为答案,让我们看看替代方案。

  1. 一些询问 UDP 负载平衡的资源最终推荐IPVS作为负载平衡器。它是 Linux 内核的一部分,如果您正在寻找基于 Docker 的东西,这将使其成为一个糟糕的解决方案。如果这对您来说不是一个交易破坏者,维基百科页面上有一个简短的示例,可以使用三个 UDP 服务器根据您的场景进行调整:

    ipvsadm -A -u 172.17.4.230:5001 -s rr
    ipvsadm -a -u 172.17.4.230:5001 -r 172.17.4.227:5001 -m
    ipvsadm -a -u 172.17.4.230:5001 -r 172.17.4.228:5001 -m
    ipvsadm -a -u 172.17.4.230:5001 -r 172.17.4.229:5001 -m
    
  2. 一个快速的谷歌搜索会出现像Pen这样的替代开源解决方案。可能也值得一看?

  3. 确定不能改用 TCP 吗?;)

于 2015-07-06T21:52:22.140 回答
1

截至 2016 年 3 月,该问题的最佳解决方案目前是 Nginx >=1.9.13:

https://www.nginx.com/blog/announcing-udp-load-balancing/

您可以像配置后端 TCP 反向代理一样为 UDP 上游配置 HA 和健康检查。对于我的项目,我们使用来自基本 Nginx 容器的自定义容器(可能与 OP 的 docker 用例相关)实现了一个解决方案,可以在此处找到:

https://hub.docker.com/_/nginx/

于 2016-04-29T20:42:05.233 回答