Utilizzo della riparazione automatica per app a disponibilità elevata


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à è 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 con errori e le ricrea automaticamente, in modo che i client possano essere pubblicati di nuovo. Con la riparazione automatica, non è più necessario ripristinare manualmente un'app 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 dei controlli 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

    Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.

    In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

    Make sure that billing is enabled for your Google Cloud project.

    Enable the Compute Engine API.

    Enable the API

    In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

    Make sure that billing is enabled for your Google Cloud project.

    Enable the Compute Engine API.

    Enable the 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 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 delle tue istanze.
  • Gruppo di istanze gestite: un gruppo di istanze che eseguono lo stesso servizio web di demo.
  • Modello di istanza: un modello utilizzato per creare ogni istanza nel gruppo di istanze.

Architettura di sistema per un controllo di integrità e un 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, 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 non normale. 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 un controllo di integrità regionale o 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 tutorial, crei un controllo di integrità globale.

Console

  1. Creare un controllo di integrità.

    1. Nella console Google Cloud, vai alla pagina Controlli di integrità.

      Vai a Controlli di integrità

    2. Fai clic su Crea controllo di integrità.

    3. Nel campo Nome, inserisci autohealer-check.

    4. Imposta Ambito su Global. Per la riparazione automatica, puoi utilizzare un controllo di integrità regionale o globale.

    5. In Protocollo, seleziona HTTP.

    6. Imposta Percorso richiesta su /health. Indica il percorso HTTP utilizzato dal controllo di integrità. Per questo tutorial, il server web demo definisce percorso /health per restituire una risposta HTTP 200 (OK) quando stato integro o una risposta HTTP 500 (Internal Server Error) quando non è integro.

    7. Imposta i Criteri di salute:

      1. Imposta Intervallo di controllo su 10. Questo definisce il tempo dall'inizio di un probe all'inizio del successivo.
      2. 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.
      3. Imposta Soglia stato soddisfacente su 2. Questo definisce il numero di verifiche sequenziali che devono essere riuscite affinché l'istanza sia considerata sana.
      4. Imposta Soglia stato non integro su 3. Definisce il numero di probe sequenziali che devono non riuscire affinché l'istanza sia considerata non integra.
    8. Fai clic su Crea in basso.

  2. Crea una regola firewall per consentire ai probe del controllo di integrità di effettuare HTTP richieste.

    1. Nella console Google Cloud, vai alla pagina Crea regola firewall.

      Vai a Crea regola firewall

    2. In Nome, inserisci default-allow-http-health-check.

    3. In Rete, seleziona default.

    4. In Target, seleziona All instances in the network.

    5. In Filtro origine, seleziona IP ranges.

    6. In Intervalli IP di origine, inserisci 130.211.0.0/22 e 35.191.0.0/16.

    7. In Protocolli e porte, seleziona TCP e inserisci 80.

    8. Fai clic su Crea.

gcloud

  1. 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 il periodo di tempo dall'inizio di un esame all'inizio di quello successivo.
    • timeout definisce per quanto tempo Google Cloud attende 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 riusciti affinché l'istanza sia considerata sana.
    • 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 di esempio definisce il percorso /health per restituire una risposta HTTP 200 (OK) se è in stato normale o una risposta HTTP 500 (Internal Server Error) se non è in stato normale.
  2. 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
    

Cosa rende efficace un controllo di integrità per la riparazione automatica

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à 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 superiore a 1. Idealmente, imposta questo valore su almeno 3. In questo modo vengono protetti da errori rari come la perdita di pacchetti di rete.
  • healthy-threshold. Un valore di 2 è sufficiente per la maggior parte delle app.
  • 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, un'istanza non riuscita non viene rilevata in tempo. 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.

