Lo svuotamento della connessione è un processo che garantisce che le richieste esistenti e in corso abbiano il tempo di essere completate quando un'istanza di macchina virtuale (VM) viene rimossa da un gruppo di istanze o quando un endpoint viene rimosso dai gruppi di endpoint di rete (NEG) con ambito zonale.
Le informazioni riportate in questa pagina si applicano solo ai gruppi di istanze e ai seguenti tipi di NEG con ambito zonale:
Lo svuotamento della connessione inizia ogni volta che esegui le seguenti operazioni:
- Rimuovi manualmente una VM da un gruppo di istanze.
- Rimuovi un'istanza da un gruppo di istanze gestite eseguendo una
resize(),deleteInstances(),recreateInstances(), oabandonInstances()chiamata. - Rimuovi una NIC dinamica da una VM che fa parte di un backend del gruppo di istanze.
- Rimuovi un gruppo di istanze o un NEG da un servizio di backend. Questa funzionalità non è supportata per i bilanciatori del carico di rete passthrough interni e i bilanciatori del carico di rete passthrough esterni regionali.
- Google Cloud elimina un'istanza nell'ambito della scalabilità automatica.
- Esegui un aggiornamento del gruppo di istanze gestite utilizzando lo strumento di aggiornamento del gruppo di istanze gestite.
- Rimuovi manualmente un endpoint da un NEG a livello di zona.
Lo svuotamento della connessione non si applica quando disconnetti un backend (gruppo di istanze o NEG a livello di zona) dal servizio di backend di un bilanciatore del carico.
Come funziona lo svuotamento della connessione
Per abilitare lo svuotamento della connessione, imposta un timeout per lo svuotamento della connessione nel servizio di backend. La durata del timeout deve essere compresa tra 0 e 3600 secondi, inclusi.
Potrebbero essere necessari fino a 60 secondi dopo il superamento della durata del timeout specificata prima che l'istanza venga terminata.
Di seguito è riportato un elenco di specifiche relative allo svuotamento della connessione:
Lo svuotamento della connessione è disponibile per i servizi di backend che fanno parte dei seguenti bilanciatori del carico:
- Bilanciatore del carico delle applicazioni esterno
- Bilanciatore del carico delle applicazioni interno
- Bilanciatore del carico di rete proxy esterno
- Bilanciatore del carico di rete proxy interno
- Bilanciatore del carico di rete passthrough interno
- Bilanciatore del carico di rete passthrough esterno regionale basato sui servizi di backend
Sia i bilanciatori del carico di rete passthrough interni sia i bilanciatori del carico di rete passthrough esterni regionali supportano lo svuotamento della connessione per TCP, UDP e altri protocolli non TCP.
Lo svuotamento della connessione è disponibile anche per i servizi di backend che fanno parte di Cloud Service Mesh deployment.
Quando viene impostato un timeout per lo svuotamento della connessione e un'istanza viene rimossa dal gruppo di istanze o un endpoint viene rimosso da un NEG a livello di zona, Google Cloud i bilanciatori del carico e Cloud Service Mesh si comportano nel seguente modo:
Non vengono inviate nuove connessioni all'istanza o all'endpoint rimossi.
Bilanciatori del carico delle applicazioni: per la durata specificata del timeout, le richieste esistenti alla VM o all'endpoint contrassegnati per la rimozione hanno il tempo di essere completate. Il bilanciatore del carico non invia nuove connessioni a questa VM o a questo endpoint. Una volta raggiunta la durata del timeout, il bilanciatore del carico smette di inviare tutto il traffico alla VM o all'endpoint rimossi.
Bilanciatori del carico di rete proxy: per la durata specificata del timeout, le connessioni TCP esistenti alla VM o all'endpoint contrassegnati per la rimozione continuano a funzionare durante il periodo di svuotamento della connessione configurato. Il bilanciatore del carico non invia nuove connessioni a questa VM o a questo endpoint. Una volta raggiunta la durata del timeout, le connessioni TCP esistenti alla VM o all'endpoint rimossi rimangono attive e il proxy chiude tutte le connessioni TCP esistenti entro 10 minuti, il timeout di inattività predefinito.
Bilanciatori del carico di rete passthrough: per la durata specificata del timeout per lo svuotamento della connessione, i pacchetti appartenenti alle connessioni esistenti vengono instradati alla VM o all'endpoint contrassegnati per la rimozione. Una volta raggiunta la durata del timeout, la voce conntrack per la VM o l'endpoint rimossi viene rimossa. Qualsiasi pacchetto non SYN proveniente da una connessione esistente comporta la creazione di una nuova voce conntrack per il backend integro. Quando il pacchetto viene inviato a un nuovo backend integro, il backend invia un RST al client perché non ha alcun record del pacchetto appena ricevuto. I bilanciatori del carico di rete passthrough interni ed esterni regionali non inviano un TCP-RST o TCP-FIN per terminare le connessioni esistenti dopo la scadenza del timeout per lo svuotamento della connessione.
Se abiliti lo svuotamento della connessione su più servizi di backend che condividono gli stessi gruppi di istanze o NEG, viene utilizzato il valore di timeout più elevato. Ad esempio, supponiamo che lo stesso gruppo di istanze o NEG a livello di zona sia un backend per due servizi di backend, dove un servizio di backend ha un timeout per lo svuotamento della connessione di 100 secondi e l'altro servizio di backend ha un timeout per lo svuotamento della connessione di 200 secondi. Google Cloud Utilizza 200 secondi come timeout effettivo per lo svuotamento della connessione prima di terminarli. Se il backend è un gruppo di istanze gestite, le operazioni che eliminano l'istanza vengono ritardate di almeno 200 secondi.
Se non imposti un timeout per lo svuotamento della connessione o se il timeout per lo svuotamento della connessione è impostato su zero (0), Google Cloud termina le connessioni esistenti su l'istanza o sull'endpoint rimossi il più rapidamente possibile.
Se utilizzi il pool di connessioni, potresti notare che le nuove richieste, che utilizzano una connessione stabilita in precedenza, vengono ancora ricevute sulle VM in fase di svuotamento, causando errori di connessione quando queste VM vengono eliminate.
Abilita lo svuotamento della connessione
Per abilitare lo svuotamento della connessione, completa i seguenti passaggi.
Console
Aggiorna un bilanciatore del carico
- Nella Google Cloud console, vai alla pagina Bilanciamento del carico.
Vai a Bilanciamento del carico - Nella scheda Bilanciatori del carico , fai clic su more_vert per il bilanciatore del carico che vuoi aggiornare, quindi fai clic su Modifica .
- Fai clic su Configurazione backend.
- Nel riquadro Configurazione backend, fai clic .
- Nella parte inferiore del riquadro Modifica servizio di backend, fai clic su Configurazioni avanzate.
- Nel campo Timeout per lo svuotamento della connessione, inserisci un valore compreso tra
0e3600. Un'impostazione di0disabilita lo svuotamento della connessione.
Aggiorna Cloud Service Mesh
- Nella Google Cloud console, vai alla pagina Cloud Service Mesh.
Vai a Cloud Service Mesh - Fai clic sul Nome del servizio.
- Nella pagina Dettagli servizio, fai clic su Modifica .
- Nella parte inferiore del servizio, fai clic su Configurazioni avanzate.
- Nel campo Timeout per lo svuotamento della connessione, inserisci un valore compreso tra
0e3600. Un'impostazione di0disabilita lo svuotamento della connessione. - Fai clic su Salva.
gcloud
Abilita lo svuotamento della connessione su un servizio di backend nuovo o esistente utilizzando il flag --connection-draining-timeout. Gli esempi seguenti mostrano come modificare il timeout per lo svuotamento della connessione:
Per un bilanciatore del carico globale o tra regioni esistente:
gcloud compute backend-services update BACKEND_SERVICE \ --global \ --connection-draining-timeout=CONNECTION_TIMEOUT_SECS
Per un bilanciatore del carico regionale esistente:
gcloud compute backend-services update BACKEND_SERVICE \ --region=REGION \ --connection-draining-timeout=CONNECTION_TIMEOUT_SECS
Sostituisci i segnaposto con valori validi:
BACKEND_SERVICE: il servizio di backend che stai aggiornandoREGION: se applicabile, la regione del servizio di backend che stai aggiornandoCONNECTION_TIMEOUT_SECS: il numero di secondi da attendere prima che le connessioni esistenti a istanze o endpoint vengano terminate, tra0e3600secondi, inclusi. Un'impostazione di0disabilita lo svuotamento della connessione. Il timeout per lo svuotamento della connessione si applica a tutti i backend del servizio di backend.Puoi anche utilizzare il comando
gcloud compute backend-services editper aggiornare un servizio di backend esistente.
API
Per abilitare lo svuotamento della connessione nell'API durante la creazione o l'aggiornamento di un'istanza o di un endpoint, invia una richiesta al rispettivo URI dell'API per includere il campo connectionDraining nel corpo della richiesta. Gli esempi seguenti mostrano come impostare questo attributo modificando un servizio di backend esistente. Per informazioni su altri attributi obbligatori, consulta la documentazione di ogni bilanciatore del carico.
Per un bilanciatore del carico globale o tra regioni esistente:
PATCH https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices
Per un bilanciatore del carico regionale esistente:
PATCH https://www.googleapis.com/compute/v1/projects/PROJECT_ID/region/REGION/backendServices { "name": "BACKEND_SERVICE", "connectionDraining": { "drainingTimeoutSec": CONNECTION_TIMEOUT_SECS } }Sostituisci quanto segue:
PROJECT_ID: l'ID progetto che contiene il bilanciatore del carico o il deployment di Cloud Service MeshBACKEND_SERVICE: il servizio di backend utilizzato dal bilanciatore del carico o dal deployment di Cloud Service MeshCONNECTION_TIMEOUT_SECS: il numero di secondi da attendere prima che le istanze o gli endpoint vengano rimossi dal gruppo di istanze o dal NEG, tra 0 e 3600 secondi, inclusi. Questa durata del timeout si applica a tutti i gruppi di istanze o NEG a cui fa riferimento il servizio di backend.
Passaggi successivi
Per informazioni generali sui servizi di backend, consulta la panoramica dei servizi di backend.