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

Vit*_*tta 9 load-balancing haproxy

我已经使用 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
Run Code Online (Sandbox Code Playgroud)

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

谢谢!维托

wom*_*ble 3

显然,haproxy 有某种“透明”模式,我从未见过或不想与之相关,你可以尝试一下。否则,您需要向后端服务传授有关 haproxy 发送原始 IP(“PROXY blahblah”)的特殊方式的信息,并让该服务从中提取原始 IP。

不过,你为什么要为 haproxy 烦恼呢?你已经有了 keepalived,并且它也可以进行适当的透明负载平衡。