Créer un instantané de disque persistant d'application cohérent Linux

Vous pouvez créer des instantanés d'application cohérents pour les disques persistants associés à des instances de machines virtuelles (VM) Linux. En général, la qualité de votre instantané de disque persistant dépend de la capacité de vos applications à récupérer les instantanés que vous créez lors de lourdes charges de travail en écriture. Les instantanés d'application cohérents capturent l'état des données d'application au moment de la sauvegarde, avec toutes les transactions d'application terminées et toutes les écritures en attente vidées sur le disque.

Pour créer des instantanés cohérents pour les applications, mettez en pause les applications ou les processus du système d'exploitation qui écrivent des données sur le disque persistant, videz les tampons du disque et synchronisez le système de fichiers avant de créer l'instantané. Selon votre application, ces étapes et d'autres étapes peuvent être nécessaires pour vous assurer que toutes les transactions d'application sont terminées et enregistrées dans la sauvegarde.

Pour créer un instantané d'application de vos disques persistants, procédez comme suit :

  1. Pour préparer l'environnement invité pour la cohérence des applications, créez des scripts shell personnalisés à exécuter avant et après la capture de l'instantané.
  2. Configurez les paramètres d'instantané sur votre instance de machine virtuelle (VM, virtual machine).
  3. Créez ensuite un instantané avec l'option guest-flush activée. L'option guest-flush démarre vos scripts pré et post instantané.

Avant de commencer

Restrictions

  • La cohérence de l'application n'est garantie que par le comportement de vos scripts pré et post instantané personnalisés, et non par l'opération d'instantané elle-même.
  • Lorsque vous utilisez l'option guest-flush dans votre requête de création d'instantané, aucun instantané n'est créé en cas d'erreur ou d'expiration du script.

Créer des scripts pré et post instantané

Avant de continuer, mettez à jour l'environnement invité afin d'exécuter le dernier logiciel sur votre VM Linux.

Pour faciliter la cohérence d'application, créez des scripts shell pré et post-instantané qui seront exécutés avant et après la capture de l'instantané. Utilisez les scripts pré et post-instantané pour les opérations telles que :

  • Mettre en veille les applications ou les processus du système d'exploitation exécutés sur la VM qui écrit des données sur le disque persistant.
  • Vider les tampons de disque. Par exemple, MySQL possède une instruction FLUSH. Utilisez n'importe quel outil disponible pour votre application.
  • Synchroniser votre système de fichiers.

L'exemple de code suivant présente un script pré-instantané simple. Notez les caractères #! de début. L'exécution de fsfreeze -f bloque tout processus en cours d'exécution qui tente d'accéder au système de fichiers. Utilisez-le donc avec prudence si votre application est sensible à la latence.

#!/bin/bash
fsfreeze -f [example-disk-location]

L'exemple de code suivant présente un script post-instantané simple. Notez les caractères #! de début.

#!/bin/bash
fsfreeze -u [example-disk-location]

Vous devez enregistrer vos scripts sur votre VM dans le répertoire /etc/google/snapshots/. Le chemin d'accès complet de votre script préliminaire doit être /etc/google/snapshots/pre.sh, et le chemin complet de votre script consécutif doit être /etc/google/snapshots/post.sh.

Référencer des disques spécifiques dans vos scripts

Le premier argument transmis à vos scripts pré et post-instantané est une liste des disques dont les instantanés sont en cours de création. Vous pouvez utiliser cet argument dans vos scripts pour diverses vérifications. Par exemple, si votre VM est associée à plusieurs disques, mais que vous n'avez spécifié qu'un seul disque dans votre requête d'instantané, vous pouvez vérifier quel est le disque dont l'instantané est en cours de création.

Le format de l'argument est le suivant :

  • Disques associés à SCSI : liste de paires <target/lun> séparées par une virgule.
  • Disques associés à NVMe : liste de paires <nvme:namespace> séparées par une virgule.

Par exemple, votre disque de démarrage peut apparaître au format 1/0 tandis qu'un disque supplémentaire associé à la VM peut apparaître au format 2/0.

Modifier le fichier de configuration de votre environnement invité

