Robin Redondo do DNS: Os navegadores mantêm um único IP, desde que esteja online?

14

Como a maioria dos navegadores se comporta se eles obtêm vários registros A do servidor DNS? Atenha-se a um IP desde que seja alcançável (e use outro somente se o IP estiver inativo)? Ou eles trocam o tempo todo sem motivo?

Se a maioria dos navegadores atuais aderir a um IP, o DNS-RR seria suficiente para mim como uma solução simples de failover.

HiPerFreak
fonte
1
Não posso responder sua pergunta diretamente, mas vou lhe mostrar que você precisa lidar com o cache no navegador e no sistema operacional! Divirta-se :)
SpaceManSpiff
1
@Iain - Link impressionante
SpacemanSpiff
Quantas máquinas você possui para um back-end? Se duas máquinas com passivo ativo estiverem corretas, obtenha um terceiro endereço IP e use a pulsação para fazer failover entre máquinas físicas. Como alternativa, acho que o ultramonkey suporta a atribuição de back-end com base no IP de origem, que é quase o mesmo que um único cliente. Provavelmente, você também pode hackear algo ao fazer com que cada back-end defina um cookie exclusivo e com um proxy de servidor da web de front-end para back-end, dependendo do cookie. (Mod_rewrite do Apache provavelmente pode fazê-lo.)
jon
Não existe uma regra única cobrindo todos os navegadores, então no mínimo você precisa especificar quais um / que você está interessado.
John Gardeniers

Respostas:

7

Cada navegador tem seu próprio método de lidar com DNS round-robin. Hoje passo algum tempo pesquisando esse problema e continuarei atualizando minha resposta à medida que encontrar provas de implementação que limitarão minhas respostas aos navegadores que expõem seu comportamento.

Google Chrome

O Google Chrome (v58 usado) solicitará todas as entradas do host para um endereço (A, AAAA, CNAME) e as colocará em uma matriz ( address_list ). O Chrome tentará abrir um soquete em cada endereço IP, da ordem do primeiro ao último, o Chrome não tentará o IP mais rápido ou o mais próximo; ele assume o primeiro IP (fornecido pelos seus resolvedores de DNS upstream) como o melhor IP. Nos meus testes, os servidores bind e windows dns fornecem uma ordem diferente de IPs por pesquisa, dando o que parece ser 50/50 dividido em largura de banda para cada IP. Essa funcionalidade é exposta nochrome://net-internals/#events&q=type:SOCKET%20is:active

Ondulação (libcurl / 7.54.0)

O Curl também possui essa função de failover, mas --connect-timeouté muito mais longo que o padrão no chrome, o chrome falha imediatamente, o Curl não. Se você usa libcurl e deseja sobreviver a uma instância de round-robin dns em que um IP falha (funciona no chrome, mas não no código), certifique-se de especificar esse valor mais baixo.

DEFAULT_CONNECT_TIMEOUT: 0 me fez pensar que isso não era possível com o curl.

* After 149990ms connect time, move on!

Nos dois navegadores , o IP não era pegajoso , eles seguiram o TTL fornecido no DNS e, uma vez que o ttl expirou (o chrome mantém isso internamente, o curl solicita cada solicitação), a seleção de ip é realizada sempre que descrito acima.

O que isto significa? O DNS-RR é bom para alguns sistemas, mas não foi projetado para failover. Você deve esperar que todos os resultados da procura do DNS sejam (uma fonte de verdade) válidos e disponíveis para servir o tráfego. Há muitas maneiras de garantir a disponibilidade de IP, como IPs flutuantes virtuais, truques de BGP / Roteamento, etc. Use-os .

Todos os testes realizados no ambiente somente IPv4 retornarão com resultados de pilha dupla assim que houver infraestrutura suficiente disponível para teste.

Especulo que essas mudanças são um efeito colateral dos IPv6-Fallback RFC Happy Eyeballs

Atualização Uma consideração útil, o RR DNS só pode ajudar no balanceamento de carga, não nas falhas de aplicativos, se um de nossos nós tiver 503, você servirá 40-60% se o tráfego estiver 503s. Supõe-se que todos os IPs listados sejam terminais de trabalho válidos, se alcançáveis

Jacob Evans
fonte
2

edit: Editando minha resposta desde que o HiPerFreak me instruiu.

