Balanceamento de carga / failover para vários VPSs em diferentes datacenters

4

Eu sei que muitas variantes desta pergunta já foram feitas, mas ainda não consigo encontrar uma boa resposta às minhas necessidades.

O que eu quero fazer é configurar alguns (no mínimo) VPSs para hospedar meus aplicativos da web. Eu gostaria de fornecer alguns balanceamento de carga (o que é bastante fácil de alcançar com digamos que o Varnish), e disponibilidade relativamente alta - que é o meu problema.

Usar o balanceador de carga (que eu precisava hospedar em um dos VPSs) introduz um ponto único de falha , que quase tão ruim quanto ter apenas uma máquina para servir o conteúdo.

link

O método round-robin do DNS AFAIK não é apenas uma má ideia para balanceamento de carga, mas também não fornece um mecanismo de failover . Se um dos servidores ficar inativo, algumas pessoas (com IP de DNS em cache) ainda tentarão se conectar ao servidor não disponível. E esqueça o curto TTL - isto não é não a solução correta.

link

Uma coisa muito importante a considerar: Quero que meus VPSs sejam divididos em muitos datacenters , portanto, se a eletricidade ou o provedor de serviços de Internet falhar em um datacenter, o site não ficará inativo.

As únicas duas soluções em que posso pensar é confiar no dns round robin (e no caso de falha do servidor servir pelo menos o conteúdo para uma porcentagem de usuários até a recuperação), ou comprar um servidor dedicado em um data center bem preparado para blecaute e equipado com várias conexões de internet (que é insanamente caro em comparação com o aluguel até 10 VPS).

Então a questão é: Qual é a maneira correta de evitar um único ponto de falha enquanto há vários VPS's com carga balanceada?

Por favor, desculpe as imagens. Eles são apenas exemplos tão básicos quanto possíveis do que eu quis dizer.

    
por user500921 17.09.2011 / 10:44

2 respostas

3

Notas:

Quanto você está disposto a gastar, eu ainda não vi alguém confiando em VPSs e realmente quer gastar o dinheiro para um caso de falha de datacenter.

Em relação aos seus desenhos:

A falha na primeira é verdadeira se (e somente se) o balanceador de carga for uma única máquina, se for um único sistema (como em um sistema criado a partir de vários hosts) não é mais verdade.

SPA (resposta mais curta possível):

Resposta realmente curta: Você precisa obter um IP de serviço disponível em todos os seus locais. E configure o roteamento BGP.

Um pouco mais: Normalmente, isso é feito usando o BGP e anunciando o IP em dois locais diferentes. Você pode configurá-lo de uma forma que os IPs estejam anunciando o tempo todo, mas um tem uma preferência menor que a outra. Desta forma, em circunstâncias normais, o tráfego irá para apenas um site, se isso falhar, a rota do BGP é interrompida e o tráfego muda para o IP ainda disponível.

Temos algumas configurações semelhantes a isso, o layout típico é:

(por localização):

  • 2 loadbalancers

    Este é o lugar onde o BGP também é executado e anuncia seus IPs. Geralmente Quagga e alguma configuração de IPVS (usamos keepalived)

  • n servidores para lidar com a carga (FE)

Os casos de falha:

  • Qualquer 1 Loadbalancer (em um único site) falha

    • Gerenciado pelo keepalived, o outro LB apenas continuará seu trabalho
  • Qualquer n-k dos FEs falha ( k sendo o número de FEs que podem falhar sem problemas)

    • Gerenciados pelos LBs, um cheque os removerá e eles não receberão mais tráfego
  • n-(k+1) FEs falham (em um único site)

    • tratado pelo BGP. Nós vamos matar a sessão BGP nos LBs no site onde muitos FEs falharam. O outro local assume
  • qualquer interrupção importante em um único site

    • Tratada pelo BGP, a sessão do BGP será descartada e o outro local saltará para

Desculpe, não estou de bom humor agora para aprofundar os detalhes de fazer isso manualmente. Meu palpite é que você será melhor (e mais barato) ao alugar um serviço de balanceamento de carga que fará a mágica para você. Eu li que a Amazon fornece isso, mas não sei se o uso deles é possível sem usar o restante da infraestrutura deles.

    
por 17.09.2011 / 13:53
0

Estou tentando conseguir exatamente a mesma coisa, se você encontrar uma boa solução, por favor poste! :)

O que eu tenho até agora é o Amazon EC2 "Elastic IP" (e também "Elastic Load Balaning"), que pode ser roteado para instâncias em diferentes datacenters em uma região. (Ironicamente, eles tiveram uma interrupção que derrubou todos os datacenters de uma região).

Também pesquisei este aqui: link - parece que eles também fornecem o que você está procurando. (Eu mesmo não me atrevi a perguntar sobre preços:)

Até agora, vejo que a resposta final é gerenciar o próprio BGP, mas pelo menos para mim isso está fora de questão.

Para a opção DNS eu geralmente concordaria que não é perfeito por causa de algum cache inevitável, principalmente dentro dos navegadores dos usuários finais. Eu também concordo que o TTL baixo não é perfeito, pois acho que ter um TTL baixo para sites pequenos causará uma lentidão menor, pois para a maioria dos usuários, os resolvedores DNS recursivos não o terão no cache. (Embora valha a pena mencionar que google.com tem TTL de 300 segundos). BTW, os navegadores AFAIK farão failover para o segundo IP anunciado no DNS, uma vez que o tempo limite se conecta ao primeiro, de modo que ele não irá falhar completamente, mas em vez disso eu o chamaria de degradação.

Estou pensando em combinar os dois - usando dois provedores VPS com cada um hospedando dois hosts - entre hosts no mesmo datacenter usando failover de IP, e em datacenters usar DNS (normalmente ambos os IPs anunciados, com TTL baixo e uma vez deles falha, falha IP removido).

Você deve estar ciente do caso de divisão cerebral em que ambos os sites lutam para remover o outro IP, já que se consideram indisponíveis. Acho que encontrei uma boa solução para ele - execute seu servidor DNS em cada host, então, ao dividir o cérebro, cada site remove o outro somente do seu próprio servidor DNS , portanto, aquele que é capaz de alcançar um O host também obterá o DNS resolvido do mesmo modo que o host acessível (chegou a ele, certo?).

Se ter 4 hosts é muito caro, acho que é melhor usar apenas failover de IP em algum provedor confiável e não depender apenas do DNS.

Atenciosamente, Alex

    
por 21.10.2011 / 12:51