HAProxy + keepalived + vários farms de backend/endereços IP virtuais

HAProxy + keepalived + vários farms de backend/endereços IP virtuais

temos vários farms de back-end (HTTP, FTP, etc), basicamente um farm para cada cliente, e estou prestes a reconstruir nossa infraestrutura de balanceamento de carga, passando dePiranhaparaHAProxy.
Já que estamos usandovários farms de servidores back-end diferentes, a configuração do Piranha atualmente se parece com esta (o exemplo mostra farmwebserv01, 2ª fazendawebserv02usa a mesma configuração, mas IP virtual diferente):

virtual webserv01 {
active = 1
address = 10.11.11.1 eth2:30
vip_nmask = 255.255.255.0
port = 80
send = "GET / HTTP/1.0\r\n\r\n"
expect = "HTTP"
use_regex = 0
load_monitor = none
scheduler = rr
protocol = tcp
timeout = 6
reentry = 15
quiesce_server = 0
server webserv01v {
address = 192.168.101.64
active = 1
port = 80
weight = 1
}
server webserv02v {
address = 192.168.102.64
active = 1
port = 80
weight = 1
}
server webserv05v {
address = 192.168.101.65
active = 1
port = 80
weight = 1
}
server webserv06v {
address = 192.168.102.65
active = 1
port = 80
weight = 1
}
}

(por exemplo, o cliente 1 tem seu próprio farm de servidores web usando vIP 10.11.11.1:80, o cliente 2 tem um farm usando vIP 10.11.11.2:80). Estou curioso para saber se uma única instância do HAProxy é capaz de lidar com vários farms do mesmo serviço usando diferentes endereços vIP exclusivos.

A configuração básica seria assim:
2 instâncias HAProxy (com failover)
4 farms de back-end HTTP (um para cada cliente)
2 farms FTP

Para deixar as coisas mais claras, veja em anexo meu exemplo de configuração conceitual do HAProxy para 2 farms de servidores da web. Observe os diferentes IPs virtuais:

#---------------------------------------------------------------------
# LB: VIRTUAL WEBSERVER POOL #01
#---------------------------------------------------------------------
frontend vWEB-LB-01
bind    10.11.11.1:80
mode    http
default_backend vWEB-Pool-01

backend vWEB-Pool-01
mode    http
balance roundrobin
server  webserv01v  192.168.101.64:80   check   weight 100  inter 1000
server  webserv02v  192.168.102.64:80   check   weight 100  inter 1000
server  webserv05v  192.168.101.65:80   check   weight 100  inter 1000
server  webserv06v  192.168.102.65:80   check   weight 100  inter 1000

#---------------------------------------------------------------------
# LB: VIRTUAL WEBSERVER POOL #02
#---------------------------------------------------------------------
frontend vWEB-LB-02
bind    10.11.11.2:80
mode    http
default_backend vWEB-Pool-02

backend vWEB-Pool-02
mode    http
balance roundrobin
server  webserv01v  192.168.101.75:80   check   weight 100  inter 1000
server  webserv02v  192.168.101.76:80   check   weight 100  inter 1000
server  webserv05v  192.168.101.68:80   check   weight 100  inter 1000
server  webserv06v  192.168.101.69:80   check   weight 100  inter 1000

O HAProxy e/ou o keeoalived podem lidar com isso da maneira como é mostrado? Se sim, como eu abordaria isso?

Eu gostaria de usar keepalivedpara fins de failover entre as 2 instâncias do HAProxy e fazer com que elas fizessem o balanceamento de carga para os farms de back-end. Estou meio confuso agora sobre os vários endereços IP virtuais que preciso usar, qualquer informação seria muito apreciada!

Responder1

Sim, o HAproxy fará isso. Você só precisará configurar o keepalived com todos os IPs virtuais que o HAproxy usará. Você pode atribuir vários IPs no bloco virtual_ipaddress em keepalived.conf:

virtual_ipaddress {
        192.168.0.10
        192.168.0.11
        192.168.0.12
        192.168.0.13
        }

informação relacionada