Os servidores DNS retornarão uma lista de todos os registros A que ele possui para um determinado nome de host. Onde o round robin entra é que ele gira como a lista é ordenada. O link postado é um ótimo exemplo de como os navegadores da Web farão uso dessa lista.

O Round Robinning pode ser usado para uma forma muito primitiva de balanceamento de carga, mas é um substituto muito ruim para o balanceamento de carga real, pois se um dos hosts na rotação round robin cair, o servidor DNS não será mais sábio e continuará sendo coloque o endereço IP do nó desativado na lista.

Ryan Ries
fonte
O servidor DNS sempre distribui TODOS os endereços. É o navegador quem decide qual deles será usado (como discuseed muitas vezes aqui e em outros lugares). Além disso, o sistema operacional passa todos os IPs para o navegador.
precisa saber é o seguinte
2
@HiPerFreak A configuração frequentemente vista (especialmente para um grande número de registros A) é que o DNS distribui alguns endereços (embora não todos, geralmente para garantir que eles se encaixem em um pacote UDP de 512 bytes e não gerem despesas desnecessárias) , geralmente em uma ordem de mudança.
-
Eu estava pensando em 2 ou 3 IPs.
precisa saber é o seguinte
@ HiPerFreak: Eu só queria dizer que você está certo, pois um servidor DNS distribui todos os registros A quando consultado por um nome, se houver vários registros A para esse nome. Eu tenho um servidor DNS e fiz uma captura de pacote com o Wireshark enquanto fazia ping no nome do host para confirmar. Obrigado - eu aprendi alguma coisa hoje! :)
Ryan Ries
2

Veja esta minha pergunta (e resposta): Como os navegadores lidam com vários IPs .

O DNS de rodízio rapidamente não melhora a disponibilidade. O navegador escolhe um IP e adere a ele, mesmo que ele não responda. (Verificado com FF e chrome).

Depois que o cache do DNS do navegador expira, o nome do host é resolvido novamente e o processo é repetido, independentemente de o IP responder ou não.

Para HA básica, você pode usar DNS dinâmico ou várias abordagens baseadas em IP.

Edição: esse comportamento ocorrerá quando host inacessível atua como um "buraco negro". Se, em vez disso, o host recusar ativamente as conexões recebidas, o navegador tentará um ip, será recusado e imediatamente usará outro ip e, portanto, fará o failover muito bem.

Sandman4
fonte
2
Talvez isso tenha mudado nos últimos anos, mas posso confirmar que, após várias atualizações no Firefox, o IP realmente muda, embora não com muita frequência. Possivelmente esta resposta está desatualizada?
Yeti
Minha pesquisa (de 2015) é que Chrome, Firefox e MSIE NÃO se comportam como Sandman4 descreve. O MSIE é notavelmente diferente, pois requer um tempo limite completo do TCP antes de tentar uma conexão com o próximo endereço listado, se o primeiro falhar.
symcbean
0

Eles alternam os IPs, não é uma solução de failover.

Os navegadores permitem que o sistema operacional execute a resolução de nomes e, por exemplo, o Linux sempre seleciona aleatoriamente os endereços IP, tente hospedar google.com várias vezes. Os IPs virão em ordem aleatória.

Pedra
fonte
Por que eles fazem isso aleatoriamente e sem motivo? Não faria sentido reutilizar um IP de conhecimento, desde que esteja em funcionamento?
HiPerFreak
1
É para balanceamento de carga.
Stone
@HiPerFreak Veja também: en.wikipedia.org/wiki/Round-robin_DNS
voretaq7
@HiPerFreak: A razão pela qual ele não se apega a um IP conhecido pelo trabalho é que a resolução de nomes não sabe nada sobre se esse IP funciona agora ou no passado. O navegador não adere a um único IP, porque a resolução de nomes diz para ele usar IPs diferentes. :-)
Sean Reifschneider
@ Sea: Conforme discutido na resposta ao golpe, a resolução de nomes fornece ao navegador TODOS os IPs e o navegador decide qual deles usar. E o navegador sabe quais IPs funcionaram e quais não. Portanto, este não pode ser o motivo.
precisa saber é o seguinte
0

O DNS retorna todo o IP em uma lista, mas eles alteram a ordem da lista e essa ordem não é aleatória ou muda quando 1 falha, mas sempre retornam os IPs na mesma sequência por razões de balanceamento de carga. Quando o navegador recebe a lista, suponho que ele escolha o primeiro da lista, se não for conhecido como não funcionando.

Laurent
fonte