Estamos tentando executar uma configuração bastante direta no Amazon EC2 - vários servidores HTTP sentados atrás de um ELB (Amazon Elastic Load Balancer).
Nosso domínio é gerenciado no Route53 e temos um registro CNAME configurado para apontar para o ELB.
Ocorremos alguns problemas em que alguns - mas não todos - locais não conseguem intermitentemente se conectar ao balanceador de carga; parece que essa pode ser a resolução do nome de domínio do ELB.
O suporte da Amazon nos informou que o IP Elastic subjacente do balanceador de carga está mudando e que o problema é que alguns servidores DNS de ISPs não respeitam o TTL. Não estamos satisfeitos com esta explicação, porque replicamos o problema usando os servidores DNS da Amazon a partir de uma instância do EC2, bem como ISPs locais na Austrália e através do servidor DNS do Google ( 8.8.8.8
).
A Amazon também confirmou que, durante o período em que observamos o tempo de inatividade de alguns locais, o tráfego que passava pelo ELB diminuiu significativamente - portanto, o problema não está nos nossos pontos de extremidade.
Curiosamente, o domínio parece resolver o IP correto nos servidores que não podem se conectar - mas a tentativa de estabelecer uma conexão TCP falha.
Todas as instâncias anexadas ao ELB sempre foram saudáveis. São todos
Alguém sabe como podemos diagnosticar esse problema mais profundamente? Alguém mais teve esse problema com o Elastic Load Balancer?
Obrigado,
host
utilitário resolve com o mesmo endereço nos sistemas em que podemos conectar e nos quais nós não podemos.Respostas:
Encontrei essa pergunta no Google sobre como diagnosticar ELBs (Amazon Elastic Load Balancers) e quero respondê-la para qualquer pessoa como eu que tenha enfrentado esse problema sem muita orientação.
Propriedades ELB
ELBs têm algumas propriedades interessantes. Por exemplo:
NOTA: Outra propriedade interessante, mas um pouco menos pertinente, é que os ELBs não foram projetados para lidar com picos repentinos de tráfego. Eles normalmente exigem 15 minutos de tráfego intenso antes de aumentarem de escala ou podem ser pré-aquecidos mediante solicitação por meio de um tíquete de suporte
Solução de problemas de ELBs (manualmente)
Atualização: desde então, a AWS migrou todos os ELBs para usar o Route 53 para DNS. Além disso, todos os ELBs agora têm um
all.$elb_name
registro que retornará a lista completa de nós para o ELB. Por exemplo, se o seu nome ELB forelb-123456789.us-east-1.elb.amazonaws.com
, você obterá a lista completa de nós fazendo algo parecidodig all.elb-123456789.us-east-1.elb.amazonaws.com
. Para nós IPv6,all.ipv6.$elb_name
também funciona. Além disso, o Route 53 pode retornar até 4KB de dados ainda usando UDP, portanto,+tcp
pode não ser necessário usar o sinalizador.Sabendo disso, você pode solucionar um pouco sozinho. Primeiro, resolva o nome do ELB para uma lista de nós (como registros A):
O
tcp
sinalizador é sugerido, pois seu ELB pode ter muitos registros para caber dentro de um único pacote UDP. Também me disseram, mas não confirmei pessoalmente, que a Amazon exibirá apenas 6 nós, a menos que você faça umaANY
consulta. A execução deste comando fornecerá uma saída parecida com esta (aparada por questões de brevidade):Agora, para cada um dos
A
registros, use, por exemplo,curl
para testar uma conexão com o ELB. Obviamente, você também deseja isolar seu teste apenas no ELB sem conectar-se aos seus back-ends. Uma propriedade final e fato pouco conhecido sobre os ELBs:Isso significa que podemos tirar proveito desse comportamento para testar apenas se o ELB está respondendo:
Se você
HTTP/1.1 405 METHOD_NOT_ALLOWED
vir, o ELB está respondendo com sucesso. Você também pode ajustar o tempo limite da onda com valores aceitáveis para você.Solucionando problemas de ELBs usando elbping
Claro, fazer isso pode ser muito entediante, então eu criei uma ferramenta para automatizar isso chamado elbping . Está disponível como uma gema de rubi, portanto, se você tiver rubygems, poderá instalá-la simplesmente fazendo:
Agora você pode executar:
Lembre-se, se você vir
code=405
, isso significa que o ELB está respondendo.Próximos passos
Seja qual for o método escolhido, você saberá pelo menos se os nós do seu ELB estão respondendo ou não. Armado com esse conhecimento, você pode se concentrar na solução de problemas de outras partes da sua pilha ou ser capaz de apresentar à AWS um argumento bastante razoável de que algo está errado.
Espero que isto ajude!
fonte
A correção é realmente simples: use um
A
registro em vez de umCNAME
no Route53.No AWS Management Console, escolha "Um registro" e mova o botão de opção "Alias" para "Sim". Em seguida, selecione seu ELB no menu suspenso.
fonte
CNAME
registro deve ser usado. Qual seria o benefício de umA
registro / o que está mudando aqui?Existem algumas soluções em potencial que você pode tentar neste fórum de desenvolvedores da AWS. https://forums.aws.amazon.com/message.jspa?messageID=387552 .
Por exemplo:
correção potencial # 1
correção potencial # 2
Havia outras coisas para tentar nesse post, mas essas parecem ser as melhores pistas.
fonte