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.


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.