Créer un instantané de disque persistant cohérent pour les applications Linux

Vous pouvez créer des instantanés cohérents pour les applications à partir de disques persistants associés à des instances de machines virtuelles (VM) Linux. En général, la qualité de l'instantané de votre disque persistant dépend de la capacité de vos applications à récupérer les instantanés que vous créez lors des charges de travail en écriture lourdes. Les instantanés cohérents au niveau de l'application capturent l'état des données de l'application au moment de la sauvegarde, une fois 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 de l'instantané sur votre instance de machine virtuelle (VM).
  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 des applications 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 de délai avant expiration du script.
  • Vous pouvez créer des instantanés cohérents pour les applications seulement à partir de disques persistants associés à certaines images Linux publiques ou personnalisées. Les images suivantes sont acceptées :
    • CentOS 7
    • CentOS 8
    • Debian 9 Stretch
    • Debian 10 Buster
    • RHEL 7
    • RHEL 8
    • SLES 12
    • SLES 15
    • Ubuntu 18.04
    • Ubuntu 20.04

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 post-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 donc cette option 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 post-instantané 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 en cours de capture. 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 le disque en cours de capture.

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 en tant que 1/0 alors qu'un disque supplémentaire associé à la VM peut apparaître en tant que 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 guest-flush activé

À l'aide de Google Cloud Console, de l'outil de ligne de commande gcloud ou de l'API Compute Engine, créez un instantané avec l'option guest-flush activée. Cette opération commence à exécuter les scripts pré et post-instantané, avant et après la capture.

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é cohérent pour l'application.
  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 du ou des disques persistants pour lesquels vous souhaitez créer des instantanés.

L'outil de ligne de commande gcloud attend que l'opération renvoie un état READY ou FAILED, ou 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

Utilisez des instantanés programmés pour sauvegarder régulièrement et automatiquement vos disques persistants zonaux et régionaux. Si vous souhaitez planifier des instantanés cohérents pour l'application 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é planifié.

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 instantanés planifiés de disques persistants.

Dépannage

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

    1. Dans Cloud Console, accédez à la page Google Cloud's operations suite Logging > Logs (Journaux de la suite Google Cloud Operations > Journaux) :
      Accéder à la page "Visionneuse de journaux".
    2. Accédez à la Visionneuse de journaux dans 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 d'attente du script, aucun instantané n'est créé. Consultez la page Préparer des instantanés cohérents. Notez que le délai d'expiration maximal que vous pouvez configurer dans vos paramètres est de 300 secondes. Répétez l'ensemble du processus à l'aide des 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 section Créer une VM.

Étape suivante