Configurare 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

  1. Creare un modello di istanza. Includi uno script di avvio che avvii un server web dimostrativo.

    1. Nella console Google Cloud, vai alla pagina Modelli di istanza.

      Vai a Modelli di istanza

    2. Fai clic su Crea modello istanza.

    3. Imposta il Nome su webserver-template.

    4. Per Configurazione macchina seleziona micro (e2-micro).

    5. In Firewall, seleziona la casella di controllo Consenti traffico HTTP.

    6. Fai clic su Gestione, sicurezza, dischi, networking, single-tenancy per visualizzare le impostazioni avanzate. Vengono visualizzate diverse schede.

    7. 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
      

    8. Fai clic su Crea.

  2. Esegui il deployment del server web come gruppo di istanze gestite.

    1. Nella console Google Cloud, vai alla pagina Gruppi di istanze.

      Vai a Gruppi di istanze

    2. Fai clic su Crea gruppo di istanze.

    3. Imposta il Nome su webserver-group.

    4. In Regione, seleziona europe-west1.

    5. In Zona, seleziona europe-west1-b.

    6. In Modello di istanza, seleziona webserver-template.

    7. Per Scalabilità automatica, seleziona Non scalare automaticamente.

    8. Imposta Numero di istanze su 3.

    9. In Controllo di integrità, seleziona autohealer-check.

    10. Imposta Ritardo iniziale su 90.

    11. Fai clic su Crea.

  3. Crea una regola firewall che consenta le richieste HTTP ai server web.

    1. Nella console Google Cloud, vai alla pagina Crea regola firewall.

      Vai a Crea regola firewall

    2. In Nome, inserisci default-allow-http.

    3. In Rete, seleziona default.

    4. Per Destinazioni, seleziona Specified target tags.

    5. In Tag di destinazione, inserisci http-server.

    6. In Filtro di origine, seleziona IP ranges.

    7. In Intervalli IP di origine, inserisci 0.0.0.0/0.

    8. In Protocolli e porte, seleziona TCP e inserisci 80.

    9. Fai clic su Crea.

gcloud

  1. 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'
    
  2. Crea 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
    
  3. 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

  1. Vai a un'istanza del server web.

    1. Nella console Google Cloud, vai alla pagina Istanze VM.

      Vai a Istanze VM

    2. Nella colonna IP esterno, fai clic sull'indirizzo IP di qualsiasi istanza webserver-group. Si apre una nuova scheda sul web del browser. 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 demo visualizza una pagina simile alla seguente:

    Pagina web di dimostrazione che mostra pulsanti di stato verdi e pulsanti di azione blu.

  2. Nella pagina web di dimostrazione, fai clic su Rendi non funzionante.

    Questo fa sì che il server web non superi il controllo di integrità. In particolare, il server web fa sì che il percorso /health restituisca HTTP 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).

  3. Attendi che la riparazione automatica intervenga.

    1. Nella console Google Cloud, vai alla pagina Istanze VM.

      Vai a Istanze VM

    2. Attendi che lo stato dell'istanza del server web cambi. Il segno di spunta verde accanto al nome dell'istanza dovrebbe diventare un quadrato grigio, a indicare che lo strumento di riparazione automatica ha iniziato a riavviare l'istanza non funzionante.

    3. Fai clic su Aggiorna nella parte superiore della pagina periodicamente per ottenere recente.

    4. 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

  1. 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 alcune istanze mostrano uno stato diverso da RUNNING, ad esempio STAGING, attendi un minuto per consentire all'istanza di completare la configurazione e riprova.

  2. Apri una nuova sessione di Cloud Shell con Google Cloud CLI installato.

  3. Ottenere 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
    
  4. 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 ricevi un errore Connection refused, attendi un minuto per consentire al server di completare la configurazione e riprova.

  5. 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 restituisca HTTP 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
    ...
    
  6. Torna alla prima sessione di shell per monitorare il gruppo di istanze e attendere che l'autohealer intervenga.

    1. Dopo l'avvio del processo di riparazione automatica, i STATUS e ACTION colonne si aggiornano, indicando 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
      
    2. Il processo di riparazione automatica è terminato quando l'istanza viene nuovamente segnala un STATUS di RUNNING e un ACTION di NONE, 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
      
    3. Quando hai completato il monitoraggio del gruppo di istanze, fermati premendo Ctrl+C.

Non esitare a ripetere l'esercizio. Ecco alcune idee:

  • Cosa succede se rendi non attive tutte le istanze contemporaneamente? Per maggiori 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 riparare le istanze il più rapidamente possibile? In pratica, devi impostare i parametri di controllo 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 istanze quando non c'è alcun problema reale.

  • 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%) rispetto al tempo impiegato da un'istanza per avviarsi e iniziare a soddisfare le richieste di 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 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

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. 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

  1. In the Google Cloud console, go to the Instance groups page.

    Go to Instance groups

  2. Select the checkbox for your webserver-group instance group.
  3. 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

  1. Nella console Google Cloud, vai alla pagina Modelli di istanza.

    Vai a Modelli di istanza

  2. Fai clic sulla casella di controllo accanto al modello di istanza.

  3. 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

  1. Nella console Google Cloud, vai alla pagina Controlli di integrità.

    Vai a Controlli di integrità

  2. Fai clic sulla casella di controllo accanto al controllo di integrità.

  3. Fai clic su Elimina 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

  1. Nella console Google Cloud, vai alla pagina Regole firewall.

    Vai a Regole firewall

  2. Fai clic sulle caselle di controllo accanto alle regole firewall denominate default-allow-http e default-allow-http-health-check.

  3. 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