Carregar solicitações DNS de balanceamento

1

Eu estou querendo saber se é possível usar apenas registros DNS para o tráfego de "carga balanceada" que chega aos meus servidores de nomes.

Eu pensei em ter vários registros A por servidor de nomes, assim:

           IN NS ns1.example.com
           IN NS ns2.example.com

    ns1    IN A  10.0.0.1
    ns1    IN A  10.0.0.2
    ns2    IN A  10.0.0.1
    ns2    IN A  10.0.0.2

A idéia é que as solicitações sejam roteadas de maneira uniforme para os dois servidores, mesmo que o resolvedor sempre escolha ns1, ou se um cache de DNS intermediário esteja causando problemas.

Eu usei algo assim para meus MXs e funciona, mas não tenho certeza se funciona para os registros NSs também. Eu realmente não vejo uma razão para isso, mas eu gostaria da sua opinião.

Obrigado.

EDITAR

Para ser claro, não estou procurando uma solução perfeita de balanceamento de carga aqui, e estou ciente de que um cliente terá que tentar novamente no segundo NS, se o primeiro estiver inativo.

Eu simplesmente gostaria de ter uma repartição de largura de banda igual em cada servidor, não porque um esteja sobrecarregado, mas porque eu tenho um limite de tráfego em cada um desses servidores, portanto, gostaria de evitar que 90% dos pedidos fossem ns1 e o resto para ns2.

    
por Vincent Rischmann 30.05.2013 / 13:58

5 respostas

4

O DNS já está com carga balanceada

O DNS (na maioria dos casos) é inerentemente balanceado por um dos dois mecanismos.

Registros NS são retornados em ordem aleatória

A maioria dos servidores DNS retornará as consultas do NS em ordem aleatória.

Observe as duas perguntas abaixo. Veja como em uma consulta subsequente, a ordem dos servidores de nomes é alterada.

dig @8.8.8.8 NS serverfault.com


;; ANSWER SECTION:
serverfault.com.        300     IN      NS      ns1.serverfault.com.
serverfault.com.        300     IN      NS      ns3.serverfault.com.
serverfault.com.        300     IN      NS      ns4.serverfault.com.
serverfault.com.        300     IN      NS      ns2.serverfault.com.



;; ANSWER SECTION:
serverfault.com.        300     IN      NS      ns2.serverfault.com.
serverfault.com.        300     IN      NS      ns3.serverfault.com.
serverfault.com.        300     IN      NS      ns1.serverfault.com.
serverfault.com.        300     IN      NS      ns4.serverfault.com.

Comportamento do resolvedor de DNS

A maioria dos resolvedores de DNS irá escolher o primeiro servidor de nomes na lista e consultá-lo. Alguns escolherão um servidor de nomes aleatoriamente.

Em ambos os casos, se o seu servidor DNS estiver randomizando seus registros NS, o tráfego deverá ser balanceado.

Carregar DNS balanceado

No seu caso, você está apontando NS1 / NS2 para os mesmos IPs. Não há necessidade disso. No entanto, se você tivesse.

ns1.domain.com 10.0.0.1
ns1.domain.com 10.0.0.2
ns2.domain.com 10.0.0.3
ns2.domain.com 10.0.0.4

Você não estaria dividindo tráfego para o NS1 em dois servidores. Isso espalharia as solicitações de NS1 pelos dois servidores. Antes dos provedores de DNS começarem a usar abordagens anycast, essa era e é uma técnica popular.

(Observe que há algumas alterações no IPv6.
Consulte o link )

    
por 30.05.2013 / 22:06
0

O conceito de um registro A para muitos endereços IP é chamado de "Round Robin DNS". Existe há muito tempo.

Não é um método garantido de distribuir uniformemente seu tráfego, e há muitas outras maneiras de configurar o DNS para balanceamento de carga ou alta disponibilidade, ou ambos, mas você certamente não pode superar o round robin por simplicidade.

