Hola buenas, he montado haproxy en Debian. Mi objetivo es balancear tráfico a 3 servidores por TCP puerto 3306 Mysql.
El problema que he encontrado, que por lo visto despues de googlear está más que reportado, es que cuando se conectan las máquinas clientes y pasan por haproxy, la ip que aparece en los servidores Mysql, es la ip del haproxy (balancador TCP) en vez de la ip de las máquinas clientes. Según he leído, antiguamente sobre kernels 2.6.X había que recompilar el kernel para habilitar TPROXY. http://blog.loadbalancer.org/configure-haproxy-with-tproxy-kernel-for-full-transparent-proxy/ También pone ahí que había que compilar parcheando iptables con soporte tproxy. Bueno después de volverme loco googleando y probando, he visto que el módulo TPROXY ya viene incluído en los kernel 3.X grep -i "tproxy" /boot/config-3.2-generic CONFIG_NETFILTER_XT_TARGET_TPROXY=m Con lo cual no haría falta compilar. Por otro lado, hay que compilar haproxy con soporte tproxy, cargar reglas iptables, rutas y añadir ciertos parámetros a sysctl: http://blog.snapt.net/2012/01/16/snapt-haproxy-and-tproxy/ Dejando haproxy.cfg configurado así funciona: global log 127.0.0.1 local0 log 127.0.0.1 local1 notice maxconn 4096 uid 99 gid 99 daemon #debug #quiet defaults log global mode http option tcplog option dontlognull retries 3 redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000 listen mysql-cluster 0.0.0.0:3306 mode tcp balance roundrobin option mysql-check user root server db01 10.4.29.100:3306 check server db02 10.4.29.99:3306 check server db03 10.4.29.98:3306 check Balancea bien, pero el problema viene cuando quiero habilitar esta directiva source 0.0.0.0 usesrc clientip , de esta forma: global log 127.0.0.1 local0 log 127.0.0.1 local1 notice maxconn 4096 uid 99 gid 99 daemon #debug #quiet defaults log global mode http option tcplog option dontlognull retries 3 redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000 listen mysql-cluster 0.0.0.0:3306 source 0.0.0.0 usesrc clientip mode tcp balance roundrobin option mysql-check user root server db01 10.4.29.100:3306 check server db02 10.4.29.99:3306 check server db03 10.4.29.98:3306 check En cuanto añado eso, ya no me funciona. El telnet al puerto 3306 a la ip de haproxy entra pero no llega a mysql. Debugeando un poquito haproxy cuando hago telnet, no veo nada raro: Available polling systems : epoll : pref=300, test result OK poll : pref=200, test result OK select : pref=150, test result FAILED Total: 3 (2 usable), will use epoll. Using epoll() as the polling mechanism. 00000000:mysql-cluster.accept(0004)=0006 from [10.1.2.190:56280] 00000000:mysql-cluster.clicls[0006:0007] 00000000:mysql-cluster.closed[0006:0007] 00000001:mysql-cluster.accept(0004)=0006 from [10.1.2.190:56281] Tenéis idea de qué puede estar pasando? En cuanto quiero registrar las ips de los clientes que se conectarán añadiendo la directiva "source 0.0.0.0 usesrc clientip" , ya no funciona. No sé si me falta algo. -- To UNSUBSCRIBE, email to debian-user-spanish-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: https://lists.debian.org/CAJ2aOA8ZyP-hpZDJ3vWd}viad9fjffp1yelxduqeixca1...@mail.gmail.com