Utiliser l'autoréparation pour les applications à disponibilité élevée


Ce tutoriel interactif montre comment utiliser l'autoréparation pour créer des applications à disponibilité élevée sur Compute Engine.

Les applications à disponibilité élevée sont conçues pour offrir aux clients un service avec des temps de latence et d'arrêt minimaux. La disponibilité est compromise lorsqu'une application plante ou se bloque. Les clients d'une application compromise peuvent rencontrer des temps de latence ou d'arrêt élevés.

L'autoréparation permet de redémarrer automatiquement les applications compromises. Elle détecte rapidement les instances de machine virtuelle (VM) défaillantes et les recrée automatiquement, de sorte que les clients puissent les utiliser à nouveau. Avec l'autoréparation, il n'est plus nécessaire de remettre manuellement une application en service après une défaillance.

Objectifs

  • Configurer une vérification de l'état et une règle d'autoréparation
  • Configurer un service Web de démonstration sur un groupe d'instances géré (MIG)
  • Simuler des échecs de la vérification de l'état et assister au processus de récupération de l'autoréparation

Coûts

Ce tutoriel fait appel à des composants facturables de Google Cloud, dont :

  • Compute Engine

Avant de commencer

    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

Si vous préférez travailler à partir de la ligne de commande, installez Google Cloud CLI.

  • Install the Google Cloud CLI.
  • To initialize the gcloud CLI, run the following command:

    gcloud init

Architecture de l'application

L'application inclut les composants Compute Engine ci-dessous.

  • Vérification de l'état : règle de vérification de l'état de l'état HTTP utilisée par le processus d'autoréparation pour détecter les VM défaillantes.
  • Règles de pare-feu : les règles de pare-feu Google Cloud vous permettent d'autoriser ou de refuser le trafic sur vos VM.
  • Groupe d'instances géré : groupe de VM exécutant le même service Web de démonstration.
  • Modèle d'instance : modèle utilisé pour créer chaque VM du groupe d'instances.

Architecture système d'une vérification de l'état et d'un groupe d'instances

Comment la vérification de l'état teste-t-elle le service Web de démonstration ?

Une vérification de l'état envoie des requêtes de vérification à une VM à l'aide d'un protocole spécifié, tel que HTTP(S), SSL ou TCP. Pour en savoir plus, consultez les sections Fonctionnement des vérifications d'état et Catégories, protocoles et ports pour les vérifications d'état.

Dans ce tutoriel, la vérification de l'état fait appel au protocole HTTP et teste le chemin d'accès HTTP /health sur le port 80. Dans le cas d'une vérification de l'état HTTP, la requête de test n'est un succès que si le chemin renvoie une réponse HTTP 200 (OK). Dans le cadre de ce tutoriel, le service Web de démonstration définit le chemin d'accès /health de sorte qu'il renvoie une réponse HTTP 200 (OK) s'il est opérationnel ou une réponse HTTP 500 (Internal Server Error) dans le cas contraire. Pour plus d'informations, consultez la section Critères de réussite pour HTTP, HTTPS et HTTP/2.

Créer la vérification de l'état

Pour configurer l'autoréparation, créez une vérification de l'état personnalisée et configurez le pare-feu réseau de sorte qu'il autorise les tests de vérification de l'état.

Dans ce tutoriel, vous allez créer une vérification de l'état régionale. Pour l'autoréparation, vous pouvez utiliser une vérification de l'état régionale ou globale. Les vérifications d'état régionales réduisent les dépendances interrégionales et aident à mettre en œuvre la résidence des données. Les vérifications d'état globales sont pratiques si vous souhaitez utiliser la même vérification d'état pour les MIG dans plusieurs régions.

