Como direcionar os usuários para um IP específico sem ter um único ponto de falha?

3

Gostaríamos de espelhar nosso site no Reino Unido e nos EUA por dois motivos. Então isso ...

  1. O site é rápido para usuários localizados na América / Europa.
  2. Para que, se um dos servidores ficar inativo, o usuário ainda possa acessar o site.

Quanto ao compartilhamento de dados entre os servidores, vamos usar o espelhamento do MySQL e provavelmente o rsync para manter os arquivos espelhados.

Se precisássemos apenas fazer o ponto 1, poderíamos programar algum código para redirecionar os usuários para um dos sites com base em seu IP, mas, para isso, teríamos um único ponto de falha.

Existe uma maneira razoavelmente barata de dizer aos usuários um IP diferente com base em sua localização? Talvez possamos fazer algo extravagante com nosso servidor DNS?

    
por Nick Bolton 27.06.2010 / 12:17

2 respostas

1

"Alta Disponibilidade" é sempre divertido :-)

No lado "simples", você pode especificar vários registros A . Isso funciona em um estilo (geralmente) round-robin e não oferece capacidade de especificar qual servidor você deseja exibir por padrão. Isso significa que você vai acabar com pessoas na Grã-Bretanha sendo servidas pelos servidores americanos e vice-versa. Isto não é o que você quer (muito menos porque nós americanos ficamos confusos com todos os extras que aparecem em palavras como cor) ;-)

Uma solução mais sofisticada seria usar um serviço DNS que usa um recurso semelhante ao que você sugeriu nos comentários. Existe uma técnica chamada Global Service Load Balancing , que realiza algo semelhante.

No lado mais caro e sofisticado, você pode usar o BGP MultiSite MultiHoming , onde você compra um Número do Sistema Autônomo (ASN) , e anunciar rotas BGP para a mesma rede de ambos os sites. Isso teoricamente garante que todos recebam o site "mais próximo" (com base na acessibilidade da rede).

Ou, se preferir, você pode contratar Akamai para distribuir seus dados e aplicativos para você. Por muito dinheiro.

Se você tem dinheiro e experiência, recomendo a solução BGP multihomed. Se não, você pode querer olhar para as soluções de DNS.

    
por 27.06.2010 / 16:53
0

Como Matt diz, existem empresas que fornecerão CDNs.

Uma abordagem mais barata seria usar RRDNS, com

www.example.com   A (UK address)
www.example.com   A (US address)

uk.www.example.com A (UK address)
uk.www.example.com A (UK address)
uk.www.example.com A (UK address)
...
uk.www.example.com A (US address)

us.www.example.com A (US address)
us.www.example.com A (US address)
us.www.example.com A (US address)
...
us.www.example.com A (UK address)

E em ambos os servidores, tente descartar um cookie (se não houver nenhum) indicando em que continente o cliente está (salva várias pesquisas caras).

Mantenha o estado do (s) 'outro (s) sistema (s) em cada servidor. Quando você obtiver uma conexão no endereço www.example.com, redirecione para o sistema mais local para o cliente que está disponível (por exemplo, uk.www.example.com).

Nos vhosts localizados (uk. e us.) sempre que uma solicitação GET chegar, se for para um vhost não local, verifique se o host preferencial nesse local está disponível e redirecione o cliente para lá.

Você provavelmente desejará implementar uma melhor detecção de failover (evitando o brain-split) e detectar loops entre servidores, sem mencionar outros ajustes.

Não é perfeito e depende muito de você codificar seu próprio controle de redirecionamento / failover.

Uma solução mais prática pode ser implementar seu próprio servidor DNS sensível a localização Como alternativa, há um número pequeno, mas crescente, de provedores de DNS que podem fornecer tal serviço (novamente, use RRDNS com vários A locais repetidos e alguns registros A remotos).

C.

    
por 27.06.2010 / 17:37