Questo tutorial interattivo mostra come utilizzare di riparazione automatica per creare disponibili su Compute Engine.
Le app a disponibilità elevata sono progettate per gestire i client con latenza minima e tempi di inattività. La disponibilità viene compromessa quando un'app ha un arresto anomalo o si blocca. I client di un'app compromessa possono riscontrare una latenza elevata o un tempo di inattività.
La riparazione automatica ti consente di riavviare automaticamente le app è stato compromesso. Rileva tempestivamente le istanze con errori e le ricrea automaticamente, in modo che i client possano essere pubblicati di nuovo. Con la riparazione automatica, non è necessario riportare manualmente un'app nel servizio dopo un errore.
Obiettivi
- Configura un controllo di integrità e un criterio di riparazione automatica.
- Configura un servizio web demo su un gruppo di istanze gestite.
- Simula gli errori del controllo di integrità e assisti al processo di ripristino con 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.
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
Attiva l'API Compute Engine.
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
Attiva l'API Compute Engine.
Se preferisci lavorare dalla riga di comando, installa Google Cloud CLI.
- Installa Google Cloud CLI.
-
Per initialize gcloud CLI, esegui questo comando:
gcloud init
Architettura dell'app
L'app include i seguenti componenti di Compute Engine:
- Controllo di integrità: un criterio di controllo di integrità HTTP utilizzato dalla riparazione automatica per rilevare la VM non riuscita di Compute Engine.
- Regole firewall: Con le regole firewall di Google Cloud puoi consentire o negare il traffico verso le tue istanze.
- Gruppo di istanze gestite: Un gruppo di istanze che esegue lo stesso servizio web demo.
- Modello di istanza: Un modello utilizzato per creare ogni istanza nel gruppo di istanze.
In che modo il controllo di integrità verifica il servizio web demo
Un controllo di integrità invia richieste di probe a un'istanza utilizzando un protocollo specificato ad esempio HTTP(S), SSL o TCP. Per ulteriori informazioni, vedi come funzionano i controlli di integrità e categorie, protocolli e porte del controllo di integrità.
Il controllo di integrità in questo tutorial è un controllo di integrità HTTP che verifica l'integrità HTTP
percorso /health
sulla porta 80. Per un controllo di integrità HTTP, la richiesta di probe supera
solo se il percorso restituisce una risposta HTTP 200 (OK)
. Per questo tutorial,
Il server web demo definisce il percorso /health
per restituire una risposta HTTP 200 (OK)
se in stato integro o una risposta HTTP 500 (Internal Server Error)
in caso di stato non integro.
Per ulteriori informazioni, vedi
criteri di successo per HTTP, HTTPS e HTTP/2.
Crea il controllo di integrità
Per impostare la riparazione automatica, crea un controllo di integrità personalizzato e configura la rete un firewall per consentire i probe del controllo di integrità. Puoi utilizzare uno dei seguenti regional o un un controllo di integrità globale. A livello di regione i controlli di integrità riducono le dipendenze tra regioni aiutano a ottenere la residenza dei dati. I controlli di integrità globali sono comodi se vuoi per utilizzare lo stesso controllo di integrità per i gruppi di istanze gestite in più regioni. In questo come creare un controllo di integrità globale.
Console
Creare un controllo di integrità.
Nella console Google Cloud, vai alla pagina Controlli di integrità.
Fai clic su Crea controllo di integrità.
Nel campo Nome, inserisci
autohealer-check
.Imposta Ambito su
Global
. Per la riparazione automatica, puoi utilizzare un valore regionale un controllo di integrità globale.In Protocollo, seleziona
HTTP
.Imposta Percorso richiesta su
/health
. che indica il percorso HTTP gli utilizzi del controllo di integrità. Per questo tutorial, il server web demo definisce percorso/health
per restituire una rispostaHTTP 200 (OK)
quando stato integro o una rispostaHTTP 500 (Internal Server Error)
quando non è integro.Imposta i Criteri di salute:
- Imposta Intervallo di controllo su
10
. che definisce il periodo di tempo dall'inizio di un probe all'inizio di quello successivo. - Imposta Timeout su
5
. Questo attributo definisce per quanto tempo Google Cloud attende una risposta a un probe. Questo valore deve essere inferiore o uguale all'intervallo di controllo. - Imposta Soglia di stato integro su
2
. che definisce il numero probe sequenziali che devono riuscire per l'istanza sano. - Imposta Soglia di stato non integro su
3
. che definisce il numero probe sequenziali che devono avere esito negativo affinché l'istanza considerato non integro.
- Imposta Intervallo di controllo su
Fai clic su Crea in basso.
Crea una regola firewall per consentire ai probe del controllo di integrità di effettuare HTTP richieste.
Nella console Google Cloud, vai alla pagina Crea regola firewall.
In Nome, inserisci
default-allow-http-health-check
.In Rete, seleziona
default
.In Target, seleziona
All instances in the network
.In Filtro di origine, seleziona
IP ranges
.In Intervalli IP di origine, inserisci
130.211.0.0/22
e35.191.0.0/16
.In Protocolli e porte, seleziona TCP e inserisci
80
.Fai clic su Crea.
gcloud
Crea un controllo di integrità globale utilizzando Comando
health-checks create http
.gcloud compute health-checks create http autohealer-check \ --global \ --check-interval 10 \ --timeout 5 \ --healthy-threshold 2 \ --unhealthy-threshold 3 \ --request-path "/health"
check-interval
definisce la quantità di tempo dall'inizio di uno all'inizio di quella successiva.timeout
definisce per quanto tempo Google Cloud attende una risposta a una sonda. Questo valore deve essere minore di o uguale all'intervallo di controllo.healthy-threshold
definisce il numero di probe sequenziali che devono riuscito affinché l'istanza venga considerata integro.unhealthy-threshold
definisce il numero di probe sequenziali che deve avere esito negativo affinché l'istanza venga considerata in stato non integro.request-path
indica il percorso HTTP utilizzato dal controllo di integrità. Per questo tutorial, il server web demo definisce il percorso/health
restituisce una rispostaHTTP 200 (OK)
se in stato integro o RispostaHTTP 500 (Internal Server Error)
in stato non integro.
Crea una regola firewall per consentire ai probe del controllo di integrità di effettuare HTTP richieste.
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
Quali caratteristiche deve avere un controllo di integrità per la riparazione automatica efficace
I controlli di integrità utilizzati per la riparazione automatica devono essere conservati in modo da non eliminare e ricreare preventivamente le istanze. Quando un controllo di integrità di riparazione automatica è troppo aggressivo, la riparazione automatica potrebbe scambiare le istanze occupate per e riavviarle inutilmente, riducendo la disponibilità.
unhealthy-threshold
. Deve essere superiore a1
. Possibilmente, imposta questo valore su3
o più. Questa opzione protegge da malfunzionamenti rari come un pacchetto di rete. o una perdita di dati.healthy-threshold
. Per la maggior parte delle app è sufficiente un valore2
.timeout
. Imposta questo valore di tempo su un importo generoso (cinque volte o più rispetto al tempo di risposta previsto). Questo meccanismo protegge da ritardi imprevisti ad esempio istanze occupate o una connessione di rete lenta.check-interval
. Questo valore deve essere compreso tra 1 secondo e 2 volte il valore timeout (non troppo lungo né troppo breve). Quando un valore è troppo lungo, viene restituito l'istanza con errori non viene acquisita abbastanza presto. Quando un valore è troppo breve, le istanze e la rete possono diventare misurabili, dato il un elevato numero di probe del controllo di integrità inviati al secondo.
Configura il servizio web
Questo tutorial utilizza un'app web archiviata su GitHub. Se desideri scopri di più su come è stata implementata l'app, vedi le GoogleCloudPlatform/python-docs-samples GitHub di ASL.
Per configurare il servizio web demo, crea un modello di istanza che avvii la server web dimostrativo all'avvio. Quindi, utilizza questo modello di istanza per eseguire il deployment gruppo di istanze gestite e abilitare la riparazione automatica.
Console
Creare un modello di istanza. Includi uno script di avvio che avvii un server web dimostrativo.
Nella console Google Cloud, vai alla pagina Modelli di istanza.
Fai clic su Crea modello istanza.
Imposta il Nome su
webserver-template
.Per Configurazione macchina seleziona
micro
(e2-micro).In Firewall, seleziona la casella di controllo Consenti traffico HTTP.
Fai clic su Gestione, sicurezza, dischi, networking, single-tenancy per visualizzare le impostazioni avanzate. Vengono visualizzate diverse schede.
Nella scheda Gestione, trova Automazione e inserisci il seguente script di avvio:
sudo apt update && sudo apt -y install git gunicorn3 python3-pip git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git cd python-docs-samples/compute/managed-instances/demo sudo pip3 install -r requirements.txt sudo gunicorn3 --bind 0.0.0.0:80 app:app --daemon
Fai clic su Crea.
Esegui il deployment del server web come gruppo di istanze gestite.
Nella console Google Cloud, vai alla pagina Gruppi di istanze.
Fai clic su Crea gruppo di istanze.
Imposta il Nome su
webserver-group
.In Regione, seleziona
europe-west1
.In Zona, seleziona
europe-west1-b
.In Modello di istanza, seleziona
webserver-template
.Per Scalabilità automatica, seleziona Non scalare automaticamente.
Imposta Numero di istanze su
3
.In Controllo di integrità, seleziona
autohealer-check
.Imposta Ritardo iniziale su
90
.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
.In Target, seleziona
Specified target tags
.In Tag di destinazione, inserisci
http-server
.In Filtro di origine, seleziona
IP ranges
.In Intervalli IP di origine, inserisci
0.0.0.0/0
.In Protocolli e porte, seleziona TCP e inserisci
80
.Fai clic su Crea.
gcloud
Creare un modello di istanza. Includi uno script di avvio che avvii un server web dimostrativo.
gcloud compute instance-templates create webserver-template \ --machine-type e2-micro \ --tags http-server \ --metadata startup-script=' sudo apt update && sudo apt -y install git gunicorn3 python3-pip git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git cd python-docs-samples/compute/managed-instances/demo sudo pip3 install -r requirements.txt sudo gunicorn3 --bind 0.0.0.0:80 app:app --daemon'
Creare un gruppo di istanze.
gcloud compute instance-groups managed create webserver-group \ --zone europe-west1-b \ --template webserver-template \ --size 3 \ --health-check autohealer-check \ --initial-delay 90
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
Simulare errori del controllo di integrità
Per simulare errori del controllo di integrità, il server web demo ti fornisce modi per forza l'errore del controllo di integrità.
Console
Accedi a un'istanza del server web.
Nella console Google Cloud, vai alla pagina Istanze VM.
Nella colonna IP esterno, fai clic sull'indirizzo IP di qualsiasi
webserver-group
istanza. Si apre una nuova scheda sul web del browser. Se la richiesta scade o la pagina web non è disponibile, attendere un minuto per consentire al server di completare la configurazione e riprovare.
Il server web dimostrativo visualizza una pagina simile alla seguente:
Nella pagina web della demo, fai clic su Imposta come non integro.
Questo fa sì che il server web non superi il controllo di integrità. In particolare, il server web fa sì che il percorso
/health
restituiscaHTTP 500 (Internal Server Error)
. Puoi verificarlo rapidamente facendo clic sul Pulsante Controlla stato (non funziona più dopo che la riparazione automatica ha ha avviato il riavvio dell'istanza).Attendi che la riparazione automatica intervenga.
Nella console Google Cloud, vai alla pagina Istanze VM.
Attendi che lo stato dell'istanza del server web cambi. Il verde segno di spunta accanto al nome dell'istanza dovrebbe diventare un quadrato grigio che indica che la riparazione automatica ha iniziato a riavviare lo stato non integro in esecuzione in un'istanza Compute Engine.
Fai clic su Aggiorna nella parte superiore della pagina periodicamente per ottenere recente.
Il processo di riparazione automatica termina quando il quadrato grigio torna indietro a un segno di spunta verde, che indica che l'istanza è di nuovo integro.
gcloud
Monitora lo stato del gruppo di istanze. Quando hai finito, interrompi premendo
Ctrl+C
.while : ; do \ gcloud compute instance-groups managed list-instances webserver-group \ --zone europe-west1-b \ ; done
NAME ZONE STATUS ACTION INSTANCE_TEMPLATE VERSION_NAME LAST_ERROR webserver-group-d5tz europe-west1-b RUNNING NONE webserver-template webserver-group-q6t9 europe-west1-b RUNNING NONE webserver-template webserver-group-tbpj europe-west1-b RUNNING NONE webserver-template
Se uno stato presente nell'istanza non è
RUNNING
, ad esempioSTAGING
, attendere un minuto per consentire all'istanza di completare la configurazione e riprovare.Apri una nuova sessione di Cloud Shell con Google Cloud CLI installato.
Recupera l'indirizzo di un'istanza del server web.
gcloud compute instances list --filter webserver-group
Nella colonna
EXTERNAL_IP
, copia l'indirizzo IP di qualsiasi server web e la salvi come variabile bash locale.export IP_ADDRESS=EXTERNAL_IP_ADDRESS
Verifica che il server web abbia terminato la configurazione. Il server restituisce un Risposta
HTTP 200 OK
.curl --head $IP_ADDRESS/health
HTTP/1.1 200 OK Server: gunicorn/19.6.0 ...
Se viene visualizzato l'errore
Connection refused
, attendi un minuto per consentire al server termina la configurazione e riprova.Imposta lo stato non integro del server web.
curl $IP_ADDRESS/makeUnhealthy > /dev/null
Questo fa sì che il server web non superi il controllo di integrità. In particolare, il server web fa sì che il percorso
/health
restituiscaHTTP 500 INTERNAL SERVER ERROR
. Puoi verificarlo autonomamente inviando una richiesta rapidamente a/health
(questa operazione smette di funzionare una volta che la riparazione automatica ha ha avviato il riavvio dell'istanza).curl --head $IP_ADDRESS/health
HTTP/1.1 500 INTERNAL SERVER ERROR Server: gunicorn/19.6.0 ...
Torna alla prima sessione di shell per monitorare il gruppo di istanze e attendi affinché il riparazione automatico possa intervenire.
Dopo l'avvio del processo di riparazione automatica, i
STATUS
eACTION
l'aggiornamento delle colonne indica che la riparazione automatica ha iniziato a riavviarsi dell'istanza in stato non integro.NAME ZONE STATUS ACTION INSTANCE_TEMPLATE VERSION_NAME LAST_ERROR webserver-group-d5tz europe-west1-b RUNNING NONE webserver-template webserver-group-q6t9 europe-west1-b RUNNING NONE webserver-template webserver-group-tbpj europe-west1-b STOPPING RECREATING webserver-template
Il processo di riparazione automatica è terminato quando l'istanza viene nuovamente segnala un
STATUS
diRUNNING
e unACTION
diNONE
, che indicano l'istanza è stata riavviata correttamente.NAME ZONE STATUS ACTION INSTANCE_TEMPLATE VERSION_NAME LAST_ERROR webserver-group-d5tz europe-west1-b RUNNING NONE webserver-template webserver-group-q6t9 europe-west1-b RUNNING NONE webserver-template webserver-group-tbpj europe-west1-b RUNNING NONE webserver-template
Quando hai completato il monitoraggio del gruppo di istanze, fermati premendo
Ctrl+C
.
Puoi ripetere questo esercizio. Ecco alcune idee:
Cosa succede se lo stato di tutte le istanze non è integro contemporaneamente? Per ulteriori informazioni informazioni sul comportamento di riparazione automatica durante gli errori simultanei, consulta comportamento di riparazione automatica.
Puoi aggiornare la configurazione del controllo di integrità per correggere le istanze possibile? In pratica, dovresti impostare i parametri del controllo di integrità per utilizzare e conservativi, come spiegato in questo tutorial. In caso contrario, potresti rischiare di istanze eliminate e riavviate per errore quando non esistono problem.)
Il gruppo di istanze ha un'impostazione di configurazione
initial delay
. Puoi determinare il ritardo minimo necessario per il server web dimostrativo? (In pratica, dovresti impostare il ritardo su un valore leggermente più lungo (10%-20%) di quanto richiesto per avviare un'istanza e iniziare a gestire le richieste dell'app. In caso contrario, rischia di bloccarsi in un loop di avvio con riparazione automatica).
(Facoltativo) Visualizza la cronologia della riparazione automatica
Per visualizzare una cronologia delle operazioni di riparazione automatica, utilizza quanto segue
Comando gcloud
:
gcloud compute operations list --filter='operationType~compute.instances.repair.*'
Per ulteriori informazioni, vedi visualizzare la cronologia delle operazioni di riparazione automatica
Esegui la pulizia
Al termine del tutorial, puoi eseguire la pulizia delle risorse che hai creato in modo che smettono di usare la quota e comportano addebiti. Le seguenti sezioni 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 risorse specifiche create in questo tutorial.
Elimina il progetto
- Nella console Google Cloud, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.
Eliminazione di risorse specifiche
Se non riesci a eliminare il progetto utilizzato per questo tutorial, elimina il tutorial le risorse singolarmente.
Eliminazione del gruppo di istanze
console
- Nella console Google Cloud, vai alla pagina Gruppi di istanze.
-
Seleziona la casella di controllo per
il tuo gruppo di istanze
webserver-group
. - Per eliminare il gruppo di istanze, fai clic su Elimina.
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 in nella parte superiore della pagina. Nella nuova finestra, fai clic su Elimina per confermare. l'eliminazione dei dati.
gcloud
gcloud compute instance-templates delete webserver-template -q
Eliminazione del controllo di integrità in corso...
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 in nella parte superiore della pagina. Nella nuova finestra, fai clic su Elimina per confermare. l'eliminazione dei dati.
gcloud
gcloud compute health-checks delete autohealer-check -q
Eliminazione delle regole firewall in corso...
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 in nella parte superiore della pagina. Nella nuova finestra, fai clic su Elimina per confermare. l'eliminazione dei dati.
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 solidi.
- Scopri di più sulla creazione di app web scalabili e resilienti su Google Cloud.