Console

  1. Créez une vérification d'état.

    1. Dans la console Google Cloud, accédez à la page Créer une vérification de l'état.

      Accéder à la page "Créer une vérification d'état"

    2. Dans le champ Nom, saisissez autohealer-check.

    3. Définissez le champ d'application sur Regional.

    4. Dans le menu déroulant Région, sélectionnez europe-west1.

    5. Pour Protocole, sélectionnez HTTP.

    6. Définissez Chemin de requête sur /health. Ce champ indique le chemin HTTP que la vérification de l'état utilise. Dans le cadre de ce tutoriel, le service Web de démonstration définit le chemin d'accès /health de sorte qu'il renvoie une réponse HTTP 200 (OK) s'il est opérationnel ou une réponse HTTP 500 (Internal Server Error) dans le cas contraire.

    7. Définissez les critères de vérification d'état :

      1. Définissez Intervalle entre deux tests sur 10. Ce champ définit la durée entre le début d'un test et le début du suivant.
      2. Définissez Délai avant expiration sur 5. Ceci définit la durée pendant laquelle Google Cloud attend une réponse à une vérification. Cette valeur doit être inférieure ou égale à l'intervalle entre deux tests.
      3. Définissez Seuil sanitaire sur 2. Ce champ définit le nombre de tests séquentiels qui doivent réussir pour que la VM soit considérée comme opérationnelle.
      4. Définissez Seuil non sanitaire sur 3. Ce champ définit le nombre de tests séquentiels qui doivent échouer pour que la VM soit considérée comme non opérationnelle.
    8. Conservez les valeurs par défaut des autres options.

    9. Cliquez sur Créer en bas de la page.

  2. Créez une règle de pare-feu permettant aux tests de vérification de l'état d'effectuer des requêtes HTTP.

    1. Dans Google Cloud Console, accédez à la page Créer une règle de pare-feu.

      Accéder à la page "Créer une règle de pare-feu"

    2. Dans le champ Nom, saisissez default-allow-http-health-check.

    3. Pour Réseau, sélectionnez default.

    4. Pour Cibles, sélectionnez All instances in the network.

    5. Pour Filtre source, sélectionnez IPv4 ranges.

    6. Dans le champ Plages IPv4 sources, saisissez 130.211.0.0/22, 35.191.0.0/16.

    7. Dans Protocoles et ports, sélectionnez TCP et saisissez 80.

    8. Conservez les valeurs par défaut des autres options.

    9. Cliquez sur Créer.

gcloud

  1. Créez une vérification d'état à l'aide de la commande 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 définit la durée écoulée entre le début d'un test et le début du suivant.
    • timeout définit la durée pendant laquelle Google Cloud attend une réponse à une vérification. Cette valeur doit être inférieure ou égale à l'intervalle entre deux tests.
    • healthy-threshold définit le nombre de tests séquentiels qui doivent réussir pour que la VM soit considérée comme opérationnelle.
    • unhealthy-threshold définit le nombre de tests séquentiels qui doivent échouer pour que la VM soit considérée comme non opérationnelle.
    • request-path indique le chemin HTTP que la vérification de l'état utilise. Dans le cadre de ce tutoriel, le service Web de démonstration définit le chemin d'accès /health de sorte qu'il renvoie une réponse HTTP 200 (OK) s'il est opérationnel ou une réponse HTTP 500 (Internal Server Error) dans le cas contraire.
  2. Créez une règle de pare-feu permettant aux tests de vérification de l'état d'effectuer des requêtes 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
    

Caractéristiques d'une bonne vérification d'état pour autoréparation

Les vérifications d'état pour autoréparation doivent être configurées de manière raisonnable afin que les instances ne soient pas supprimées et recréées de façon préemptive. Lorsqu'une vérification d'état pour autoréparation est trop agressive, le processus d'autoréparation peut confondre des instances occupées avec des instances défaillantes et les redémarrer inutilement, réduisant ainsi la disponibilité.

  • unhealthy-threshold : doit être supérieur à 1. Idéalement, définissez cette valeur sur 3 ou plus. Cela constitue une protection contre les défaillances rares comme une perte de paquets sur le réseau.
  • healthy-threshold : définir cette valeur sur 2 est suffisant pour la plupart des applications.
  • timeout : définissez cette valeur temporelle sur une valeur élevée (au moins cinq fois plus que le temps de réponse attendu). Cela constitue une protection contre les retards inattendus occasionnés par exemple par une instance occupée ou une connexion réseau lente.
  • check-interval : cette valeur doit être comprise entre une seconde et deux fois le délai d'attente (ni trop long ni trop court). Si cette valeur est trop élevée, une instance en échec n'est pas interceptée à temps. Lorsqu'une valeur est trop courte, les instances et le réseau peuvent devenir très occupés, étant donné le nombre élevé de tests de vérification de l'état envoyés chaque seconde.

