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

7

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 um endereço IP de 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 por ambos os balanceadores de carga (ou por 10 balanceadores de carga ou 50 ou 100)?

    
por user3790827 12.07.2015 / 18:54

3 respostas

10

O uso do round robin DNS não é ótimo para alta disponibilidade - se um servidor ficar off-line, os clientes ainda tentarão se conectar a ele e esperar por um 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 e assume o IP.
Lembre-se de que os balanceadores de carga estão praticamente encaminhando tráfego, 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 para todos os balanceadores de carga, mas um algoritmo escolhe qual balanceador deve responder, todos os outros descartam esse tráfego. Maneira simples de pensar sobre isso, você tem dois balanceadores de carga:
Quando o IP solicitante termina com um número par, carrega as respostas do balanceador A, caso contrário, o balanceador de carga B responde.

É claro que sua infra-estrutura deve suportar isso e há sobrecarga devido ao tráfego ser enviado, mas descartado.
Mais informações, por ex. aqui: link

    
por 12.07.2015 / 23:26
6

A alta disponibilidade com balanceadores de carga é comumente implementada usando o protocolo endereço IP virtual (VIP), que permite vários hosts (isto é, balanceadores de carga) para responder 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 com balanceadores de carga regulares são VRRP e NLB (bem como vários protocolos de caixa preta indefinidos em appliances). Expandindo para roteadores e firewalls, pode-se também encontrar CARP , HRSP , GLSP , por exemplo.

Essa estratégia tem vários benefícios sobre o balanceamento de carga DNS, que é uma estratégia mais simples (e que é resolvida em outra resposta).

O balanceamento de carga de DNS é sobrecarregado, por exemplo, com:

  • o lento giro dos mecanismos de cache do DNS
  • algoritmos de balanceamento de carga limitados (normalmente apenas round-robin)
  • a terceirização da decisão de balanceamento de carga para o cliente (por meio do armazenamento em cache do registro do DNS)
  • Diluição lenta de filas de serviço quando um servidor (por exemplo, um balanceador de carga) é retirado da rotação (com base nos TTLs de registro de DNS conforme tratado pelos ISPs e clientes )
  • Failover lento na falha do balanceador de carga

Usando um protocolo ip virtual para HA, pode-se ter a escolha de, por exemplo:

  • Escolha do algoritmo de balanceamento de carga entre os balanceadores de carga
  • Decisões de balanceamento de carga centradas no servidor (facilitando, por exemplo, medidas e roteamento baseados em serviços de saúde)
  • Escoamento mais rápido das filas de serviço quando um balanceador de carga é retirado da rotação.
  • Failover instantâneo na falha do balanceador de carga

Só você sabe qual estratégia e protocolo se adequa melhor ao seu cenário.

    
por 13.07.2015 / 00:08
1

Os requisitos: ter uma solução prática que funcione para a nuvem ou qualquer tipo de ambiente onde não haja acesso a balanceadores de carga de hardware, protocolos BGP e todas essas coisas.

O número de solicitação de receita de um aplicativo é desconhecido, mas deve ser alto o suficiente para atender a uma expectativa de aumento de carga sem medo.

Vamos encontrar um aplicativo com natureza semelhante de carga, por exemplo, loja de registro e aplicativo de pesquisa. Eu encontrei um .

O que eles querem:

  1. Equilibre a carga entre os colecionadores
  2. Ofereça tolerância a falhas, permitindo que continuemos ingerindo dados se um dos coletores morrer ou estiver com problemas
  3. Escala horizontalmente com o crescimento em 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. Não há instalações de monitoramento suficientes
  4. Excesso de limitação (portas abertas e número de protocolos)

Por que eles escolheram com o Route53:

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

Route 53 turned out to be the best way for Loggly to take advantage of our high-performance collectors given our huge log volumes, unpredictable variations, and constant growth in our business. It aligns with the collectors’ core purposes: To collect data at network line speed with zero loss, and it allows us to benefit from the elasticity of all of the AWS services we use at 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 "solução de round-robin de verificação de integridade de DNS" faz seu trabalho muito bem.

Vamos ver o que da AWS diz sobre o failover de DNS :

With DNS Failover, Route 53 can detect an outage of your website and redirect your end users to alternate or backup locations that you specify. Route 53 DNS Failover relies on health checks-regularly making Internet requests to your applications endpoints from multiple locations around the world-to determine whether each endpoint of your application is up or down.

Essa técnica também torna o ELB (não obrigatório, apenas para uma nota) mais robusto, novamente é baseado em RR + Health Check:

Route 53 DNS Failover handles all of these failure scenarios by integrating with ELB behind the scenes. Once enabled, Route 53 automatically configures and manages health checks for individual ELB nodes.

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

However, DNS caching can still be a problem here (see our previous post where "long tail" problem is covered) if TTL is not respected by all layers between your client and Route 53. You could then apply a "cache busting" technique: send a request to a unique domain

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

e defina um recurso curinga

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

Algolia introduziu "tentativa de cliente estratégia ", que funciona muito bem se o seu cliente (JS no seu caso) pode lidar com isso:

We ended up implementing a basic retry strategy in our API clients. Each API client was developed to be able to access three different machines. Three different DNS records represented each user: USERIDID-1.algolia.io, USERID-2.algolia.io andUSERID-3.algolia.io. Our first implementation was to randomly select one of the records and then retry with a different one in case of failure.

    
por 13.07.2015 / 17:57