AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 774385
Accepted
Naftuli Kay
Naftuli Kay
Asked: 2016-05-03 11:34:05 +0800 CST2016-05-03 11:34:05 +0800 CST 2016-05-03 11:34:05 +0800 CST

Os clientes geralmente implementam failover/balanceamento de carga em vários registros A?

  • 772

Normalmente, balanceadores de carga como os Elastic Load Balancers da Amazon usam um conjunto de registros DNS com vários registros A para fornecer várias instâncias de balanceadores de carga que podem lidar com o tráfego para endpoints solicitantes:

$ dig +short my-fancy-elb.us-east-1.elb.amazonaws.com
10.0.1.1
10.0.1.2

Se eu tentar enrolar este URL no modo detalhado, noto que curlparece tentativas de round-robin para os dois endereços IP:

$ curl -ivs http://my-fancy-elb.us-east-1.elb.amazonaws.com | grep -i 'connected'
* Connected to my-fancy-elb.us-east-1.elb.amazonaws.com (10.0.1.1)
$ curl -ivs http://my-fancy-elb.us-east-1.elb.amazonaws.com | grep -i 'connected'
* Connected to my-fancy-elb.us-east-1.elb.amazonaws.com (10.0.1.2)

O fato de curlfazer round-robin nos registros A descritos no conjunto de registros é feito pelo curlpróprio binário ou é algo que o kernel do Linux faz por ele?

O TCP existe na camada 4 e o DNS existe na camada 7, então imagino que os binários e bibliotecas individuais teriam que implementar seu próprio balanceamento de carga e failover: buscar o conjunto de registros DNS para o nome de domínio fornecido e escolher um endereço TCP para conectar a partir desse conjunto.

Posso razoavelmente esperar que linguagens de programação, navegadores e bibliotecas como curl façam balanceamento de carga e failover em registros A para mim?

domain-name-system tcp
  • 4 4 respostas
  • 2155 Views

4 respostas

  • Voted
  1. Best Answer
    Andrew B
    2016-05-03T13:24:07+08:002016-05-03T13:24:07+08:00

    A resposta curta é que varia.

    Quando vários registros de endereço estão presentes no conjunto de respostas, um servidor DNS consultado normalmente os retorna em uma ordem aleatória. O sistema operacional normalmente apresentará o conjunto de registros retornado ao aplicativo na ordem em que foram recebidos. Dito isso, existem opções em ambos os lados da transação (o servidor de nomes e o sistema operacional) que podem resultar em comportamentos diferentes. Geralmente estes não são empregados. Por exemplo, um arquivo pouco conhecido chamado /etc/gai.confcontrola isso em sistemas baseados em glibc.

    O livro Zytrax (DNS for Rocket Scientists) tem um bom resumo sobre a história deste tópico e conclui que o RFC 6724 é o padrão atual ao qual os aplicativos e as implementações de resolvedor devem aderir.

    A partir daqui, vale a pena observar uma citação de escolha da RFC 6724:

       Well-behaved applications SHOULD NOT simply use the first address
       returned from an API such as getaddrinfo() and then give up if it
       fails.  For many applications, it is appropriate to iterate through
       the list of addresses returned from getaddrinfo() until a working
       address is found.  For other applications, it might be appropriate to
       try multiple addresses in parallel (e.g., with some small delay in
       between) and use the first one to succeed.
    

    O padrão incentiva os aplicativos a não pararem no primeiro endereço em caso de falha, mas não é um requisito nem o comportamento que muitos aplicativos escritos casualmente irão implementar. Você nunca deve confiar apenas em vários registros de endereço para alta disponibilidade, a menos que tenha certeza de que a porcentagem maior (ou pelo menos a mais importante) de seus aplicativos de consumo funcionará bem. Os navegadores modernos tendem a ser bons quanto a isso, mas lembre-se de que eles não são os únicos consumidores com os quais você está lidando.

    (além disso, como @kasperd observa abaixo, é importante distinguir entre o que isso traz para você em HA versus balanceamento de carga)

    • 10
  2. Sven
    2016-05-03T11:51:04+08:002016-05-03T11:51:04+08:00

    Meu palpite é que o DNS TTL para o registro está muito baixo e curlsó precisa ser resolvido novamente todas as vezes e obterá outro IP do servidor DNS.

    Nem curlo kernel estão cientes de que esse balanceamento de carga no nível de DNS acontece e você não pode esperar algo assim.

    • 4
  3. Fedor Piecka
    2016-05-03T12:34:38+08:002016-05-03T12:34:38+08:00

    O básico é que os servidores DNS geralmente alternam os registros de maneira pseudo-aleatória.

    fedor@piecka:~$ dig +short @ns1.yahoo.com yahoo.com
    206.190.36.45
    98.138.253.109
    98.139.183.24
    fedor@piecka:~$ dig +short @ns1.yahoo.com yahoo.com
    98.139.183.24
    206.190.36.45
    98.138.253.109
    fedor@piecka:~$ dig +short @ns1.yahoo.com yahoo.com
    98.139.183.24
    98.138.253.109
    206.190.36.45
    

    No caso do curl, ele possui sua própria biblioteca de resolução de DNS que respeita a ordem de apresentação do servidor.

    Há uma história sobre este tópico em https://daniel.haxx.se/blog/2012/01/03/getaddrinfo-with-round-robin-dns-and-happy-eyeballs/ . A implementação do curl também é mencionada lá.

    • 1
  4. Danish Rizvi
    2017-01-24T17:27:09+08:002017-01-24T17:27:09+08:00

    O fato de o curl fazer rodízio nos registros A descritos no conjunto de registros é feito pelo próprio binário do curl ou é algo que o kernel do Linux faz por ele?

    Nenhum. É o servidor DNS que normalmente altera o endereço IP. A biblioteca curl precisa resolver o nome do host para obter o endereço IP de cada solicitação. Ele envia a solicitação ao servidor DNS, que envia de volta uma lista de endereços IP. O servidor DNS também pode ser local na mesma máquina para armazenamento em cache. A maior parte do servidor DNS gira o round-robin da lista de IP em cada solicitação. Assim, você obtém um IP diferente em cada solicitação, pois o IP superior da lista foi alterado. Se você executar ping em www.google.com a partir de uma máquina Linux, provavelmente verá um endereço diferente a cada vez.

    Os clientes geralmente implementam failover/balanceamento de carga em vários registros A?

    Realizei um teste com curl para buscar um arquivo em http. Curl é capaz de tentar novamente com outro IP quando o primeiro ip não está acessível (failover). Então, 'failover' está trabalhando com curl para solicitação http.

    • 1

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve