Como esta é uma resposta antiga, não tenho certeza se você ainda está procurando uma resposta. Mas eu me deparei com isso procurando a melhor maneira de como fazer isso.
A maneira como o Hetzner atribui um IP de failover a um servidor dedicado não é permitir que ele seja configurado no servidor, mas rotear o tráfego para o IP do servidor original. Portanto, é possível não alterar nada em seu servidor e alternar manualmente o IP em sua interface administrativa. Contudo; Esta não é uma solução adequada para a maioria como eu não gostaria de sair da cama para manualmente failover. Isso deve ser feito automaticamente e, em seguida, notificar o administrador de que o failover foi feito. Talvez até mesmo com um pequeno relatório que emite o sistema e por que ele falhou.
O Keepalived pode fazer isso por você, a única coisa necessária é configurar o keepalived para executar o script durante o failover. Mas se não houver IP para failover, como podemos, então, fazer o failover?
Simples; crie uma rede interna entre os servidores e atribua seu próprio IP interno não roteado para ser mantido. Como essa rede interna usa a mesma interface da rede externa, isso não importa realmente. Um benefício dessa abordagem é que você pode manter todo o tráfego interno 100% interno usando esse VIP interno.
Uma vez que o Keepalived falha você ordena que ele execute o script do Hetzner para também trocar o ip externo usando: notificar
Um exemplo:
vrrp_script chk_haproxy {
script "killall -0 haproxy" # cheaper than pidof
interval 2 # check every 2 seconds
weight 2 # add 2 points of prio if OK
}
vrrp_instance VI_1 {
state MASTER
interface enp0s31f6.4000
virtual_router_id 51
priority 101
virtual_ipaddress {
192.168.100.3/24 # this is the shared IP I was using
}
track_script {
chk_haproxy
}
notify /usr/sbin/hetzner_failoverIP.sh database set $THIS_SERVER_IP
}
É claro que o script Hetzner pode ser ajustado para ser muito mais inteligente, selecionando o IP do servidor por si só, por exemplo.
A desvantagem que deve ser notada é que o IP externo levará entre 40 e 60 segundos. Para mim, um mínimo de 40 segundos e um máximo de 1 minuto é muito longo.
Outra opção é usar as instâncias de nuvem do Hetzner para ativar o HA sem o uso do IP de failover e do script acima. Na nuvem, há outra solução: IP flutuante na nuvem .
Esta opção irá custar cerca de € 8,50 por mês por:
- duas instâncias de nuvem (1 cpu básica, 2 GB de memória e 20 TB de tráfego cada)
- dois IP flutuantes na nuvem
Em seguida, use o keepalived para gerenciar o IP flutuante da nuvem (seção virtual_ipaddress) e o HAProxy para enviar todo o tráfego para os servidores dedicados. O HAProxy fará então as verificações de integridade e você não precisa se preocupar com:
- Comutação de IP usando a API do Hetzner
- 40 a 60 segundos de tempo de inatividade adicional
Vale a pena mencionar que os servidores em nuvem da Hetzner não suportam uma rede interna. Mas não é necessário se você usá-los desta forma e não lhe custará extra, já que o tráfego interno é gratuito. Por segurança, proteja os balanceadores de carga (instâncias de nuvens Keepalived + HAProxy) com o SELinux / AppArmor e o Firewalld. Use o tráfego criptografado entre os dois clusters (cloud < - > Dedicated) para prefentar o sniffing de pacotes. Eu também criptografaria o tráfego entre seus servidores dedicados, mesmo se você estiver usando uma VLAN privada, o tráfego ainda está sendo enviado através do mesmo NIC. Algo para ter em mente.
Fontes usadas: