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
}
}