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 backend não respondeu antes de ter decorrido o período de timeout de inatividade.
-
As listas de segurança ou os grupos de segurança de rede da sub-rede ou da VNIC não permitiram o 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. A Oracle recomenda 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 houver regras, o tráfego não será permitido.
-
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 backends estão na mesma sub-rede.
A Oracle recomenda que você use o serviço Logging do Oracle Cloud Infrastructure para 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 solucionar problemas do tráfego que é processado pelo balanceador de carga e enviado a um backend. Para executar esses testes, a Oracle recomenda 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 de rede e listas de segurança. Use as seguintes ferramentas para solucionar problemas:
-
ping
Antes de usar os utilitários mais avançados listados aqui, a Oracle recomenda que você execute um teste básico deping
. Para que esse teste seja bem-sucedido, permita o tráfego ICMP entre a instância de teste e o 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 que contenha "Host de Destino Inacessível" indica que o sistema não existe.
O recebimento de nenhuma mensagem indica que o sistema existe, mas o protocolo ICMP não é permitido. 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 exemplo a seguir mostra como usar
curl
para estabelecer conexão com um backend que está 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 backend não tem permissões de arquivo locais configuradas corretamente para a página Verificação de integridade. -
O exemplo a seguir mostra como usar
curl
para estabelecer conexão com um backend que está 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 backend que existe, e um grupo de segurança de rede, as listas de segurança ou um firewall local está 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 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.
-
-
Tcpdump
Use o utilitário
tcpdump
para capturar todo o tráfego para um backend a fim de garantir qual tráfego está vindo de um balanceador de carga e qual está sendo retornado a ele.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 e solucionar problemas de SSL entre a instância do balanceador de carga e os servidores de backend, a Oracle recomenda 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 força o cliente e o servidor a usar uma suíte de cifragem específica e ajuda a descartar se o backend está permitindo cifragens 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, endereço IP e porta devem estar no modo listen. Se a porta do aplicativo no servidor de backend não estiver no modo listen, a porta TCP do aplicativo não estará 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.