我正在使用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);
答案 0 :(得分:7)
正如我所读到的,这个问题更多的是关于UDP负载平衡而不是Docker。如果我误解了这个问题,请随时纠正我。
你可能不会喜欢这个答案,但是这里有。 HAProxy不支持UDP 。 official homepage明确地将HAProxy描述为 TCP和HTTP 代理(暗示,这意味着“无UDP”)。关于UDP负载平衡的主题也有this question on ServerFault,它还讨论并快速驳回HAProxy。
由于我不喜欢“那是不可能的,因此不能处理它”作为答案,我们来看看替代方案。
一些询问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
Google快速搜索可以提供其他开源解决方案,例如short example on the Wikipedia page。可能还值得一看?
当然你不能使用TCP代替? ;)
答案 1 :(得分:1)
截至2016年3月,此问题的最佳解决方案是Nginx> = 1.9.13:
https://www.nginx.com/blog/announcing-udp-load-balancing/
您可以像配置后端TCP反向代理一样为UDP上游配置HA和运行状况检查。对于我的项目,我们使用基本Nginx容器中的自定义容器(可能与OP的docker用例相关)实现了一个解决方案,可在此处找到: