Keepalived por mais de 20 endereços virtuais

12

Eu configurei o keepalived em duas máquinas Debian para alta disponibilidade, mas encontrei o número máximo de IPs virtuais que posso atribuir ao meu vrrp_instance. Como eu configuraria e falharia mais de 20 IPs virtuais?

Esta é a configuração muito simples:

LB01: 10.200.85.1
LB02: 10.200.85.2
Virtual IPs: 10.200.85.100 -  10.200.85.200

Cada máquina também está executando a ligação do Apache (mais tarde Nginx) nos IPs virtuais para término do certificado do cliente SSL e proxy para servidores da web de back-end. A razão pela qual eu preciso de tantos VIPs é a incapacidade de usar o VirtualHost no HTTPS.

Este é o meu keepalived.conf:

vrrp_script chk_apache2 {
        script "killall -0 apache2"
        interval 2
        weight 2
}

vrrp_instance VI_1 {
        interface eth0
        state MASTER
        virtual_router_id 51
        priority 101
        virtual_ipaddress {
            10.200.85.100
            .
            . all the way to
            .
            10.200.85.200
}

Uma configuração idêntica está na máquina BACKUP e está funcionando bem, mas apenas até o vigésimo IP.

Eu encontrei um HOWTO discutindo esse problema. Basicamente, eles sugerem ter apenas um VIP e rotear todo o tráfego "via" esse único IP e "tudo ficará bem". Será esta uma boa abordagem? Estou executando os firewalls do pfSense na frente das máquinas.

Citação no link acima:

ip route add $VNET/N via $VIP

or

route add $VNET netmask w.x.y.z gw $VIP

Desde já, obrigado.

EDITAR:

@ David Schwartz disse que faria sentido adicionar uma rota, então tentei adicionar uma rota estática ao firewall pfSense, mas isso não funcionou como eu esperava.

rota pfSense:

Interface:            LAN
Destination network:  10.200.85.200/32 (virtual IP)
Gateway:              10.200.85.100    (floating virtual IP)
Description:          Route to VIP .100

Também verifiquei se o encaminhamento de pacotes estava ativado nos meus hosts:

$ cat /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv4.ip_nonlocal_bind=1

Estou fazendo isso errado? Também removi todos os VIPs do keepalived.conf, para que ele falhe apenas em 10.200.85.100.

cvaldemar
fonte
Eu acho que essa abordagem faz sentido.
David Schwartz
... ou eu faria apenas vrrp_instances adicionais, cada um com um bloco de 20 IPs? Provavelmente eu poderia agrupar os sites HTTPS hospedados de alguma forma, dando-lhe algum significado adicional.
Cvaldemar
A rede de destino deve ser o conjunto de mais de 20 IPs, não um único IP.
David Schwartz

Respostas:

14

A solução mais simples, sem alterar sua arquitetura atual, é usar virtual_ipaddress_excluded . Por exemplo

vrrp_instance VI_1 {
    interface eth0
    state MASTER
    virtual_router_id 51
    priority 101

    virtual_ipaddress {
        10.200.85.100
    }

    virtual_ipaddress_excluded {
        10.200.85.101
        . all the way to
        10.200.85.200
    }
}

virtual_ipaddress_excluded contém uma lista de endereços IP que o keepalived trará para cima e para baixo no servidor, no entanto, eles não estão incluídos no pacote VRRP em si, portanto, não contam para o limite de 20 endereços IP.

Nas minhas configurações, gosto de alocar um IP especificamente para o endereço_ip virtual . isto é, aquele que está incluído nos pacotes VRRP e coloca todo o resto em virtual_ipaddress_excluded . Essa é uma boa ideia, porque você não deseja alterar o IP principal apenas porque um cliente foi embora.

johnf
fonte
Excelente. Estou fazendo isso em vez de várias instâncias de vrrp. Você também me fez ler a documentação de keepalived. Obrigado!
Cvaldemar 04/04