Como criar balanceadores de carga redundantes?

27

Entendo que o objetivo dos balanceadores de carga é equilibrar a carga entre seus servidores e acompanhar a integridade da instância, etc. Mas e se o próprio balanceador de carga falhar? Como você configura balanceadores de carga redundantes? (balanceamento de carga balanceadores de carga?)

Pude ver como as verificações de integridade do DNS poderiam ser úteis, mas obviamente existem problemas importantes de latência, não há?

Isso pressupõe que você não esteja usando nenhum serviço de terceiros como o AWS ELB ou algo semelhante. O que fazer se você estiver apenas usando o Nginx?

Sherzod
fonte
Não há "balanceadores de carga" no topo da sua arquitetura, você apenas torna seus LBs redundantes e configura uma solução de alta disponibilidade para lidar com falhas, como a maioria das tipologias de cluster.
Xavier Lucas

Respostas:

32

Existem duas maneiras de obter HA (alta disponibilidade) de um balanceador de carga - ou em relação a qualquer serviço. Vamos supor que você tenha duas máquinas, com endereços IP:

  • 192.168.100.101
  • 192.168.100.102

Os usuários se conectam a um IP, então o que você deseja fazer é separar o IP de uma caixa específica - por exemplo, crie um IP virtual. Esse IP será 192.168.100.100.

Agora, você pode escolher o serviço de alta disponibilidade, que cuidará do failover / failback automático do endereço IP. Alguns dos serviços mais simples para o unix são (u) carp e mantidos vivos, alguns dos mais complexos são, por exemplo, o RedHat Cluster Suite ou o Pacemaker.

Vamos dar o keepalived como exemplo - dois serviços de keepalived - cada um executando em sua própria caixa - e eles se comunicam juntos. Essa comunicação é freqüentemente chamada de batimento cardíaco.

|   VIP   |                           |         |
|  Box A  | ------v^-----------v^---- |  Box B  |
|   IP1   |                           |   IP2   |

Se um keepalived parar de responder (o serviço será desativado por qualquer motivo, ou a caixa será desativada ou desativada) - o keepalived em outra caixa notará batimentos cardíacos perdidos e presumirá que outro nó está morto e executará ações de failover. Essa ação no nosso caso estará trazendo o IP flutuante.

                                      |   VIP   |
    ------------------ -------------- |  Box B  |
                                      |   IP2   |

O pior caso que pode acontecer nesse caso é a perda de sessões para os clientes, mas eles poderão se reconectar. Se você deseja evitar isso, dois balanceadores de carga precisam ser capazes de sincronizar os dados da sessão entre eles e, se puderem fazer isso, os usuários não perceberão nada, exceto talvez um pequeno atraso.

Outra armadilha dessa configuração é o cérebro dividido - quando as duas caixas estão online, mas o link é cortado, e as duas caixas exibem o mesmo IP. Isso geralmente é resolvido através de algum tipo de mecanismo de vedação (reserva SCSI, reinicialização de IPMI, corte de energia da PDU inteligente, ...) ou número ímpar de nós que exigem que a maioria dos membros do cluster esteja ativa para que o serviço seja iniciado.

|   VIP   |                           |   VIP   |
|  Box A  |                           |  Box B  |
|   IP1   |                           |   IP2   |

Um software de gerenciamento de cluster mais complexo (como o Pacemaker) pode mover todo o serviço (por exemplo: pará-lo em um nó e iniciá-lo em outro) - e é dessa maneira que a HA para serviços como bancos de dados pode ser alcançada.

Outra maneira possível - se você estiver controlando roteadores perto de seus balanceadores de carga, é utilizar o ECMP. Essa abordagem também permite dimensionar horizontalmente os balanceadores de carga. Isso funciona por cada uma das duas caixas que falam BGP para o (s) seu (s) roteador (s). Cada caixa deve anunciar o IP virtual (192.168.100.100) e o roteador carregará o saldo do tráfego via ECMP. Se uma máquina morrer, ela interromperá a publicidade VIP, o que impedirá que os roteadores enviem tráfego para ela. A única coisa que você precisa cuidar nesta configuração é parar o IP de publicidade se o próprio balanceador de carga morrer.

Jakov Sosic
fonte
3

Usar o Nginx como seu balanceador de carga deve permitir que você siga o redirecionamento detalhado nesta postagem, alterando sua configuração para detectar um tempo limite sem resposta:

balanceamento de carga de failover automático nginx

Em teoria, se você tiver um ambiente de alta disponibilidade, vários balanceadores de carga em cluster devem permitir a manutenção do serviço se houver falha.

Espero que isto ajude.

user4657
fonte
2

Os balanceadores de carga de hardware suportam configurações "ativas / passivas" ou "ativas / ativas" há anos; em ambos os casos, elas são configuradas paralelamente a partir de uma perspectiva de camada 1/2 ... ativa / passiva usa mecanismos de monitoramento / manutenção de atividade, conforme descrito , ativo / ativo pode ser implementado de várias maneiras. Para aparecer como um único IP no front-end, dois ou mais balanceadores podem, desde que estejam todos / ambos on-line, fazer coisas como:

  • atenda seletivamente solicitações ARP ao IP compartilhado com base no endereço IP ou MAC de origem quando os clientes estiverem na mesma rede
  • negociar entre si quem lida com o tráfego de uma nova conexão TCP
  • permita que o tráfego duplicado ou incorreto da camada 3-7 ocorra de forma imprudente e conte com as pilhas TCP do cliente / roteador para resolvê-lo

E depois mude o modo para aceitar todo ou mais tráfego quando a comunicação com o dispositivo parceiro for perdida.

no lado de back-end:

  • cada um dos balanceadores pode, em operação normal, usar apenas um determinado subconjunto de servidores de aplicativos
  • ou solicitações duplicadas podem simplesmente ser geradas aqui também ...
  • ou, a negociação entre balanceadores pode ser feita
rackandboneman
fonte