Configurer le service Web

Ce tutoriel utilise une application Web stockée sur GitHub. Si vous souhaitez en savoir plus sur la mise en œuvre de l'application, consultez le dépôt GitHub GoogleCloudPlatform/python-docs-samples.

Pour configurer le service Web de démonstration, créez un modèle d'instance qui lance le serveur Web de démonstration au démarrage. Utilisez ensuite ce modèle d'instance pour déployer un groupe d'instances géré et activer l'autoréparation.

Console

  1. Créez un modèle d'instance. Incluez un script de démarrage qui lance le serveur Web de démonstration.

    1. Dans la console Google Cloud, accédez à la page Créer un modèle d'instance.

      Accéder à la page Créer un modèle d'instance

    2. Définissez le paramètre Nom sur webserver-template.

    3. Dans la section Emplacement, dans le menu déroulant Région, sélectionnez europe-west1.

    4. Dans la section Configuration de la machine, dans le menu déroulant Type de machine, sélectionnez e2-medium.

    5. Dans la section Pare-feu, cochez la case Autoriser le trafic HTTP.

    6. Développez la section Options avancées pour afficher les paramètres avancés. Plusieurs sous-sections s'affichent.

    7. Dans la section Gestion, recherchez Automatisation et saisissez le script de démarrage suivant:

      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
      

    8. Conservez les valeurs par défaut des autres options.

    9. Cliquez sur Créer.

  2. Déployez le serveur Web en tant que groupe d'instances géré.

    1. Dans la console Google Cloud, accédez à la page Créer un groupe d'instances.

      Accéder à la page "Créer un groupe d'instances"

    2. Définissez le paramètre Nom sur webserver-group.

    3. Pour Modèle d'instance, sélectionnez webserver-template.

    4. Pour Région, sélectionnez europe-west1.

    5. Pour Zone, sélectionnez europe-west1-b.

    6. Dans la section Autoscaling (Autoscaling), pour Mode autoscaling (Mode autoscaling), sélectionnez Désactivé: ne pas effectuer d'autoscaling.

    7. Faites défiler la page jusqu'au champ Nombre d'instances, puis définissez-le sur 3.

    8. Dans la section Autoréparation, procédez comme suit:

      1. Dans la liste déroulante Vérification de l'état, sélectionnez autohealer-check.
      2. Définissez Délai initial sur 180.

    9. Conservez les valeurs par défaut des autres options.

    10. Cliquez sur Créer.

  3. Créez une règle de pare-feu qui autorise l'envoi de requêtes HTTP aux serveurs Web.

    1. Dans Google Cloud Console, accédez à la page Créer une règle de pare-feu.

      Accéder à la page "Créer une règle de pare-feu"

    2. Dans le champ Nom, saisissez default-allow-http.

    3. Pour Réseau, sélectionnez default.

    4. Pour Cibles, sélectionnez Specified target tags.

    5. Pour Tags cibles, saisissez http-server.

    6. Pour Filtre source, sélectionnez IPv4 ranges.

    7. Dans le champ Plages IPv4 sources, saisissez 0.0.0.0/0.

    8. Dans Protocoles et ports, sélectionnez TCP et saisissez 80.

    9. Conservez les valeurs par défaut des autres options.

    10. Cliquez sur Créer.

gcloud

  1. Créez un modèle d'instance. Incluez un script de démarrage qui lance le serveur Web de démonstration.

    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'
    
  2. Créez un groupe d'instances géré.

    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
    
  3. Créez une règle de pare-feu qui autorise l'envoi de requêtes HTTP aux serveurs Web.

    gcloud compute firewall-rules create default-allow-http \
        --network default \
        --allow tcp:80 \
        --target-tags http-server
    

Attendez quelques minutes que le groupe d'instances géré crée et vérifie ses VM.

Simuler des échecs de la vérification de l'état

Pour simuler des échecs de la vérification de l'état, le serveur Web de démonstration vous permet d'en forcer un.

