Diagnosticando e Solucionando Problemas do Servidor de Backend do Balanceador de Carga
Saiba mais sobre problemas do servidor de backend associados aos balanceadores de carga.
Depurando um Timeout do Servidor de Backend
Quando o servidor de backend excede o tempo de resposta ao responder a uma solicitação, um erro 504 ocorre indicando que o servidor de backend está inativo ou não está respondendo à solicitação encaminhada pelo balanceador de carga. O aplicativo cliente recebe o seguinte código de resposta: HTTP/1.1 504 Gateway Timeout
.
Podem ocorrer erros pelos seguintes motivos:
- O balanceador de carga falhou ao estabelecer uma conexão com o servidor de backend antes da expiração do timeout da conexão.
- O balanceador de carga estabeleceu uma conexão com o servidor de backend, mas o back-end não respondeu antes do período de timeout de inatividade decorrido.
- As listas de segurança ou os grupos de segurança da rede para a sub-rede ou a VNIC Não permitiram tráfego dos backends para o balanceador de carga.
- Falha no servidor de backend ou no servidor de aplicativos.
Siga estas etapas para diagnosticar e solucionar os erros de timeout do servidor de backend:
- Use o utilitário
curl
para testar diretamente o servidor de backend de um host na mesma rede.curl -i http://backend_ip_address
Se esse teste levar mais de um segundo para responder, um problema no nível do aplicativo estará causando latência. Recomendamos que você verifique quaisquer dependências upstream que possam causar latência, incluindo:- Armazenamento conectado à rede, como iSCSI ou NFS
- Latência do banco de dados
- Uma API off-promise
- Uma camada de aplicativos
- Verifique o aplicativo acessando-o diretamente no servidor de backend. Verifique seus logs de acesso para determinar se o aplicativo pode ser acessado e está funcionando corretamente.
- Se o balanceador de carga e o servidor de backend estiverem em sub-redes diferentes, verifique se as listas de segurança contêm regras para permitir o tráfego. Se não existirem regras, o tráfego será proibido.
- Informe os seguintes comandos para determinar se existem regras de firewall nos servidores de backend que bloqueiam o tráfego:
iptables -L
lista todas as regras de firewall impostas peloiptables
sudo firewall-cmd --list-all
lista todas as regras de firewall impostas pelofirewalld
- Ative o registro em log no balanceador de carga para determinar se o balanceador de carga ou o servidor de backend está causando a latência.
Testando Servidores de Backend TCP e HTTP
Este tópico descreve como solucionar problemas de uma conexão do balanceador de carga. A topologia usada neste procedimento tem um balanceador de carga público em uma sub-rede pública e os servidores de back-end estão na mesma sub-rede.
Recomendamos que você use o serviço Oracle Cloud Infrastructure Logging para diagnosticar e solucionar problemas. (Consulte Detalhes dos Logs do Balanceador de Carga.)
Além de usar o registro em log do Oracle Cloud Infrastructure, no entanto, você pode usar outros utilitários listados nesta seção para diagnosticar e solucionar problemas do tráfego que o balanceador de carga processa e envia para um servidor de back-end. Para executar esses testes, Recomendamos que você crie uma instância na mesma rede do seu balanceador de carga e permita o tráfego nos mesmos grupos de segurança e listas de segurança. Use as seguintes ferramentas para solucionar problemas:
- pingAntes de usar os utilitários mais avançados listados aqui, Recomendamos que você execute um teste
ping
básico. Para esse teste ser bem-sucedido, você deve permitir o tráfego ICMP entre a instância de teste e o servidor de backend.$ ping backend_ip_address
A resposta deverá ser semelhante a:PING 192.0.2.2 (192.0.2.2) 56(84) bytes of data. 64 bytes from 192.0.2.2: icmp_seq=1 ttl=64 time=0.028 ms 64 bytes from 192.0.2.2: icmp_seq=2 ttl=64 time=0.044 ms
Se você receber uma mensagem contendo "64 bytes from...", o ping foi bem-sucedido.
O recebimento de uma mensagem contendo "Host de Destino Inacessível" indica que o sistema ainda não existe.
O recebimento de nenhuma mensagem indica que o sistema existe, mas não é permitido o protocolo ICMP. Verifique todos os firewalls, listas de segurança e grupos de segurança de rede para garantir que o ICMP seja permitido.
- dobra
Use o utilitário
curl
para enviar solicitações HTTP a um host, porta ou URL específico.-
O seguinte exemplo mostra como usar
curl
para estabelecer conexão com um servidor de backend que esteja enviando um erro403 Forbidden
:$ curl -I http://backend_ip_address/health HTTP/1.1 403 Forbidden Date: Tue, 17 Mar 2021 17:47:10 GMT Content-Type: text/html; charset=UTF-8 Content-Length: 3539 Connection: keep-alive Last-Modified: Tue, 10 Mar 2021 20:33:28 GMT ETag: "dd3-5b3c6975e7600" Accept-Ranges: bytes
No exemplo anterior, a verificação de Integridade falha, retornando um erro
403
, indicando que o servidor de back-end não tem permissões locais de arquivo configuradas corretamente para a página Verificação de Integridade. - O seguinte exemplo mostra como usar
curl
para estabelecer conexão com um servidor de backend que esteja enviando um erro404 Not Found
:$ curl -I http://backend_ip_address/health HTTP/1.1 404 Not Found Date: Tue, 17 Mar 2021 17:47:10 GMT Content-Type: text/html; charset=UTF-8 Content-Length: 3539 Connection: keep-alive Last-Modified: Tue, 10 Mar 2021 20:33:28 GMT ETag: "dd3-5b3c6975e7600" Accept-Ranges: bytes
No exemplo anterior, a verificação de integridade falha, retornando um erro
404
, indicando que a página Verificação de integridade não existe no local esperado. - O exemplo a seguir mostra um servidor de backend que existe e um grupo, as listas e um firewall local estão bloqueando o tráfego:
$ curl -I backend_ip_address curl: (7) Failed connect to backend_ip_address:port; Connection refused
- O exemplo a seguir mostra um servidor de backend que não existe:
$ curl -I backend_ip_address curl: (7) Failed connect to backend_ip_address:port; No route to host
-
- Netcat
O Netcat é um utilitário de rede para leitura e gravação em conexões de rede usando TCP ou UDP.
- O exemplo a seguir mostra o uso do utilitário
netcat
no nível TCP para garantir que o servidor de backend de destino possa receber uma conexão:$ nc -vz backend_ip_address port Ncat: Connected to backend_ip_address:port.
No exemplo anterior,
port
está aberto para conexões. -
$ nc -vn backend_ip_address port Ncat: Connection timed out.
No exemplo anterior,
port
está fechado.
- O exemplo a seguir mostra o uso do utilitário
- Tcpdump
Use o utilitário
tcpdump
para capturar todo tráfego de um servidor de backend para garantir qual tráfego está vindo de um balanceador e o que está sendo retornado ao balanceador.sudo tcpdump -i any -A port port src load_balancer_ip_address 11:25:54.799014 IP 192.0.2.224.39224 > 192.0.2.224.80: Flags [P.], seq 1458768667:1458770008, ack 2440130792, win 704, options [nop,nop,TS val 461552632 ecr 208900561], length 1341: HTTP: POST /health HTTP/1.1
- OpenSSL
Ao diagnosticar/solucionar problemas SSL entre a instância da balanceadora de carga e os servidores de backend, Recomendamos o uso do utilitário
openssl
. Este utilitário abre uma conexão SSL com um nome de host e uma porta específicos e imprime o certificado SSL e outros parâmetros.Outras opções para solucionar problemas são:
-showcerts
Essa opção imprime todos os certificados na cadeia de certificados apresentada pelo servidor de backend. Use esta opção para identificar problemas, como um certificado de autoridade de certificado intermediário ausente.
-cipher cipher_name
Essa opção impõe ao cliente e ao servidor o uso de um conjunto de cifras específico e ajuda a descartar se o servidor de backend está permitindo cifras específicas.
- Netstat
Use o comando
netstat -natp
para garantir que o aplicativo em execução no servidor de backend esteja ativo e em execução. Para tráfego TCP ou HTTP, o aplicativo de backend, o endereço IP e a porta devem estar no modo ouvido. Se a porta do aplicativo no servidor de backend não está no modo ouvir, a porta TCP do aplicativo não está ativa.Para resolver esse problema, certifique-se de que o aplicativo esteja ativo e em execução reiniciando o aplicativo ou o servidor de backend.