No entanto, tanto quanto eu entendo resolvedores, um cliente sempre escolhe o NS que responde mais rápido. A menos que você consiga colocar lógica ou geograficamente cada NS para ser mais rápido para ~ 50% dos seus clientes, então um NS será favorecido sobre o outro.

    
por 30.05.2013 / 14:21
0

Eu o evitaria, pois não há como indicar que um servidor está ativo ou inativo, portanto, se 10.0.0.1 estiver inativo, isso significa que cerca de 50% das solicitações enviadas ao seu servidor falharão na primeira vez e precisa ser repetida, o que afetará negativamente qualquer coisa usando o DNS. BillThor e suprjami já apontaram que os servidores mais responsivos acabarão com mais tráfego, e isso pode muito bem significar que você precisa ajustar as coisas manualmente para equilibrá-lo.

O balanceamento de carga adequado leva em conta o estado das máquinas que executam o trabalho, a quantidade de trabalho que estão realizando e, com frequência, pode fazer alterações transparentes para ajustar a situação sem a necessidade de sua intervenção.

    
por 30.05.2013 / 15:48
0

Existem (basicamente) dois tipos de tráfego DNS que um servidor DNS pode receber. Tecnicamente é recursivo e não-recursivo , mas uma maneira mais fácil de pensar nele é cliente e outros servidores . Os clientes podem procurar qualquer coisa na internet, esperando que seu servidor DNS aja como um servidor e descubra as informações para eles. Outros servidores só perguntarão aos servidores DNS por domínios que você está listado como autoritativo.

Para outros servidores , você só precisa listar vários registros NS para o seu domínio (na zona e com o registrador DNS), e outros servidores na Internet escolherão aleatoriamente qual de seus servidores para usar. Eles podem até preferir o servidor mais rápido ou mais próximo. Certifique-se de que esses servidores realmente tenham cópias autoritativas de sua zona que são replicadas corretamente do mestre, é claro. Não tenho certeza se vários registros A por trás dos registros NS funcionarão, mas você conseguirá o que deseja simplesmente listando 4 registros NS.

Para clientes , eles não usam o DNS para procurar o servidor DNS a ser usado. Isso não seria possível, pois introduziria uma dependência circular (pesquisas de DNS dependendo das pesquisas de DNS). A configuração do cliente é geralmente bastante simples, com uma lista (curta) de IPs que são tentados na mesma sequência para cada consulta de DNS. O nome de domínio do servidor DNS não é usado pelos clientes. Se você quiser balancear a carga do DNS para clientes , precisará usar algum tipo de balanceador de carga real. Certifique-se de balancear a carga tanto no UDP quanto no TCP, pois ambos são necessários para que o DNS funcione de forma confiável.

    
por 31.05.2013 / 01:21
0

O tráfego DNS já está com carga balanceada (e armazenada em cache). Adicionar registros A adicionais aumentará a carga em todos os servidores de nomes, pois eles precisarão fornecer os endereços adicionais.

Se um de seus servidores de nomes estiver sobrecarregado, mas o outro não for a configuração do servidor ou a configuração da rede. Se um servidor estiver inacessível, o tráfego será transferido para outro causando um desequilíbrio de carga.

Além disso, verifique seus valores de TTL para garantir que os servidores possam armazenar seus dados em cache por um período de tempo razoável. Na maioria dos casos, seus dados devem ser armazenados por horas ou dias. Reduza o TTL e tome a carga se um endereço estiver mudando.

Verifique também se o seu servidor não pode ser usado para amplificação de DNS. Da Internet, ele deve responder apenas a consultas para as quais é autoritativo. Isso poderia usar sua largura de banda rapidamente sem fornecer o serviço pretendido.

EDIT: Se você quiser reduzir o tráfego para seus servidores, adicione secundárias em redes diferentes. Várias organizações fornecem serviços DNS secundários. O tráfego se espalha por mais servidores usando o agendamento de round robin.

    
por 30.05.2013 / 15:36