Console

  1. Accédez à une VM de serveur Web.

    1. Dans Google Cloud Console, accédez à la page Instances de VM.

      Accéder à la page Instances de VM

    2. Pour chaque VM webserver-group, sous la colonne Adresse IP externe, cliquez sur l'adresse IP. Un nouvel onglet s'ouvre dans votre navigateur Web. Si la requête dépasse le délai ou si la page Web n'est pas disponible, attendez une minute que la configuration du serveur se termine et réessayez.

    Le serveur Web de démonstration affiche une page semblable à celle-ci :

    Page Web de démonstration présentant des boutons d'état verts et des boutons d'action bleus.

  2. Sur la page Web de démonstration, cliquez sur Rendre non opérationnel.

    Cela entraîne l'échec de la vérification de l'état du serveur Web. Plus précisément, le serveur Web fait en sorte que le chemin d'accès /health renvoie une réponse HTTP 500 (Internal Server Error). Vous pouvez le vérifier par vous-même en cliquant sur le bouton Vérifier l'état. Cette méthode cesse de fonctionner une fois que le processus d'autoréparation a lancé le redémarrage de la VM.

  3. Attendez que le processus d'autoréparation effectue une action.

    1. Dans Google Cloud Console, accédez à la page Instances de VM.

      Accéder à la page Instances de VM

    2. Attendez que l'état de la VM du serveur Web change. La coche verte en regard du nom de la VM devrait se transformer en un carré gris, vous indiquant que le processus d'autoréparation a lancé le redémarrage de la VM non opérationnelle.

    3. Cliquez régulièrement sur Actualiser en haut de la page pour obtenir l'état le plus récent.

    4. Le processus d'autoréparation est terminé lorsque le carré gris redevient une coche verte, indiquant ainsi que la VM est de nouveau opérationnelle.

gcloud

  1. Surveillez l'état du groupe d'instances géré. (Lorsque vous avez terminé, appuyez sur Ctrl+C pour quitter).

    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:
    

    Toutes les VM du groupe doivent afficher STATUS: RUNNING et ACTION: NONE. Si ce n'est pas le cas, attendez quelques minutes que la configuration des VM se termine, puis réessayez.

  2. Ouvrez une nouvelle session Cloud Shell avec Google Cloud CLI installée.

  3. Obtenez l'adresse d'une VM de serveur Web.

    gcloud compute instances list --filter webserver-group
    

    Sous la colonne EXTERNAL_IP, copiez l'adresse IP de n'importe quelle VM de serveur Web et enregistrez-la en tant que variable bash locale.

    export IP_ADDRESS=EXTERNAL_IP_ADDRESS
    
  4. Vérifiez que la configuration du serveur Web est terminée. Le serveur renvoie une réponse HTTP 200 OK.

    curl --head $IP_ADDRESS/health
    
    HTTP/1.1 200 OK
    Server: gunicorn
    ...
    

    Si vous obtenez une erreur Connection refused, attendez une minute que la configuration du serveur se termine et réessayez.

  5. Rendez le serveur Web non opérationnel.

    curl $IP_ADDRESS/makeUnhealthy > /dev/null
    

    Cela entraîne l'échec de la vérification de l'état du serveur Web. Plus précisément, le serveur Web fait en sorte que le chemin d'accès /health renvoie une réponse HTTP 500 INTERNAL SERVER ERROR. Vous pouvez le vérifier par vous-même en envoyant rapidement une requête à /health. Cette méthode cesse de fonctionner une fois que le processus d'autoréparation a lancé le redémarrage de la VM.

    curl --head $IP_ADDRESS/health
    
    HTTP/1.1 500 INTERNAL SERVER ERROR
    Server: gunicorn
    ...
    
  6. Revenez à votre première session de shell pour surveiller le groupe d'instances géré et attendez que le processus d'autoréparation effectue une action.

    1. Une fois que le processus d'autoréparation a démarré, les colonnes STATUS et ACTION sont mises à jour, indiquant ainsi qu'il a lancé le redémarrage de la VM non opérationnelle.

        NAME: webserver-group-0zx6
        ZONE: europe-west1-b
        STATUS: STOPPING
        HEALTH_STATE: UNHEALTHY
        ACTION: RECREATING
        INSTANCE_TEMPLATE: webserver-template
        VERSION_NAME:
        LAST_ERROR:
      
        ...
      
    2. Le processus d'autoréparation a terminé lorsque la VM affiche à nouveau la valeur RUNNING pour STATUS et la valeur NONE pour ACTION, indiquant ainsi que la VM a bien été redémarrée.

        NAME: webserver-group-0zx6
        ZONE: europe-west1-b
        STATUS: RUNNING
        HEALTH_STATE: HEALTHY
        ACTION: NONE
        INSTANCE_TEMPLATE: webserver-template
        VERSION_NAME:
        LAST_ERROR:
      
        ...
      
    3. Lorsque vous avez terminé de surveiller le groupe d'instances géré, appuyez sur Ctrl+C pour quitter.

