É possível usar vários balanceadores de carga para redirecionar o tráfego para meus servidores de aplicativos?

9

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)?

user3790827
fonte
Obrigado pela sua resposta. Então, basicamente, se eu quiser usar vários balanceadores de carga para lidar com meu tráfego, só preciso configurar um CNAME diferente para cada um deles? Especificamente, se eu precisar de 10 balanceadores de carga para lidar com o tráfego do meu site, essa é a única maneira de fazer isso?
user3790827
1
Recomendo deixar as perguntas em aberto por pelo menos um dia antes de fechá-las. Mesmo isso geralmente está sendo apressado. Só porque você recebeu uma resposta não significa que ela seja necessariamente a única (ou a melhor), e marcar suas perguntas e respostas normalmente significa que recebe menos atenção.
Andrew B
1
@ Anatoly Ainda não tomei uma decisão. Analisei as soluções apresentadas aqui e também conversei com alguns dos meus amigos que me recomendaram outras soluções. Penso que, para o meu caso de uso, a melhor solução até agora seria usar servidores VPS de um provedor barato como DO ou Vultr que não ofereçam IP virtual e usar o método usado pelo Algolia com balanceamento de carga do cliente. Eu preciso de alta disponibilidade e escalabilidade para a API, portanto, não haveria tanta coisa se eu criasse subdomínios diferentes para cada balanceador de carga. Esses usuários finais do widget nunca os notarão.
user3790827
@ user3790827 parece um plano. Apesar do tipo de requisitos com HA e Failover, há muitos padrões, todos enfrentam o mesmo problema, mas ninguém tem SLA 99,9 (8 horas de inatividade por ano) ou superior. As soluções de HA são geralmente caras e as empresas trocam entre disponibilidade e custo. Os clientes geralmente aceitam 99.9 e estão cientes do tempo de inatividade potencial ou do cronograma programado, mesmo o tempo de atividade de 100% não garante zero erros com erros de desenvolvimento / implantação / segurança ou humanos.
Anatoly
Investiguei que o Google Chrome força a invalidação e a consulta de DNS em caso de tempo limite de 3 segundos. Não tenho certeza se o comportamento de outros navegadores é o mesmo.
Anatoly

Respostas:

12

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

falsificador
fonte
Quando você diz "é claro que sua infraestrutura deve suportar isso", você quer dizer que preciso de uma máquina ou VM adicional que envie solicitações aos balanceadores de carga?
user3790827
2
@ user3790827 A infraestrutura neste contexto é o equipamento de rede, não os servidores. '
10139 Jenny D
1
Estou planejando usar um provedor de nuvem, portanto, não tenho controle direto sobre a infraestrutura física. O que devo pedir ao meu provedor de serviços vps?
user3790827
1
Existem apenas recomendações abstratas porque isso depende de muitos detalhes. Nem sabemos se faz sentido ter um IP com vários hosts aqui - talvez o tráfego seja de apenas algumas centenas de Mbit / s. Se você precisar, eu avaliaria o software adequado, verifique os requisitos e descubra qual fornecedor o suporta. O RR do DNS funcionaria? Certo. Eu usaria isso? Depende do tipo de disponibilidade que o proprietário da empresa em que estou trabalhando está buscando!
21415
@faker Me desculpe, acho que é minha culpa porque não dei detalhes suficientes. Quero criar um script javascript que será inserido nos sites de outras pessoas e reunirá dados de tráfego (pense no Google Analytics), além de acessar o servidor para exibir estatísticas de cada página carregada. Basicamente, haveria um arquivo javascript que será carregado para cada site em que é usado.
user3790827
6

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:

  • a lenta rotatividade dos mecanismos de cache do DNS
  • algoritmos de balanceamento de carga limitados (geralmente apenas round-robin)
  • a terceirização da decisão de balanceamento de carga para o cliente (através do armazenamento em cache do registro DNS)
  • Drenagem lenta das filas de serviço quando um servidor (ou seja, um balanceador de carga) é retirado de rotação (com base em TTLs de registro DNS conforme manipulado por ISPs e clientes )
  • Failover lento na falha do balanceador de carga

Usando um protocolo IP virtual para HA, pode-se escolher, por exemplo:

  • Escolha do algoritmo de balanceamento de carga entre os balanceadores de carga
  • Decisões de balanceamento de carga centralizadas no servidor (facilitando, por exemplo, medidas e roteamento com base na integridade do serviço)
  • Drenagem mais rápida das filas de serviço quando um balanceador de carga é retirado de rotação.
  • Failover instantâneo na falha do balanceador de carga

