haproxy-在TCP模式下传递原始/远程IP


8

我已经设置了带有keepalived的haproxy,以实现percona群集的负载平衡和ip故障转移,并且由于它工作得很好,我想对另一个服务/守护程序使用相同的lb /故障转移。

我已经通过以下方式配置了haproxy:

listen my_service 0.0.0.0:4567
    mode tcp
    balance leastconn
    option tcpka
    contimeout      500000
    clitimeout      500000
    srvtimeout      500000

    server host1 xxx.xxx.xxx.xx1:4567 check port 4567 inter 5000 rise 3 fall 3
    server host2 xxx.xxx.xxx.xx2:4567 check port 4567 inter 5000 rise 3 fall 3

负载平衡工作正常,但是服务看到的是负载平衡器的IP,而不是客户端的实际IP。在http模式下,让haproxy传递到远程IP是很容易的,但是在tcp模式下该如何做呢?由于需要负载均衡的服务的性质,这一点至关重要。

谢谢!维托


这里是HAProxy的1.6.6的完整文档cbonte.github.io/haproxy-dconv/...

Answers:


3

仅供以后参考,keepalived是一种故障转移而不是负载平衡的解决方案(也许您是指LVS?)。HAProxy的透明代理模式与发送原始IP的任何特殊方式无关,这将是正常的非透明HTTP模式,在该模式下您可以为此使用标准化的HTTP标头。

在我看来,正确回答原始问题是:您可以在启用TPROXY的Linux内核上的HAProxy中编译透明代理支持。加上适当的TPROXY支持版本和同一台机器上iptables的配置,可以实现真正的完全透明的tcp代理支持。这意味着后端服务器不需要任何特殊配置。

请注意,实际上这不是建议的HAProxy设置,仅在绝对需要时才应使用。


2

显然,有种我从未看过的haproxy的“透明”模式,或者您想尝试的与之无关的模式。否则,您将需要教导后端服务有关haproxy发送原始IP(“ PROXY blahblah”)的特殊方式的任何知识,并让该服务从中获取原始IP。

但是,为什么还要烦恼haproxy?您已经准备就绪,并且可以进行适当的透明负载平衡。


嗨,非常感谢您的回复:)我正在阅读有关“ tproxy”支持的内容,我想这是您的意思吗?另外,我没有为此考虑过使用keepalived进行负载平衡。keepalived是否可以通过客户端的原始IP?
维托·博塔

是的,keepalived保持原始IP不变,因为它是负载平衡器,而不是代理。
womble

2

send-proxy在您的配置中使用(每服务器),即使在TCP模式下,也将在接收服务器端为您提供原始的source-ip。这需要HAProxy 1.5+。

您可以在HAProxy文档中找到有关代理协议的更多信息。

listen my_service 0.0.0.0:4567
mode tcp
balance leastconn
option tcpka
contimeout      500000
clitimeout      500000
srvtimeout      500000

server host1 xxx.xxx.xxx.xx1:4567 send-proxy check port 4567 inter 5000 rise 3 fall 3
server host2 xxx.xxx.xxx.xx2:4567 send-proxy check port 4567 inter 5000 rise 3 fall 3

嗨,尼尔斯,谢谢您的解决方案,但是当我输入send-proxy时,它会导致db down(haproxy无法检测到主机)
neobie 2015年

我和DB也发生了同样的事情。有什么办法吗?
Peeyush


-4

这种配置对我有用。可以在$ _SERVER ['HTTP_X_FORWARDED_FOR']中检索源IP:

全球
        [.....平常的东西..]   
        ssl-server-verify无

前端主*:5000
        绑定*:443 ssl crt /etc/ssl/mycert_with_private_key.pem
        模式http
        期权前转
        重新添加X-Forwarded-Proto:\ https
        default_backend https_server

后端https_server
        模式http
        平衡最小二乘
        选项tcpka
        棒桌式IP大小200k到期30m
        服务器srv04 192.168.1.10:443 SSL检查
        服务器srv05 192.168.1.11:443 SSL检查

2
此答案不适用。连接不是HTTP。
longneck

您是否建议https连接必须处于tcp模式?
Pedro Sayago 2015年

不,我是说问题使用tcp,而您的答案仅适用于http / s。
longneck 2015年

好的,祝您好运,我还没有在tcp模式下转发ip时找到与haproxy相关的任何文档。也许处理请求的层无法传递此信息。
Pedro Sayago 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.