N'hésitez pas à répéter cet exercice. Voici quelques idées :

  • Que se passe-t-il si vous rendez toutes les VM non opérationnelles en même temps ? Pour plus d'informations sur le comportement de l'autoréparation lors d'échecs simultanés, consultez la section Comportement de l'autoréparation.

  • Pouvez-vous mettre à jour la configuration de la vérification de l'état;état pour réparer les VM aussi rapidement que possible ? En pratique, vous devez définir les paramètres de vérification de l'état de façon à utiliser des valeurs conservatrices, comme expliqué dans ce tutoriel. Sinon, des VM risquent d'être supprimées par erreur et d'être redémarrées alors qu'il n'y a pas de réel problème.

  • Le groupe d'instances géré a un paramètre de configuration initial delay. Pouvez-vous déterminer le délai minimal requis pour ce serveur Web de démonstration ? En pratique, vous devez définir le délai sur une durée un peu plus longue (de l'ordre de 10 à 20 %) qu'il ne faut à une VM pour démarrer et commencer à diffuser des requêtes d'application. Sinon, la VM risque d'être bloquée dans une boucle de démarrage d'autoréparation.)

Afficher l'historique du processus d'autoréparation (facultatif)

Pour afficher l'historique des opérations d'autoréparation, utilisez la commande gcloud suivante :

gcloud compute operations list --filter='operationType~compute.instances.repair.*'

Pour en savoir plus, consultez la section Afficher l'historique des opérations d'autoréparation.

Nettoyer

Une fois le tutoriel terminé, vous pouvez procéder au nettoyage des ressources que vous avez créées afin qu'elles ne soient plus comptabilisées dans votre quota et qu'elles ne vous soient plus facturées. Dans les sections suivantes, nous allons voir comment supprimer ou désactiver ces ressources.

Si vous avez créé un projet distinct pour ce tutoriel, supprimez-le entièrement. Sinon, si le projet contient des ressources que vous souhaitez conserver, ne supprimez que les ressources créées spécifiquement pour ce tutoriel.

Supprimer le projet

  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.

Supprimer des ressources spécifiques

Si vous ne pouvez pas supprimer le projet utilisé pour ce tutoriel, supprimez les ressources de ce dernier individuellement.

Supprimer le groupe d'instances

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

Supprimer le modèle d'instance

Console

  1. Dans Google Cloud Console, accédez à la page Modèles d'instances.

    Accéder à la page Modèles d'instances

  2. Cochez la case en regard du modèle d'instance.

  3. Cliquez sur  Supprimer en haut de la page. Dans la nouvelle fenêtre, cliquez sur Supprimer pour confirmer la suppression.

gcloud

gcloud compute instance-templates delete webserver-template -q

Supprimer la vérification de l'état

Console

  1. Dans Google Cloud Console, accédez à la page Vérifications d'état.

    Accéder à la page "Vérifications d'état"

  2. Cochez la case en regard de la vérification de l'état.

  3. Cliquez sur  Supprimer en haut de la page. Dans la nouvelle fenêtre, cliquez sur Supprimer pour confirmer la suppression.

gcloud

gcloud compute health-checks delete autohealer-check -q

Supprimer les règles de pare-feu

Console

  1. Dans Google Cloud Console, accédez à la page Règles de pare-feu.

    Accéder aux règles de pare-feu

  2. Cochez les cases en regard des règles de pare-feu nommées default-allow-http et default-allow-http-health-check.

  3. Cliquez sur  Supprimer en haut de la page. Dans la nouvelle fenêtre, cliquez sur Supprimer pour confirmer la suppression.

gcloud

gcloud compute firewall-rules delete default-allow-http default-allow-http-health-check -q

Étapes suivantes