DNS Round Robin: Os navegadores aderem a um IP enquanto ele estiver on-line?

12

Como a maioria dos navegadores se comporta se obtiver vários registros A do servidor DNS? Será que o pau para um IP, enquanto é alcançável (e só usar outro, se o IP está em baixo)? Ou eles mudam o tempo todo sem motivo?

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

    
por HiPerFreak 14.01.2012 / 21:28

5 respostas

5

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

Google Chrome

O Google Chrome (v58 usado) solicitará todas as entradas de host de um endereço (A, AAAA, CNAME) e as colocará em uma matriz ( address_list ). O Chrome tentará então abrir um soquete em cada endereço IP em ordem do primeiro ao último, o chrome não tentará o IP mais rápido ou mais próximo, ele assume que o primeiro IP (fornecido pelos seus resolvedores de dns upstream) é o melhor IP. Em meus testes, bind e windows dns servers dão 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 em chrome://net-internals/#events&q=type:SOCKET%20is:active

Curl (libcurl / 7.54.0)

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

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 estava sticky , eles seguiram o TTL dado no DNS e uma vez que ttl expirou (o chrome mantém isso internamente, pergunta o curl em cada solicitação ), a seleção ip é realizada a cada vez, conforme descrito acima.

O que isso significa? O DNS-RR está ok para alguns sistemas, mas não foi projetado para failover. Você deve esperar que todos os resultados da procura de DNS sejam (uma fonte de verdade) válidos e estejam 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, uma vez que haja infraestrutura suficiente disponível para teste.

Eu especulo que essas mudanças são um efeito colateral do IPv6-Fallback RFC Olhos Felizes

Atualizar Uma consideração útil, o DNS RR pode apenas ajudar com o balanceamento de carga, não com falhas no aplicativo, se um de seus nós tiver um 503, você servirá 40-60% se seu tráfego for 503s. A suposição é feita de que todos os IPs listados são terminais de trabalho válidos se alcançável

    
por 26.05.2017 / 15:47
2

edit: Editando minha resposta desde que a HiPerFreak me ensinou.

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

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, já que se um dos hosts na rotação round robin cair, o servidor DNS não será o mais sábio e ainda colocará o endereço IP do nó na lista.

    
por 14.01.2012 / 22:07
2

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

O dns de curta duração 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).

Quando o cache de DNS do navegador expirar, o nome do host será resolvido novamente e o processo será repetido, independentemente de o IP ter respondido ou não.

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

EDIT: Este comportamento ocorrerá quando host inacessível atua como um "buraco negro". Se, em vez disso, o host recusar conexões de entrada, o navegador tentará um ip, recusará e usará imediatamente outro ip e, assim, o failover será muito bem.

    
por 16.01.2012 / 22:06
0

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

Os navegadores permitem que o sistema operacional faça a resolução de nomes e, para fins de análise, o Linux sempre randomiza os endereços IP, tente host google.com várias vezes. Os IPs virão em ordem aleatória.

    
por 14.01.2012 / 21:41
0

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

    
por 15.01.2012 / 19:18