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.
domain-name-system
failover
high-availability
round-robin
HiPerFreak
fonte
fonte
Respostas:
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 no
chrome://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
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte