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.
- 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
- Controllare l'applicazione accedendo direttamente dal server backend. Controllare i log degli accessi per determinare se è possibile accedere all'applicazione e se funziona correttamente.
- 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.
- 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 daiptables
sudo firewall-cmd --list-all
elenca tutte le regole firewall applicate dafirewalld
- 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.
- pingPrima 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 errore403 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 errore404 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.
- L'esempio riportato di seguito mostra l'uso della utility
- 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.