Eu sou novo no balanceamento de carga e estou pensando se é possível usar vários balanceadores de carga para redirecionar o tráfego para meus servidores de aplicativos. Eu realmente não entendo como isso pode ser feito. Um nome de domínio não deve corresponder um a um com o endereço IP de um determinado servidor (nesse caso, o IP de um balanceador de carga)? Se cada servidor de balanceamento de carga tiver um IP diferente, como a solicitação pode ser recebida pelos dois balanceadores de carga (ou por 10 balanceadores de carga ou 50 ou 100)?
domain-name-system
nginx
load-balancing
haproxy
high-load
user3790827
fonte
fonte
Respostas:
O uso do DNS round round não é tão bom para alta disponibilidade - se um servidor ficar offline, os clientes ainda tentarão se conectar a ele e aguardarão o tempo limite.
Existem outras maneiras de conseguir isso.
1) Balanceadores de carga ativos / passivos
Basicamente, um balanceador de carga lida com todo o tráfego para um endereço IP.
Se esse balanceador cair, o nó passivo entra em ação e assume o IP.
Lembre-se de que os balanceadores de carga são apenas o tráfego de encaminhamento, portanto, para sites pequenos e médios, isso pode funcionar bem.
2) Balanceadores de carga ativos / ativos
O mesmo IP de tráfego é configurado em ambos (ou muitos mais) balanceadores de carga.
O tráfego de entrada é enviado a todos os balanceadores de carga, mas um algoritmo escolhe qual balanceador deve responder; todos os outros descartam esse tráfego.
Maneira simples de pensar nisso, você tem dois balanceadores de carga:
quando o IP solicitante termina com um número par, o balanceador de carga A responde, caso contrário, o balanceador de carga B responde.
É claro que sua infraestrutura deve suportar isso e há sobrecarga devido ao tráfego ser enviado, mas descartado.
Mais informações, por exemplo, aqui: http://community.brocade.com/t5/SteelApp-Docs/Feature-Brief-Deep-dive-on-Multi-Hosted-IP-addresses-in-Stingray/ta-p/73867
fonte
A alta disponibilidade com balanceadores de carga é geralmente implementada usando um protocolo de endereço IP virtual (VIP) que permite que vários hosts (ou seja, balanceadores de carga) respondam a um endereço IP comum de uma das várias maneiras possíveis (variações de ativo / passivo, ativo / ativo) .
Há um bom número desses protocolos, os que eu mais vi nos balanceadores de carga regulares são VRRP e NLB (além de vários protocolos em caixa preta não descritos em dispositivos). Expandindo para roteadores e firewalls, também é possível encontrar CARP , HRSP , GLSP , por exemplo.
Essa estratégia possui vários benefícios sobre o balanceamento de carga do DNS, que é uma estratégia mais simples (e tratada em outra resposta).
O balanceamento de carga do DNS está sobrecarregado, por exemplo, com:
Usando um protocolo IP virtual para HA, pode-se escolher, por exemplo:
Somente você sabe qual estratégia e protocolo se encaixa melhor no seu cenário.
fonte
Os requisitos: ter uma solução prática que funcione para nuvem ou qualquer tipo de ambiente em que não haja acesso a balanceadores de carga de hardware, protocolos BGP e tudo mais.
O número de solicitação de renda de um aplicativo é desconhecido, mas deve ser alto o suficiente para atender a uma expectativa de carga aumentada sem medo.
Vamos encontrar um aplicativo com natureza semelhante de carga, por exemplo, loja de log e aplicativo de pesquisa. Eu encontrei um .
O que eles querem:
O que eles tentaram e aprenderam sobre o ELB:
Por que eles escolheram com o Route53:
Esse exemplo em particular mostra que, em alguns cenários (coletor de logs, serviço de anúncios ou similar), o balanceador de carga é redundante e a "solução de rodízio de verificação de integridade do DNS" faz seu trabalho muito bem.
Vamos ver o que a AWS diz sobre o failover de DNS:
Essa técnica também torna o ELB (não obrigatório, apenas para uma observação) mais robusto, mais uma vez, é baseado no RR + Health Check:
Vamos agora ver como funciona nos bastidores. A pergunta óbvia é como lidar com o cache do DNS:
e defina um Recurso Curinga
A Algolia introduziu a "estratégia de nova tentativa do cliente", que funciona muito bem se o seu cliente (JS no seu caso) puder lidar com isso:
fonte