Somente você sabe qual estratégia e protocolo se encaixa melhor no seu cenário.

ErikE
fonte
1
Eu também acrescentaria que alguns balanceadores de carga suportam o estabelecimento de sessões BGP com roteadores próximos, o que permite configurar soluções Anycast . Se o balanceador de carga ficar inativo ou parar de anunciar o VIP (falha na verificação de integridade), o próximo melhor candidato a roteamento vence. A última frase desta resposta é imperativa: você realmente precisa conversar com os administradores de rede da sua empresa.
Andrew B
Aqui está uma boa descrição do que você descreve no primeiro parágrafo cisco.com/c/en/us/support/docs/application-networking-services/...
Martin Podval
2

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:

  1. Equilibre a carga entre os coletores
  2. Oferecer tolerância a falhas, permitindo continuar a ingestão de dados se um dos coletores morrer ou estiver com problemas
  3. Dimensione horizontalmente com o crescimento de nossos volumes de log

O que eles tentaram e aprenderam sobre o ELB:

  1. Não funciona como esperado
  2. Problemas de latência devido ao aumento de carga
  3. Instalação de monitoramento insuficiente
  4. Limitação demais (número de portas e protocolos abertos)

Por que eles escolheram com o Route53:

  1. "O round robin é um balanceamento de carga bastante básico, mas funciona bem para nós do ponto de vista da eficiência"
  2. "Aproveitamos as verificações de integridade de failover da Rota 53".
  3. "Se houver um problema com um colecionador, o Route 53 o retirará automaticamente do serviço; nossos clientes não verão nenhum impacto".
  4. Não é necessário pré-aquecimento com o Route 53

A rota 53 acabou sendo a melhor maneira de a Loggly tirar proveito de nossos coletores de alto desempenho, dados nossos enormes volumes de toras, variações imprevisíveis e crescimento constante em nossos negócios. Ele se alinha aos principais objetivos dos coletores: coletar dados na velocidade da linha de rede com perda zero e nos permite beneficiar da elasticidade de todos os serviços da AWS que usamos na Loggly.

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:

Com o Failover de DNS, o Route 53 pode detectar uma interrupção do seu site e redirecionar seus usuários finais para locais alternativos ou de backup que você especificar. O Failover de DNS da rota 53 depende de verificações de integridade - fazendo regularmente solicitações da Internet para os terminais de seus aplicativos de vários locais ao redor do mundo - para determinar se cada terminal de seu aplicativo está ativo ou inativo.

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:

O failover de DNS da rota 53 lida com todos esses cenários de falha, integrando-se ao ELB nos bastidores. Uma vez ativado, o Route 53 configura e gerencia automaticamente verificações de integridade de nós ELB individuais.


Vamos agora ver como funciona nos bastidores. A pergunta óbvia é como lidar com o cache do DNS:

No entanto, o cache do DNS ainda pode ser um problema aqui (consulte nossa postagem anterior, onde o problema da "cauda longa" é abordado) se o TTL não for respeitado por todas as camadas entre o cliente e o Route 53. Você poderá aplicar uma técnica de "impedimento de cache": envie uma solicitação para um domínio único

("http://<unique-id>.<your-domain>") 

e defina um Recurso Curinga

Record "*.<your-domain>" to match it.

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:

Acabamos implementando uma estratégia básica de repetição em nossos clientes de API. Cada cliente da API foi desenvolvido para poder acessar três máquinas diferentes. Três registros DNS diferentes representavam cada usuário: USERIDID-1.algolia.io, USERID-2.algolia.io e USERID-3.algolia.io. Nossa primeira implementação foi selecionar aleatoriamente um dos registros e tentar novamente com outro diferente em caso de falha.

Anatoly
fonte
1
Acho que a abordagem da Algolia é a melhor para meu orçamento e casos de uso. Normalmente, eu usaria subdomínios diferentes para cada balanceador de carga, mas como apenas o widget JS os usa, o usuário final nunca notará a diferença.
user3790827
1
Alguém também sugeriu o uso do DNS cloudflare.com/features-optimizer do Cloudflare para redirecionar o tráfego para o balanceador de carga em espera quando ocorrer uma falha no balanceador de carga usado atualmente. cloudflare.com/dns
user3790827