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:

  1. 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

  2. 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.

  3. 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.

  4. 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 pelo iptables

    sudo firewall-cmd --list-all lista todas as regras de firewall impostas pelo firewalld

  5. 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 de ping. 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 erro 403 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 erro 404 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.