Buen día, estoy intentando hacer un sitio web de alta disponibilidad, para eso leí un poco y opte por haproxy y keepalived, trate de seguir varios manuales, pero no obtuve buen resultado, así que los mezcle un poco, pero solo con algunas mejorías, la idea general es algo así:
2 balanceadores lb1 y lb2 2 servidores web serv1 y serv2
una ip que comparten los 2 balanceadores (1.98)
si hago ip addr sh eth0 en ambos balanceadores me muestra la ip que tienen y también la 1.98.
ya probé incluso cambiando de distribución (ubuntu, Debian y CentOS) pero el resultado es el mismo y ese es mi problema, cuando "enciendo" el servicio lo puedo ver y me alterna las peticiones a cada servidor web, si apago un servidor web dirige toda la carga al que queda encendido, de igual forma si apago un balanceador, pero mi problema es que solo "veo" el servicio desde los balanceadores, si trato de acceder desde otro equipo no puedo, tarda un buen tiempo tratando de conectarse y se corta por tiempo excedido.
abajo están mis configuraciones, agradezco sus comentarios.
haproxy.cfg
global log 127.0.0.1 local0 log 127.0.0.1 local1 notice maxconn 4096 user haproxy group haproxy
defaults log global mode http option httplog option dontlognull retries 3 maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000
listen webfarm 192.168.1.98:80 mode http stats enable balance roundrobin option httpclose option forwardfor server webA 192.168.1.86:80 cookie A check server webB 192.168.1.85:80 cookie B check
# en la linea server webA ...... también intente cambiar la etiqueta webA por el nombre completo del server pero no hubo ningún cambio, supongo que es solo una etiqueta cierto????
------------------------------------------------------------------
keepalived.conf
global_defs { # quite premeditadamente la sección de notificación por correo smtp_connect_timeout 30 lvs_id LVS_MAIN } virtual_server 192.168.1.98 80 { delay_loop 30 lb_algo wrr lb_kind NAT persistence_timeout 50 protocol TCP real_server 192.168.1.86 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 2 } } real_server 192.168.1.85 80 { weight 2 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 2 } } } vrrp_script chk_haproxy { script "killall -0 haproxy" interval 2 weight 2 } vrrp_instance VI_1 { --- VI_2 en el secundario state MASTER ------ este es substituido en el secundario por BACKUP interface eth0 virtual_router_id 51 priority 101 ---- prioridad mas baja en el secundario advert_int 1 virtual_ipaddress { 192.168.1.98 } track_script { chk_haproxy } }