Questo tutorial interattivo mostra come utilizzare la riparazione automatica per creare app altamente disponibili su Compute Engine.
Le app a disponibilità elevata sono progettate per servire i client con latenza e tempi di inattività minimi. La disponibilità è compromessa quando un'app si arresta in modo anomalo o si blocca. I client di un'app compromessa possono riscontrare latenza elevata o tempo di riposo.
La riparazione automatica ti consente di riavviare automaticamente le app compromesse. Rileva tempestivamente le istanze di macchine virtuali (VM) non riuscite e le ricrea automaticamente, in modo che i client possano essere nuovamente serviti. Con la riparazione automatica, non è più necessario reintegrare manualmente un'app in servizio dopo un errore.
Obiettivi
- Configura un controllo di integrità e un criterio di riparazione automatica.
- Configura un servizio web di prova su un gruppo di istanze gestite (MIG).
- Simula gli errori controllo di integrità e osserva il processo di ripristino della riparazione automatica.
Costi
Questo tutorial utilizza i componenti fatturabili di Google Cloud, tra cui:- Compute Engine
Prima di iniziare
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Make sure that billing is enabled for your Google Cloud project.
Enable the Compute Engine API.
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Make sure that billing is enabled for your Google Cloud project.
Enable the Compute Engine API.
Se preferisci lavorare dalla riga di comando, installa Google Cloud CLI.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
Architettura dell'app
L'app include i seguenti componenti Compute Engine:
- Controllo di integrità: un criterio di controllo di integrità HTTP utilizzato dall'autohealer per rilevare le VM non riuscite.
- Regole firewall: le regole firewall di Google Cloud ti consentono di consentire o negare il traffico verso le tue VM.
- Gruppo di istanze gestite: un gruppo di VM che eseguono lo stesso servizio web demo.
- Modello di istanza: un modello utilizzato per creare ogni VM nel gruppo di istanze.
Come il controllo di integrità esegue sondaggi sul web service di prova
Un controllo di integrità invia richieste di probe a una VM utilizzando un protocollo specificato, come HTTP(S), SSL o TCP. Per ulteriori informazioni, consulta come funzionano i controlli di integrità e protocolli, porte e categorie per i controlli di integrità.
Il controllo di integrità in questo tutorial è un controllo di integrità HTTP che esegue sondaggi sul percorso HTTP /health
sulla porta 80. Per un controllo di integrità HTTP, la richiesta di prova viene passata solo se il percorso restituisce una risposta HTTP 200 (OK)
. Per questo tutorial, il
server web di esempio definisce il percorso /health
per restituire una risposta HTTP 200 (OK)
quando è in stato normale o una risposta HTTP 500 (Internal Server Error)
quando è in stato anomalo.
Per saperne di più, consulta
i criteri di esito positivo per HTTP, HTTPS e HTTP/2.
Crea il controllo di integrità
Per configurare la riparazione automatica, crea un controllo di integrità personalizzato e configura il firewall di rete per consentire i probe del controllo di integrità.
In questo tutorial viene creato un controllo di integrità a livello di regione. Per la riparazione automatica, puoi utilizzare un controllo di integrità regionale o globale. I controlli di salute regionali riducono le dipendenze tra regioni e contribuiscono a garantire la residenza dei dati. I controlli di integrità globali sono pratici se vuoi utilizzare lo stesso controllo di integrità per i gruppi di istanze gestite in più regioni.
Console
Creare un controllo di integrità.
Nella console Google Cloud, vai alla pagina Crea controllo di integrità.
Nel campo Nome, inserisci
autohealer-check
.Imposta Ambito su
Regional
.Nel menu a discesa Regione, seleziona
europe-west1
.In Protocollo, seleziona
HTTP
.Imposta Percorso richiesta su
/health
. Indica il percorso HTTP utilizzato dal controllo di integrità. Per questo tutorial, il server web di demo definisce il percorso/health
per restituire una rispostaHTTP 200 (OK)
se è in stato buono o una rispostaHTTP 500 (Internal Server Error)
se è in stato non buono.Imposta i criteri di integrità:
- Imposta Intervallo di controllo su
10
. Questo definisce il tempo dall'inizio di un probe all'inizio del successivo. - Imposta Timeout su
5
. Questo definisce il tempo di attesa di Google Cloud per una risposta a un'indagine. Questo valore deve essere minore o uguale all'intervallo di controllo. - Imposta Soglia stato soddisfacente su
2
. Questo definisce il numero di verifiche sequenziali che devono essere riuscite affinché la VM sia considerata sana. - Imposta Soglia stato non integro su
3
. Definisce il numero di probe sequenziali che devono non riuscire affinché la VM sia considerata non integra.
- Imposta Intervallo di controllo su
Lascia i valori predefiniti per le altre opzioni.
Fai clic su Crea in basso.
Crea una regola firewall per consentire ai probe del controllo di integrità di effettuare richieste HTTP.
Nella console Google Cloud, vai alla pagina Crea regola firewall.
In Nome, inserisci
default-allow-http-health-check
.In Rete, seleziona
default
.Per Destinazioni, seleziona
All instances in the network
.In Filtro origine, seleziona
IPv4 ranges
.In Intervalli IPv4 di origine, inserisci
130.211.0.0/22, 35.191.0.0/16
.In Protocolli e porte, seleziona TCP e inserisci
80
.Lascia i valori predefiniti per le altre opzioni.
Fai clic su Crea.
gcloud
Crea un controllo di integrità utilizzando il comando
health-checks create http
.gcloud compute health-checks create http autohealer-check \ --region europe-west1 \ --check-interval 10 \ --timeout 5 \ --healthy-threshold 2 \ --unhealthy-threshold 3 \ --request-path "/health"
check-interval
definisce il periodo di tempo dall'inizio di un esame all'inizio di quello successivo.timeout
definisce il tempo che Google Cloud aspetta per una risposta a una sonda. Questo valore deve essere minore o uguale all'intervallo di controllo.healthy-threshold
definisce il numero di sondaggi sequenziali che devono essere completati correttamente affinché la VM sia considerata sana.unhealthy-threshold
definisce il numero di probe sequenziali che devono non riuscire affinché la VM sia considerata non integra.request-path
indica il percorso HTTP utilizzato dal controllo di integrità. Per questo tutorial, il server web di esempio definisce il percorso/health
per restituire una rispostaHTTP 200 (OK)
se è in stato normale o una rispostaHTTP 500 (Internal Server Error)
se è in stato non normale.
Crea una regola firewall per consentire ai probe del controllo di integrità di effettuare richieste HTTP.
gcloud compute firewall-rules create default-allow-http-health-check \ --network default \ --allow tcp:80 \ --source-ranges 130.211.0.0/22,35.191.0.0/16
Che cos'è un buon controllo di integrità con riparazione automatica
I controlli di integrità utilizzati per la riparazione automatica devono essere prudenti, in modo da non eliminare e ricreare preventivamente le istanze. Quando un controllo di integrità dell'autoguaritore è troppo aggressivo, l'autoguaritore potrebbe scambiare le istanze occupate per istanze in stato di errore e riavviarle inutilmente, riducendo la disponibilità.
unhealthy-threshold
. Deve essere maggiore di1
. Idealmente, imposta questo valore su almeno3
. In questo modo vengono protetti da errori rari come la perdita di pacchetti di rete.healthy-threshold
. Un valore di2
è sufficiente per la maggior parte delle app.timeout
. Imposta questo valore di tempo su un valore elevato (almeno cinque volte superiore al tempo di risposta previsto). In questo modo ti proteggi da ritardi inaspettati, come istanze occupate o una connessione di rete lenta.check-interval
. Questo valore deve essere compreso tra 1 secondo e il doppio del timeout (non troppo lungo né troppo breve). Quando un valore è troppo lungo, un'istanza non riuscita non viene rilevata in tempo. Quando un valore è troppo breve, le istanze e la rete possono diventare misurabilmente occupate, dato il elevato numero di sonde di controllo di integrità inviate ogni secondo.
Configurare il servizio web
Questo tutorial utilizza un'app web archiviata su GitHub. Se vuoi approfondire l'implementazione dell'app, consulta il repository GitHub GoogleCloudPlatform/python-docs-samples.
Per configurare il servizio web di demo, crea un modello di istanza che avvii il server web di demo all'avvio. Poi, utilizza questo modello di istanza per eseguire il deployment di un gruppo di istanze gestite e abilitare la riparazione automatica.
Console
Creare un modello di istanza. Includi uno script di avvio che avvii il server web di demo.
Nella console Google Cloud, vai alla pagina Crea modello di istanza.
Imposta Nome su
webserver-template
.Nella sezione Località, seleziona europe-west1 dal menu a discesa Regione.
Nella sezione Configurazione macchina, per il menu a discesa Tipo di macchina, seleziona e2-medium.
Nella sezione Firewall, seleziona la casella di controllo Consenti traffico HTTP.
Espandi la sezione Opzioni avanzate per visualizzare le impostazioni avanzate. Vengono visualizzate diverse sottosezioni.
Nella sezione Gestione, individua Automazione e inserisci il seguente Script di avvio:
apt update && apt -y install git python3-pip python3-venv git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git python3 -m venv venv ./venv/bin/pip3 install -Ur ./python-docs-samples/compute/managed-instances/demo/requirements.txt ./venv/bin/pip3 install gunicorn ./venv/bin/gunicorn --bind 0.0.0.0:80 app:app --daemon --chdir ./python-docs-samples/compute/managed-instances/demo
Lascia i valori predefiniti per le altre opzioni.
Fai clic su Crea.
Esegui il deployment del server web come gruppo di istanze gestite.
Nella console Google Cloud, vai alla pagina Crea gruppo di istanze.
Imposta Nome su
webserver-group
.In Modello di istanza, seleziona
webserver-template
.In Regione, seleziona
europe-west1
.In Zona, seleziona
europe-west1-b
.Nella sezione Scalabilità automatica, per Modalità di scalabilità automatica, seleziona Off: non scalare automaticamente.
Torna al campo Numero di istanze e impostalo su
3
.Nella sezione Riparazione automatica:
- Nel menu a discesa Controllo di integrità, seleziona
autohealer-check
. Imposta Ritardo iniziale su
180
.
- Nel menu a discesa Controllo di integrità, seleziona
Lascia i valori predefiniti per le altre opzioni.
Fai clic su Crea.
Crea una regola firewall che consenta le richieste HTTP ai server web.
Nella console Google Cloud, vai alla pagina Crea regola firewall.
In Nome, inserisci
default-allow-http
.In Rete, seleziona
default
.Per Destinazioni, seleziona
Specified target tags
.In Tag di destinazione, inserisci
http-server
.In Filtro origine, seleziona
IPv4 ranges
.In Intervalli IPv4 di origine, inserisci
0.0.0.0/0
.In Protocolli e porte, seleziona TCP e inserisci
80
.Lascia i valori predefiniti per le altre opzioni.
Fai clic su Crea.
gcloud
Creare un modello di istanza. Includi uno script di avvio che avvii il server web di demo.
gcloud compute instance-templates create webserver-template \ --instance-template-region europe-west1 \ --machine-type e2-medium \ --tags http-server \ --metadata startup-script=' apt update && apt -y install git python3-pip python3-venv git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git python3 -m venv venv ./venv/bin/pip3 install -Ur ./python-docs-samples/compute/managed-instances/demo/requirements.txt ./venv/bin/pip3 install gunicorn ./venv/bin/gunicorn --bind 0.0.0.0:80 app:app --daemon --chdir ./python-docs-samples/compute/managed-instances/demo'
Creare un gruppo di istanze gestite.
gcloud compute instance-groups managed create webserver-group \ --zone europe-west1-b \ --template projects/PROJECT_ID/regions/europe-west1/instanceTemplates/webserver-template \ --size 3 \ --health-check projects/PROJECT_ID/regions/europe-west1/healthChecks/autohealer-check \ --initial-delay 180
Crea una regola firewall che consenta le richieste HTTP ai server web.
gcloud compute firewall-rules create default-allow-http \ --network default \ --allow tcp:80 \ --target-tags http-server
Attendi qualche minuto per la creazione e la verifica delle VM del gruppo di istanze gestite.
Simulare errori controllo di integrità
Per simulare errori di controllo di integrità, il server web di prova offre modi per forzare un errore di controllo di integrità.
Console
Vai a una VM server web.
Nella console Google Cloud, vai alla pagina Istanze VM.
Per qualsiasi VM
webserver-group
, fai clic sull'indirizzo IP nella colonna IP esterno. Nel browser web si apre una nuova scheda. Se la richiesta scade o la pagina web non è disponibile, attendi un minuto per consentire al server di completare la configurazione e riprova.
Il server web di prova mostra una pagina simile alla seguente:
Nella pagina web di dimostrazione, fai clic su Rendi non funzionante.
Di conseguenza, il controllo di integrità del server web non va a buon fine. Nello specifico, il server web fa in modo che il percorso
/health
restituisca unHTTP 500 (Internal Server Error)
. Puoi verificarlo facendo clic rapidamente sul pulsante Verifica integrità (questo pulsante non funziona più dopo che lo strumento di riparazione automatica ha iniziato a riavviare la VM).Attendi che lo strumento di riparazione automatica intervenga.
Nella console Google Cloud, vai alla pagina Istanze VM.
Attendi che lo stato della VM del server web cambi. Il segno di spunta verde accanto al nome della VM dovrebbe diventare un quadrato grigio, a indicare che lo strumento di riparazione automatica ha iniziato a riavviare la VM non funzionante.
Fai clic su Aggiorna nella parte superiore della pagina periodicamente per ottenere lo stato più recente.
Il processo di riparazione automatica è completato quando il quadrato grigio torna a essere un segno di spunta verde, a indicare che la VM è di nuovo in stato di salute.
gcloud
Monitora lo stato del gruppo di istanze gestite. Al termine, interrompi premendo
Ctrl+C
.while : ; do \ gcloud compute instance-groups managed list-instances webserver-group \ --zone europe-west1-b \ ; done
NAME: webserver-group-0zx6 ZONE: europe-west1-b STATUS: RUNNING HEALTH_STATE: HEALTHY ACTION: NONE INSTANCE_TEMPLATE: webserver-template VERSION_NAME: LAST_ERROR: NAME: webserver-group-4qbx ZONE: europe-west1-b STATUS: RUNNING HEALTH_STATE: HEALTHY ACTION: NONE INSTANCE_TEMPLATE: webserver-template VERSION_NAME: LAST_ERROR: NAME: webserver-group-m5v5 ZONE: europe-west1-b STATUS: RUNNING HEALTH_STATE: HEALTHY ACTION: NONE INSTANCE_TEMPLATE: webserver-template VERSION_NAME: LAST_ERROR:
Tutte le VM del gruppo devono mostrare
STATUS: RUNNING
eACTION: NONE
. In caso contrario, attendi qualche minuto per consentire il completamento della configurazione delle VM e riprova.Apri una nuova sessione Cloud Shell con Google Cloud CLI installato.
Ottieni l'indirizzo di una VM del server web.
gcloud compute instances list --filter webserver-group
Nella colonna
EXTERNAL_IP
, copia l'indirizzo IP di qualsiasi VM server web e salvalo come variabile bash locale.export IP_ADDRESS=EXTERNAL_IP_ADDRESS
Verifica che la configurazione del server web sia stata completata. Il server restituisce una risposta
HTTP 200 OK
.curl --head $IP_ADDRESS/health
HTTP/1.1 200 OK Server: gunicorn ...
Se ricevi un errore
Connection refused
, attendi un minuto per consentire al server di completare la configurazione e riprova.Rendi il server web non in stato di salute.
curl $IP_ADDRESS/makeUnhealthy > /dev/null
Di conseguenza, il controllo di integrità del server web non va a buon fine. Nello specifico, il server web fa in modo che il percorso
/health
restituisca unHTTP 500 INTERNAL SERVER ERROR
. Puoi verificarlo inviando rapidamente una richiesta a/health
(questa operazione non funziona più dopo che l'autohealer ha iniziato a riavviare la VM).curl --head $IP_ADDRESS/health
HTTP/1.1 500 INTERNAL SERVER ERROR Server: gunicorn ...
Torna alla prima sessione di shell per monitorare il gruppo di istanze gestite e attendi che la riparazione automatica intervenga.
Quando il processo di riparazione automatica è iniziato, le colonne
STATUS
eACTION
si aggiornano, indicando che lo strumento di riparazione automatica ha iniziato a riavviare la VM non sana.NAME: webserver-group-0zx6 ZONE: europe-west1-b STATUS: STOPPING HEALTH_STATE: UNHEALTHY ACTION: RECREATING INSTANCE_TEMPLATE: webserver-template VERSION_NAME: LAST_ERROR: ...
Il processo di riparazione automatica è terminato quando la VM segnala nuovamente un
STATUS
diRUNNING
e unACTION
diNONE
, indicando che la VM è stata riavviata correttamente.NAME: webserver-group-0zx6 ZONE: europe-west1-b STATUS: RUNNING HEALTH_STATE: HEALTHY ACTION: NONE INSTANCE_TEMPLATE: webserver-template VERSION_NAME: LAST_ERROR: ...
Al termine del monitoraggio del gruppo di istanze gestite, interrompilo facendo clic su
Ctrl+C
.
Non esitare a ripetere l'esercizio. Ecco alcune idee:
Che cosa succede se rendi non attive contemporaneamente tutte le VM? Per ulteriori informazioni sul comportamento della riparazione automatica durante gli errori simultanei, consulta Comportamento della riparazione automatica.
Puoi aggiornare la configurazione del controllo di integrità per riparare le VM il più rapidamente possibile? In pratica, devi impostare i parametri di controllo di integrità dell'integrità in modo che utilizzino valori conservativi, come spiegato in questo tutorial. In caso contrario, potresti rischiare di eliminare e riavviare per errore le VM quando non c'è alcun problema reale.
Il gruppo di istanze gestite ha un'impostazione di configurazione
initial delay
. Puoi determinare il ritardo minimo necessario per questo server web demo? In pratica, dovresti impostare il ritardo su un valore leggermente più lungo (10-20%) del tempo necessario per l'avvio di una VM e l'inizio del servizio delle richieste di app. In caso contrario, la VM potrebbe bloccarsi in un loop di avvio di riparazione automatica.
(Facoltativo) Visualizzare la cronologia di AutoHealer
Per visualizzare una cronologia delle operazioni di riparazione automatica, utilizza il seguente comandogcloud
:
gcloud compute operations list --filter='operationType~compute.instances.repair.*'
Per ulteriori informazioni, consulta la sezione sulla visualizzazione delle operazioni di riparazione automatica storiche.
Esegui la pulizia
Al termine del tutorial, puoi eliminare le risorse che hai creato in modo che smettano di utilizzare la quota e di generare addebiti. Le sezioni seguenti descrivono come eliminare o disattivare queste risorse.
Se hai creato un progetto separato per questo tutorial, elimina l'intero progetto. In caso contrario, se il progetto contiene risorse che vuoi conservare, elimina solo le risorse specifiche create in questo tutorial.
Elimina il progetto
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Eliminazione di risorse specifiche
Se non riesci a eliminare il progetto utilizzato per questo tutorial, elimina le risorse del tutorial singolarmente.
Eliminazione del gruppo di istanze
console
- In the Google Cloud console, go to the Instance groups page.
-
Select the checkbox for
your
webserver-group
instance group. - To delete the instance group, click Delete.
gcloud
gcloud compute instance-groups managed delete webserver-group --zone europe-west1-b -q
Eliminazione del modello di istanza
console
Nella console Google Cloud, vai alla pagina Modelli di istanza.
Fai clic sulla casella di controllo accanto al modello di istanza.
Fai clic su
Elimina nella parte superiore della pagina. Nella nuova finestra, fai clic su Elimina per confermare l'eliminazione.
gcloud
gcloud compute instance-templates delete webserver-template -q
Eliminazione del controllo di integrità
console
Nella console Google Cloud, vai alla pagina Controlli di integrità.
Fai clic sulla casella di controllo accanto al controllo di integrità.
Fai clic su
Elimina nella parte superiore della pagina. Nella nuova finestra, fai clic su Elimina per confermare l'eliminazione.
gcloud
gcloud compute health-checks delete autohealer-check -q
Eliminazione delle regole firewall
console
Nella console Google Cloud, vai alla pagina Regole firewall.
Fai clic sulle caselle di controllo accanto alle regole firewall denominate
default-allow-http
edefault-allow-http-health-check
.Fai clic su
Elimina nella parte superiore della pagina. Nella nuova finestra, fai clic su Elimina per confermare l'eliminazione.
gcloud
gcloud compute firewall-rules delete default-allow-http default-allow-http-health-check -q
Passaggi successivi
- Prova un altro tutorial:
- Scopri di più sui gruppi di istanze gestite.
- Scopri di più sulla progettazione di sistemi robusti.
- Scopri di più su come creare app web scalabili e resilienti su Google Cloud.