J'ai installé un haproxy avec keepalived pour l'équilibrage de charge et le basculement IP d'un cluster percona, et comme cela fonctionne très bien, j'aimerais utiliser le même lb / failover 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 charge fonctionne correctement, mais le service voit l'IP de l'équilibreur de charge au lieu des adresses IP réelles des clients. En mode http, il est assez facile de faire passer le haproxy sur l'IP distante, mais comment faire en mode tcp? Ceci est essentiel en raison de la nature du service dont j'ai besoin pour équilibrer la charge.
Merci! Vito
load-balancing
haproxy
Vito Botta
la source
la source
Réponses:
Juste pour de futures références, keepalived est une solution pour le basculement et non l'équilibrage de charge (peut-être voulez-vous dire LVS?). le mode proxy transparent pour HAProxy n'a rien à voir avec un moyen spécial d'envoyer l'IP d'origine, qui serait le mode HTTP normal non transparent où vous pouvez utiliser un en-tête HTTP standardisé pour cela.
À mon avis, la réponse correcte à la question d'origine est: vous pouvez compiler un support de proxy transparent dans HAProxy sur un noyau linux activé par TPROXY. Ceci, associé à la bonne version prenant en charge TPROXY + la configuration d'iptables sur la même machine, permet une prise en charge réelle du proxy TCP totalement transparent. Cela signifie que les serveurs principaux n'ont besoin d'aucune configuration spéciale.
Notez que ce n'est pas la configuration recommandée pour HAProxy et ne doit être utilisé que si vous en avez absolument besoin.
la source
Il y a apparemment une sorte de mode "transparent" pour haproxy que je n'ai jamais regardé ou que je ne veux rien faire, que vous pourriez essayer. Sinon, vous devrez enseigner quel que soit le service principal sur la façon spéciale de haproxy d'envoyer l'adresse IP d'origine ("PROXY blahblah") et demander au service d'extraire l'IP d'origine de cela.
Pourquoi vous embêtez-vous avec l'haproxy, cependant? Vous avez déjà survécu et il assure également un équilibrage de charge transparent approprié.
la source
L'utilisation
send-proxy
dans votre configuration (par serveur) vous donnera l'IP source d'origine côté serveur de réception, même en mode TCP. Cela nécessite HAProxy 1.5+.Vous pouvez trouver plus d'informations sur le protocole proxy dans la documentation HAProxy .
la source
Vous pouvez définir le HAProxy comme mode NAT, qu'il utilise toujours le mode TCP dans la couche 4, mais rend l'IP transparent.
D'autre part, le mode transparent HAPorxy utilise le mode HTTP dans la couche 7, ce qui ne vous touche pas car il existe déjà une
forwardfor
option en mode HTTP.la source
Cette configuration a fonctionné pour moi. L'IP source peut être récupérée dans $ _SERVER ['HTTP_X_FORWARDED_FOR']:
la source