Tengo un haproxy configurado con keepalived para el equilibrio de carga y la conmutación por error de IP de un clúster percona, y dado que funciona muy bien, me gustaría usar el mismo lb / failover para otro servicio / demonio.
He configurado haproxy de esta manera:
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
El equilibrio de carga funciona bien, pero el servicio ve la IP del equilibrador de carga en lugar de las IP reales de los clientes. En el modo http, es bastante fácil hacer pasar haproxy por la IP remota, pero ¿cómo lo hago en modo tcp? Esto es crítico debido a la naturaleza del servicio que necesito para equilibrar la carga.
¡Gracias! Vito
load-balancing
haproxy
Vito Botta
fuente
fuente
Respuestas:
Solo para futuras referencias, keepalived es una solución para la conmutación por error y no el equilibrio de carga (¿tal vez te refieres a LVS?). el modo proxy transparente para HAProxy no tiene nada que ver con ninguna forma especial de enviar la IP original, ese sería el modo HTTP no transparente normal donde puede usar un encabezado HTTP estandarizado para esto.
En mi opinión, la respuesta correcta a la pregunta original es: podría compilar soporte de proxy transparente en HAProxy en un núcleo de Linux habilitado para TPROXY. Esto, junto con la versión de soporte de TPROXY adecuada + la configuración de iptables en la misma máquina, permite un soporte de proxy tcp totalmente transparente. Esto significa que los servidores de fondo NO necesitan ninguna configuración especial.
Tenga en cuenta que esta no es la configuración recomendada para HAProxy y solo debe usarse si es absolutamente necesario.
fuente
Aparentemente hay algún tipo de modo "transparente" para haproxy que nunca he visto o con el que no quiero tener nada que ver, que puedas probar. De lo contrario, deberá enseñar lo que sea que sea el servicio de back-end sobre la forma especial de haproxy de enviar la IP original ("PROXY blahblah") y hacer que el servicio extraiga la IP original de eso.
Sin embargo, ¿por qué te molestas con el haproxy? Ya se ha mantenido en su lugar, y también hace un equilibrio de carga transparente adecuado.
fuente
El uso
send-proxy
en su configuración (por servidor) le dará la fuente-ip original en el lado del servidor receptor, incluso en modo TCP. Esto requiere HAProxy 1.5+.Puede encontrar más información sobre el protocolo proxy en la documentación de HAProxy .
fuente
Puede configurar HAProxy como modo NAT, que todavía usa el modo TCP en la capa 4 pero hace que la IP sea transparente.
Por otro lado, el modo transparente HAPorxy utiliza el modo HTTP en la capa 7, que no alcanza su punto porque ya tiene la
forwardfor
opción en el modo HTTP.fuente
Esta configuración funcionó para mí. La IP de origen se puede recuperar en $ _SERVER ['HTTP_X_FORWARDED_FOR']:
fuente