Ho un servizio distribuito su Amazon Web Services (AWS), in particolare 2 istanze dietro un Elastic Load Balancer (ELB). Le zone di disponibilità sono selezionate come tutte e tre us-west-2a, b, c ma solo 2 delle 3 zone precedenti hanno istanze in esecuzione al suo interno.Errori HTTP 504 restituiti da ELB anche quando gli host sono in buona salute e in grado di servire la richiesta
Il problema è che anche se il traffico/carico non è troppo alto, tuttavia ricevo ancora errori HTTP 504 da ELB abbastanza spesso.
Le linee di registro legge come questa
-1 -1 -1 504 0 0 0
Al fine, --request_processing_time --backend_processing_time --response_processing_time --elb_status_code --backend_status_code --received_bytes --sent_bytes. Description of what each field and response means can be found here
Il tempo di attesa minimo ELB è 60 secondi. KeepAlive
è 'On' su istanze di back-end. La latenza delle richieste da parte di ELB è sotto controllo. Ho provato ad aumentare KeepAliveTimeout
ma senza successo.
Qualcuno ha qualche idea su come procedere? Non conosco nemmeno la causa principale di questo problema.
PS: Più come una seconda domanda, ci sono alcuni casi (molto meno di 504 restituiti da ELB quando il backend non accetta nemmeno la richiesta) dove anche il backend sta restituendo un 504 e poi ELB sta inoltrando lo stesso a cliente. Per quanto ne so, HTTP 504 dovrebbe essere restituito da un proxy solo quando il back-end sta scadendo. Come può un server stesso restituire un 504?
Puoi condividere le metriche del cloudwatch disponibili su ELB? Inoltre, puoi condividere il tipo di assistenza sanitaria ELB che hai a disposizione e quante istanze sono disponibili su ELB? – Shibashis
Hai 'MaxRequestsPerChild' configurato nell'istanza di _e.g._ Apache?Se la connessione persistente dell'ELB a un'istanza di backend viene interrotta proprio come l'ELB sta usando quella connessione per una richiesta dal client frontend, anche questo può comportare un HTTP 504 visto dal client. – Castaglia
@Shibashis 2 istanze sono allegate a ELB come menzionato nella domanda. È abilitato il monitoraggio dettagliato che arresta Backend_5xx, ELB_5xx, Latenza, HealthyHosts, RequestCount e così via. Healthcheck è una semplice chiamata HTTP con timeout di 5 secondi e frequenza di 10 secondi. – Harshdeep