Configurez les paramètres d'instantané cohérents de votre application en mettant à jour un fichier de configuration spécifique sur votre VM.

  1. Ouvrez ou créez le fichier de configuration de votre environnement invité :

    /etc/default/instance_configs.cfg
    
  2. Ajoutez la section suivante au fichier de configuration :

    [Snapshots]
    enabled = enabled
    timeout_in_seconds = timeout
    

    Remplacez les valeurs en fonction des descriptions ci-dessous :

    Clé Valeur Par défaut Description
    enabled true ou false false Indique si la fonctionnalité d'instantané cohérent pour votre application est activée.
    timeout_in_seconds Entier [0, 300] 60 Nombre de secondes que le script avant ou après l'instantané peut prendre pour terminer de s'exécuter avant une erreur d'expiration du délai. Notez que le nombre de secondes que l'opération d'instantané entière peut prendre pour s'effectuer avant qu'une erreur de délai avant expiration se produise est de 300 secondes par disque, et ceci n'est pas configurable.
  3. Enregistrez vos paramètres de configuration :

    sudo systemctl restart google-guest-agent.service
    

Créer un instantané avec l'option guest-flush activée

À l'aide de Google Cloud Console, de Google Cloud CLI ou de l'API Compute Engine, créez un instantané avec l'option guest-flush activée. Cette opération démarre l'exécution des scripts pré et post instantané.

Console

  1. Accédez à la page Créer un instantané.
  2. Saisissez un nom d'instantané.
  3. Saisissez éventuellement une description de l'instantané.
  4. Sous Disque source, sélectionnez un disque existant à partir duquel vous souhaitez créer un instantané.
  5. Sélectionnez un emplacement de stockage.
  6. Cochez l'option Activer l'instantané d'application cohérent.
  7. Cliquez sur Create (Créer).

gcloud

Exécuter la commande

gcloud compute disks snapshot DISK_NAME [DISK_NAME ...] --guest-flush

Remplacez l'élément suivant :

  • DISK_NAME est le nom d'un ou de plusieurs disques persistants à partir desquels vous souhaitez créer des instantanés.

Google Cloud CLI attend que l'opération renvoie un état READY ou FAILED, ou qu'elle atteigne le délai maximal avant expiration. Il renvoie alors les informations les plus récentes sur l'instantané.

API

Envoyez une requête POST à la méthode disks.createSnapshot avec l'option guestFlush activée :

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME/createSnapshot?guestFlush=true

Remplacez l'élément suivant :

  • PROJECT_ID : ID de votre projet.
  • ZONE : la zone dans laquelle se trouvent l'instance et le disque.
  • DISK_NAME : le nom du disque persistant dont vous souhaitez créer un instantané.

Créer une programmation d'instantanés avec l'option guest-flush activée

Programmez la création d'instantanés pour sauvegarder régulièrement et automatiquement vos disques persistants zonaux et régionaux. Si vous souhaitez planifier des instantanés d'application cohérents pour votre sauvegarde, utilisez l'option --guest-flush lorsque vous créez la programmation d'instantanés afin que les scripts pré et post instantané s'exécutent avant et après chaque instantané programmé.

Par exemple, après avoir configuré mes paramètres et créé des scripts personnalisés, la commande suivante crée des instantanés horaires cohérents pour l'application :

gcloud compute resource-policies create snapshot-schedule SCHEDULE_NAME \
  --description "MY HOURLY SNAPSHOT SCHEDULE" \
  --start-time 22:00 \
  --hourly-schedule 4 \
  --guest-flush

Pour en savoir plus, consultez la section Créer des programmations d'instantanés pour des disques persistants.

Dépannage

  • Consultez les journaux des événements de création d'instantané :

    1. Dans la console, accédez à la page Journalisation de la suite Google Cloud Operations > Journaux
      Accéder à la page "Explorateur de journaux"
    2. Accédez à l'explorateur de journaux sur le panneau de navigation de gauche.
    3. Dans la liste Filtrer par étiquette ou texte recherché, sélectionnez Convertir en filtre avancé.

    Convertir en filtre avancé.

    Remplacez la zone de texte de filtre par le texte suivant :

    resource.type="gce_disk"
    jsonPayload.event_subtype="compute.disks.createSnapshot"
    
  • Si aucun script n'est trouvé, aucun instantané n'est créé. Assurez-vous d'avoir suivi la procédure décrite dans la section Créer des scripts pré et post instantané.

  • En cas d'erreur ou de délai avant expiration du script, aucun instantané n'est créé. Consultez la page Préparer des instantanés cohérents. Notez que le délai avant expiration maximal que vous pouvez configurer dans vos paramètres est de 300 secondes. Répétez l'intégralité du processus en utilisant les exemples de scripts.

  • Un disque persistant doit être associé à une VM pour capturer un instantané du disque avec l'option guest-flush activée. Pour savoir comment créer une VM Linux et associer un disque persistant, consultez la page Créer une VM.

Étape suivante