Risoluzione dei problemi relativi al server backend del load balancer

Informazioni sui problemi del server backend associati ai load balancer.

Debugging di un timeout del server backend

Quando il server backend supera il tempo di risposta quando risponde a una richiesta, si verifica un errore 504 che indica che il server backend è inattivo o non risponde alla richiesta inoltrata dal load balancer. L'applicazione client riceve il codice di risposta seguente: HTTP/1.1 504 Gateway Timeout.

Gli errori possono verificarsi per i seguenti motivi:

  • Il load balancer non è riuscito a stabilire una connessione al server backend prima della scadenza del timeout della connessione.
  • Il load balancer ha stabilito una connessione al server backend, ma il backend non ha risposto prima del periodo di timeout di inattività trascorso.
  • Le liste di sicurezza o i gruppi di sicurezza di rete per la subnet o la VNIC non hanno consentito il traffico dai backend al load balancer.
  • Server backend o Application Server non riuscito.

Per risolvere gli errori di timeout del server backend, attenersi alla procedura riportata di seguito.

  1. Utilizzare la utility curl per eseguire direttamente il test del server backend da un host nella stessa rete.
    curl -i http://backend_ip_address
    Se questo test richiede più di un secondo per rispondere, un problema a livello di applicazione sta causando latenza. Si consiglia di controllare tutte le dipendenze a monte che potrebbero causare latenza, tra cui:
    • Storage collegato alla rete come iSCSI o NFS
    • Latenza del database
    • Un'API fuori sede
    • Un livello applicazione
  2. Controllare l'applicazione accedendo direttamente dal server backend. Controllare i log degli accessi per determinare se è possibile accedere all'applicazione e se funziona correttamente.
  3. Se il load balancer e il server backend si trovano in subnet diverse, verificare se le liste di sicurezza contengono regole che consentono il traffico. Se non esistono regole, il traffico non è consentito.
  4. Immettere i comandi riportati di seguito per determinare se esistono regole firewall nei server backend che bloccano il traffico.

    iptables -L elenca tutte le regole firewall applicate da iptables

    sudo firewall-cmd --list-all elenca tutte le regole firewall applicate da firewalld

  5. Abilitare il log sul load balancer per determinare se il load balancer o il server backend sta causando la latenza.

Test dei server backend TCP e HTTP

In questo argomento viene descritto come risolvere i problemi relativi a una connessione al load balancer. La topologia utilizzata in questa procedura dispone di un load balancer pubblico in una subnet pubblica e i server backend si trovano nella stessa subnet.

Ti consigliamo di utilizzare il servizio Oracle Cloud Infrastructure Logging per risolvere i problemi. Vedere Dettagli per i log del load balancer.

Oltre a utilizzare il log di Oracle Cloud Infrastructure, tuttavia, puoi utilizzare altre utility elencate in questa sezione per risolvere i problemi relativi al traffico elaborato dal load balancer e inviato a un server backend. Per eseguire questi test, si consiglia di creare un'istanza nella stessa rete del load balancer e di consentire il traffico negli stessi gruppi di sicurezza di rete e liste di sicurezza. Utilizzare gli strumenti riportati di seguito per la risoluzione dei problemi.

  • ping
    Prima di utilizzare le utility più avanzate elencate qui, si consiglia di eseguire un test di base ping. Affinché questo test riesca, è necessario consentire il traffico ICMP tra l'istanza di test e il server backend.
    $ ping backend_ip_address
    La risposta deve essere simile 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 si riceve un messaggio che contiene "64 byte da...", il ping è riuscito.

    La ricezione di un messaggio contenente "Host destinazione non raggiungibile" indica che il sistema non esiste.

    La ricezione di nessun messaggio indica che il sistema esiste, ma il protocollo ICMP non è consentito. Per assicurarsi che ICMP sia consentito, controllare tutti i firewall, le liste di sicurezza e i gruppi di sicurezza di rete.

  • ricciolo

    Utilizzare la utility curl per inviare richieste HTTP a un host, una porta o un URL specifico.

    • L'esempio seguente mostra l'uso di curl per connettersi a un server backend che invia un errore 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

      Nell'esempio precedente, il controllo dello stato non riesce, restituendo un errore 403, che indica che il server backend non dispone di autorizzazioni di file locali configurate correttamente per la pagina Controllo dello stato.

    • L'esempio seguente mostra l'uso di curl per connettersi a un server backend che invia un errore 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

      Nell'esempio precedente, il controllo dello stato non riesce, restituendo un errore 404, che indica che la pagina Controllo dello stato non esiste nella posizione prevista.

    • L'esempio riportato di seguito mostra un server backend esistente e un gruppo di sicurezza di rete, le liste di sicurezza o un firewall locale stanno bloccando il traffico.
      $ curl -I backend_ip_address
      curl: (7) Failed connect to backend_ip_address:port; Connection refused
    • L'esempio seguente mostra un server backend che non esiste:
      $ curl -I backend_ip_address
      curl: (7) Failed connect to backend_ip_address:port; No route to host
  • Netcat

    Netcat è una utility di rete per la lettura e la scrittura di connessioni di rete mediante TCP o UDP.

    • L'esempio riportato di seguito mostra l'uso della utility netcat a livello TCP per garantire che il server backend di destinazione possa ricevere una connessione.
      $ nc -vz backend_ip_address port
      Ncat: Connected to backend_ip_address:port.

      Nell'esempio precedente, port è aperto per le connessioni.

    • $ nc -vn backend_ip_address port
      Ncat: Connection timed out.

      Nell'esempio precedente, port è chiuso.

  • Tcpdump

    Utilizzare la utility tcpdump per acquisire tutto il traffico verso un server backend e garantire che il traffico provenga da un load balancer e gli elementi restituiti al load balancer.

    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

    Durante la risoluzione dei problemi SSL tra l'istanza del load balancer e i server backend, si consiglia di utilizzare la utility openssl. Questa utility apre una connessione SSL a un nome host e una porta specifici e stampa il certificato SSL e altri parametri.

    Di seguito sono riportate altre opzioni per la risoluzione dei problemi.

    • -showcerts

      Questa opzione stampa tutti i certificati della catena di certificati presentati dal server backend. Utilizzare questa opzione per identificare i problemi, ad esempio il certificato di un'autorità di certificazione intermedia mancante.

    • -cipher cipher_name

      Questa opzione forza il client e il server a utilizzare una suite di cifratura specifica e consente di escludere se il server backend consente cifrature specifiche.

  • Netstat

    Utilizzare il comando netstat -natp per assicurarsi che l'applicazione in esecuzione sul server backend sia attiva e in esecuzione. Per il traffico TCP o HTTP, l'applicazione backend, l'indirizzo IP e la porta devono essere tutti in modalità listen. Se la porta dell'applicazione sul server backend non è in modalità listen, la porta TCP dell'applicazione non è attiva.

    Per risolvere questo problema, assicurarsi che l'applicazione sia attiva e in esecuzione riavviando l'applicazione o il server backend.