Servidores DNS de balanceamento de carga: UDP / TCP

10

Me pediram para reconstruir nossa infraestrutura de balanceamento de carga no data center.

A solicitação original era carregar servidores FTP com equilíbrio. Tentei fazer isso usando o balanceador de carga atual ( Piranha / LVS), mas não o coloquei em funcionamento. Não apenas porque há pouca ou nenhuma documentação para este software. Como isso Piranhaé considerado obsoleto, passei HAProxyalguns dias tentando, o que fez o trabalho em uma fração do tempo gasto Piranha.

Então, eu tenho o balanceamento de carga FTP (modo passivo) em vigor. Agora, me pediram para substituir todo o Piranha Load Balancer no data center. Na configuração atual do Piranha, temos vários servidores web, servidores IIS .... um e um DNS .

Não, aqui está o problema:
HAProxyparece ser um LB comumente usado, mas não é capaz de lidarUDP load balancing . É uma chatice, já que gosto de como HAProxyfunciona. Então pesquisei bastante no Google e me deparei com várias coisas. A maioria das pessoas parece usar LVScomo LB para DNS (TCP / UDP). Alguns usam dlbDNS, alguns usam lbnamede alguns usam netfilter / iptables.

Como eu gostaria de ficar com os HAProxyservidores FTP, HTTP e IIS, fiquei confuso ao usá-lo lado a lado LVS.

Requisitos:
2 instâncias LB com failover
2 servidores DNS (já existentes) com failover
Vários servidores back-end (http, aplicativo, etc ...)

Perguntas:
Isso é possível? O balanceamento de carga UDP nos servidores DNS é necessário? Existe algum tipo de recurso que possa me mostrar como começar com isso? Ou existe uma solução LB capaz de lidar não apenas com TCP / HTTP, mas também com balanceamento de carga UDP?

PS: A solução LB deve ser sem hardware e de código aberto / licença GPL / livre de custos.

Qualquer ajuda ou orientação para os respectivos recursos é muito apreciada!

Mosh Pit
fonte
Verifique Nginx nginx.com/blog/announcing-udp-load-balancing isso parece resolver a sua pergunta DNS
user433519

Respostas:

15

Não balance o seu DNS.

É um protocolo incrivelmente leve - você precisaria de uma quantidade enorme de tráfego para precisar de mais de uma caixa (nesse caso, você estará apenas afunilando o seu balanceador de carga de qualquer maneira), e há resiliência incorporada porque você pode usar vários registros NS na sua delegação (outros servidores serão usados ​​se alguém estiver inativo).

Shane Madden
fonte
Definitivamente, use os vários registros NS, pois o TCP se torna mais comum para o DNS, apenas permitindo o balanceamento de carga. Reinventar a roda é doloroso por uma razão.
Cpt_fink
Vários servidores DNS oferecem redundância e evitam falhas totais, mas um servidor DNS inativo ainda causaria atrasos na resolução de nomes.
200_success
Ok, faz sentido para mim. O problema é que eu ainda precisaria de um IP virtual para fins de failover se não me engano, porque teremos 2 máquinas que conterão o HAProxy e o LVS para roteamento. Como eu abordaria isso?
Mosh Pit
2
@MoshPit vrrpd ou keepalived são boas opções.
Shane Madden
Suponho que você esteja falando sobre uma configuração Active - Active Hot Standby, correto?
Mosh Pit
11

Fico desconfortável com estas perguntas e respostas, porque ainda não foi estabelecido que tipo de servidor DNS você está falando. Existem alguns conceitos errôneos significativos quando se trata da resiliência do DNS recursivo e é importante que as pessoas que navegam pelos mecanismos de pesquisa não se afastem dessa discussão com uma falsa sensação de segurança.

  • DNS autoritativo : para servidores DNS autoritativos, o conhecimento comum sobre a resiliência do DNS é bastante claro. Contanto que você tenha vários servidores DNS autoritativos com redundância geográfica, você estará bem. O principal motivo para adicionar alta disponibilidade para IPs individuais é se você estiver hospedando muitas zonas autorizadas. Isso permite que você aumente seu número de servidores sem precisar alterar as configurações do registrador para cada domínio hospedado.

  • DNS recursivo : sempre use algum tipo de solução de alta disponibilidade. (BGP, dispositivo, etc.) É aqui que você pode ter problemas sérios. Todas as bibliotecas do resolvedor não são criadas da mesma forma: os clientes DNS do Windows arredondam o robin no servidor inicial usado entre as consultas, mas a maioria dos sistemas baseados em Unix sempre percorre a lista seqüencialmente. O que é ainda menos conhecido é que essas bibliotecas Unix terão que atingir o tempo limite em todas as combinações de domínios de pesquisa antes de passar para o próximo servidor. Se você tiver vários domínios de pesquisa configurados e o primeiro servidor na ordem de pesquisa do resolvedor estiver inoperante, isso poderá criar atrasos significativos na resolução do DNS para cada solicitação: mais do que suficiente para causar problemas em seus aplicativos críticos.

Quando se trata de DNS recursivo, lembre-se de que a infraestrutura do servidor é tão resistente quanto a configuração do cliente mais desafiadora. À medida que sua empresa cresce, isso é algo sobre o qual você nunca tem controle. Não faça nenhuma suposição de design com base em um ambiente de sistema operacional de servidor homogêneo, pois as coisas raramente permanecem as mesmas em uma empresa em crescimento. Isso definitivamente vai morder alguém, se você não planejar com antecedência.

Andrew B
fonte
Até agora, estamos usando o bind / nomeado como um serviço DNS.
Mosh Pit
Bom ponto - eu estava assumindo autoridade na minha resposta, mas você está certo, pode ser um recursor.
Shane Madden
1
@MoshPit Seu comentário sobre "serviço DNS" não esclareceu se isso era recursivo ou autoritário. Autoritativo é quando você está hospedando domínios. Recursivo é algo que você usaria para obter o endereço IP de domínios que não hospeda. Os servidores que fazem os dois são "mistos", o que é contra as práticas recomendadas de segurança.
Andrew B
1
Peço desculpas por isso, notei que quando você postou esse comentário. Estamos no controle de nossos próprios servidores DNS, e esses são autorizados.
Mosh Pit 24/02
Não use um balanceador de carga para alta disponibilidade.
womble
2

Hoje em dia você pode usar o dnsdistPowerDNS

Do README

O dnsdist é um balanceador de carga altamente sensível a DNS, DoS e abuso. Seu objetivo na vida é direcionar o tráfego para o melhor servidor, oferecendo desempenho superior aos usuários legítimos, evitando ou bloqueando o tráfego abusivo.

O dnsdist é dinâmico, no sentido de que sua configuração pode ser alterada em tempo de execução e que suas estatísticas podem ser consultadas a partir de uma interface semelhante ao console.

https://github.com/PowerDNS/pdns/tree/master/pdns/dnsdistdist

Eles fornecem repositórios para sistemas operacionais comuns: https://repo.powerdns.com/

Boden Garman
fonte