web-dev-qa-db-fra.com

Haproxy - Pass Original / IP à distance en mode TCP

J'ai une haproxy configurée avec conserve pour équilibrer la charge et basculement IP d'un cluster de Percona, et car cela fonctionne bien, je voudrais utiliser le même LB/basculement pour un autre service/démon.

J'ai configuré haproxy de cette façon:

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

L'équilibrage de la charge fonctionne bien, mais le service voit l'IP de l'équilibreur de charge au lieu des IP réels des clients. En mode HTTP, il est assez facile d'avoir une passe haproxy le long de l'adresse IP distante, mais comment puis-je faire en mode TCP? Ceci est critique en raison de la nature du service dont j'ai besoin pour charger l'équilibre.

Merci! Vito

8
Vito Botta

Juste pour les futures références, la maintenue est une solution pour le basculement non en équilibre de charge (peut-être que vous voulez dire LVS?). Le mode de proxy transparent pour Haproxy n'a rien à voir avec une manière particulière d'envoyer l'IP d'origine, ce serait le mode HTTP non transparent normal où vous pouvez utiliser une en-tête HTTP standardisée pour cela.

À mon avis, la réponse correctement à la question initiale est la suivante: vous pouvez compiler une prise en charge transparente du proxy dans HAPROXY sur un noyau Linux activé en TPROXY. Ceci ensemble avec une version de support TPROXY appropriée + la configuration des IPTABLES sur la même machine permet la prise en charge du proxy TCP entièrement transparente. Cela signifie que les serveurs Backend n'ont pas besoin de configuration spéciale.

Notez que ce n'est en réalité pas la configuration recommandée pour Haproxy et ne doit être utilisée que si vous en avez absolument besoin.

3
Robbert

Il existe apparemment une sorte de mode "transparent" pour haproxy que je n'ai jamais regardé ou que vous ne voulez rien faire, que vous puissiez essayer. Sinon, vous aurez besoin d'enseigner tout ce que le service backend est sur le fait de l'envoi de Haproxy de l'envoi de la propriété intellectuelle d'origine ("Proxy Blahallah") et auquel le service attire l'IP d'origine de cela.

Pourquoi vous dérangez-vous avec Haproxy? Vous avez déjà été maintenu déjà en place et il suffit également d'équilibrer une charge transparente.

2
womble

Vous pouvez définir le HAPROXY AS =NAT, qu'il utilise toujours TCP mode dans la couche 4 mais fait le transparent IP.

Couche HAPROXY COUCHE 4 Équilibrage de la charge NAT


D'autre part, le mode transparent Haporxy utilise le mode HTTP dans la couche 7, qu'il ne frappe pas votre point car il y a déjà forwardfor option en mode HTTP.

Mode proxy transparent d'équilibrage de la charge HAPROXY COUCHE 7

2
Nick Tsai