使用Iperf进行haprxy的udp流量

时间:2015-07-06 21:17:01

标签: python docker haproxy iperf

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

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

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

提前感谢您的回复。

这是我的haproxy.cfg的副本。

var pre = document.getElementById('out'); function log(str) { pre.textContent += str + '\n'; } function argCheck(arg) { return arg !== null && arg !== ''; } function test() { if (Array.prototype.every.call(arguments, argCheck)) { log('ok'); } else { log('not ok'); } } test(); test(0); test(''); test(undefined); test(null); test(1, 2, 3, 4, 5, 6); test(1, 2, 3, '', 5, 6); test(1, 2, 3, null, 5, 6);

2 个答案:

答案 0 :(得分:7)

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

你可能不会喜欢这个答案,但是这里有。 HAProxy不支持UDP official homepage明确地将HAProxy描述为 TCP和HTTP 代理(暗示,这意味着“无UDP”)。关于UDP负载平衡的主题也有this question on ServerFault,它还讨论并快速驳回HAProxy。

由于我不喜欢“那是不可能的,因此不能处理它”作为答案,我们来看看替代方案。

  1. 一些询问UDP负载平衡的资源最终会推荐IPVS作为负载均衡器。它是Linux内核的一部分,如果你正在寻找基于Docker的东西,这将成为一个糟糕的解决方案。如果这不是您的交易破坏者,可以使用三个UDP服务器调整到您的方案{/ 3}}:

    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. Google快速搜索可以提供其他开源解决方案,例如short example on the Wikipedia page。可能还值得一看?

  3. 当然你不能使用TCP代替? ;)

答案 1 :(得分: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/