我正在做我的个人项目,关于使用Docker容器的Haproxy的"性能评估"。我正在用Python编程,并使用iperf进行流量生成。
我创建了几个Docker容器作为客户端和服务器。客户端应该通过Haproxy容器向服务器发送udp流量,Haproxy容器充当负载均衡器。
问题是当我尝试从客户端发送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
当我读到它时,这个问题更多的是关于UDP负载平衡而不是Docker。如果我读错了问题,请随时纠正我。
你可能不喜欢这个答案,但这里是。HAProxy不支持UDP。官方主页将HAProxy明确描述为TCP和HTTP代理(通过暗示,这意味着"无UDP")。关于UDP负载平衡的话题,ServerFault上也有这个问题,它也讨论并快速驳回了HAProxy。
既然我不喜欢"那是不可能的,处理它"作为我自己的答案,让我们看看其他的选择。
-
一些资源询问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
-
在谷歌上快速搜索一下,就会发现Pen等其他开源解决方案。或许也值得一看?
-
确定不能用TCP代替?;)
截至2016年3月,这个问题的最佳解决方案是Nginx>=1.9.13:
https://www.nginx.com/blog/announcing-udp-load-balancing/您可以为UDP上行配置HA和健康检查,就像您将后端TCP反向代理一样。对于我的项目,我们实现了一个解决方案,使用Nginx基础容器的自定义容器(可能与OP的docker用例相关),可以在这里找到:
https://hub.docker.com/_/nginx/