Créer des instantanés de disque d'application cohérent Linux


Vous pouvez créer des instantanés d'application cohérents pour les disques associés à des instances de machines virtuelles (VM) Linux. En général, la qualité de votre instantané de disque 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, 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 cohérent de vos disques, 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).
  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

  • Créer une VM Linux.
  • Mettre à jour l'environnement invité.
  • Si ce n'est pas déjà fait, configurez l'authentification. L'authentification est le processus permettant de valider votre identité pour accéder aux services et aux API Google Cloud. Pour exécuter du code ou des exemples depuis un environnement de développement local, vous pouvez vous authentifier auprès de Compute Engine comme suit :

    Sélectionnez l'onglet correspondant à la façon dont vous prévoyez d'utiliser les exemples de cette page :

    Console

    Lorsque vous utilisez la console Google Cloud pour accéder aux services et aux API Google Cloud, vous n'avez pas besoin de configurer l'authentification.

    gcloud

    1. Installez Google Cloud CLI, puis initialisez-la en exécutant la commande suivante :

      gcloud init
    2. Définissez une région et une zone par défaut.

    REST

    Pour utiliser les exemples d'API REST de cette page dans un environnement de développement local, vous devez utiliser les identifiants que vous fournissez à gcloud CLI.

      Installez Google Cloud CLI, puis initialisez-la en exécutant la commande suivante :

      gcloud init

Rôles et autorisations requis

Pour obtenir les autorisations nécessaires pour gérer les instantanés standards, demandez à votre administrateur de vous accorder les rôles IAM suivants sur le projet :

Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.

Ces rôles prédéfinis contiennent les autorisations requises pour gérer les instantanés standards. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Les autorisations suivantes sont requises pour gérer les instantanés standards :

  • Pour créer un instantané d'un disque zonal :
    • compute.snapshots.create sur le projet
    • compute.disks.createSnapshot sur le disque
  • Pour créer un instantané d'un disque régional à l'aide des données stockées sur le disque :
    • compute.snapshots.create sur le projet
    • compute.instances.useReadOnly sur la VM source
    • compute.disks.createSnapshot sur le disque
  • Pour créer un instantané d'un disque régional à partir d'un point de contrôle de récupération d'instance dupliquée :
    • compute.snapshots.create sur le projet
    • compute.disks.createSnapshot sur le disque
  • Pour créer une programmation d'instantanés : compute.resourcePolicies.create sur le projet ou l'organisation
  • Pour associer une programmation d'instantanés à un disque :
    • compute.disks.addResourcePolicies sur le disque
    • compute.resourcePolicies.use sur la règle de ressource
  • Pour supprimer un instantané, procédez comme suit :
    • compute.snapshots.delete sur l'instantané
    • compute.snapshots.list sur le projet

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.

Limites

La création d'instantanés d'application cohérents sous Linux présente les limites suivantes :

  • 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é, l'instantané n'est pas créé si le script renvoie une erreur ou atteint le délai avant expiration.

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.
  • Vider les tampons de disque. Par exemple, MySQL possède une instruction FLUSH. Utilisez n'importe quel outil disponible pour votre application.
  • Synchronisez votre système de fichiers.

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

#!/bin/bash
sudo 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
sudo 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 pour lesquels vous créez des instantanés. 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 pour quel disque l'instantané est créé.

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 associé à SCSI 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é.

    edit /etc/default/instance_configs.cfg
    
  2. Ajoutez la section suivante au fichier de configuration, puis enregistrez vos modifications et quittez l'éditeur.

    [Snapshots]
    enabled = ENABLED
    timeout_in_seconds = TIMEOUT_SECONDS
    

    Remplacez les éléments suivants :

    • ENABLED : définissez cette valeur sur true pour activer la fonctionnalité d'instantané cohérent pour l'application. La valeur par défaut est false.
    • TIMEOUT_SECONDS : nombre de secondes que le script avant ou après l'instantané peut prendre pour terminer de s'exécuter avant expiration. La valeur entière doit être comprise entre 0 et 300. La valeur par défaut est 60.

  3. Redémarrez l'agent invité pour utiliser les nouveaux 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 la console Google Cloud, de la Google Cloud CLI ou de REST, 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é dans la console Google Cloud.

    Accéder à la page "Créer un instantané"
  2. Saisissez un nom d'instantané.
  3. Sélectionnez un Type d'instantané. La valeur par défaut est un instantané STANDARD, qui est la meilleure option pour la sauvegarde à long terme et la reprise après sinistre.

    Choisissez Instantané d'archive pour une conservation des données plus économique.

  4. (Facultatif) Saisissez une Description de l'instantané.
  5. Sous Disque source, sélectionnez le disque existant dont vous souhaitez créer un instantané.
  6. Dans la section Emplacement, choisissez l'emplacement de stockage de votre instantané.

    L'emplacement par défaut prédéfini ou personnalisé configuré dans vos paramètres d'instantanés est automatiquement sélectionné. Vous pouvez éventuellement remplacer les paramètres d'instantané et stocker vos instantanés dans un emplacement de stockage personnalisé en procédant comme suit :

    1. Choisissez le type d'emplacement de stockage souhaité pour votre instantané.

      • Choisissez Multirégional pour une disponibilité plus élevée à un coût plus élevé.
      • Choisissez des instantanés régionaux pour mieux contrôler l'emplacement physique de vos données, à moindre coût.
    2. Dans le champ Sélectionner un emplacement, sélectionnez la région ou l'emplacement multirégional spécifique que vous souhaitez utiliser. Pour utiliser la région ou l'emplacement multi-régional le plus proche de votre disque source, sélectionnez Basé sur l'emplacement du disque.
  7. Cochez l'option Activer l'instantané d'application cohérent.
  8. Cliquez sur Créer pour créer l'instantané.

gcloud

Vous pouvez créer votre instantané dans la stratégie d'emplacement de stockage définie par vos paramètres d'instantanés ou en utilisant un autre emplacement de stockage de votre choix. Pour en savoir plus, consultez la section Choisir l'emplacement de stockage de vos instantanés.

  • Pour créer un instantané à l'emplacement par défaut prédéfini ou personnalisé configuré dans vos paramètres d'instantané, utilisez la commande gcloud compute snapshots create.

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk-zone=SOURCE_ZONE \
        --source-disk=SOURCE_DISK_NAME \
        --snapshot-type=SNAPSHOT_TYPE \
        --guest-flush
    
  • Sinon, pour remplacer les paramètres d'instantané et créer un instantané dans un emplacement de stockage personnalisé, incluez l'option --storage-location pour spécifier où stocker l'instantané.

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk-zone=SOURCE_ZONE \
        --source-disk=SOURCE_DISK_NAME \
        --snapshot-type=SNAPSHOT_TYPE \
        --storage-location=STORAGE_LOCATION \
        --guest-flush
    

    Remplacez les éléments suivants :

    • SNAPSHOT_NAME : nom de l'instantané.
    • SOURCE_ZONE : zone du disque source.
    • SOURCE_DISK_NAME : nom du volume de disque à partir duquel vous souhaitez créer un instantané.
    • SNAPSHOT_TYPE : type d'instantané, STANDARD ou ARCHIVE. Si aucun type d'instantané n'est spécifié, un instantané STANDARD est créé.
    • STORAGE_LOCATION : Facultatif : emplacement multirégional Cloud Storage ou la région Cloud Storage dans laquelle vous souhaitez stocker l'instantané. Vous ne pouvez spécifier qu'un seul emplacement de stockage.

      N'utilisez le paramètre --storage-location que si vous souhaitez ignorer l'emplacement de stockage par défaut prédéfini ou personnalisé configuré dans vos paramètres d'instantanés.

REST

Vous pouvez créer votre instantané dans la stratégie d'emplacement de stockage définie par vos paramètres d'instantanés ou en utilisant un autre emplacement de stockage de votre choix. Pour en savoir plus, consultez la section Choisir l'emplacement de stockage de vos instantanés.

  • Pour créer un instantané dans l'emplacement par défaut prédéfini ou personnalisé configuré dans vos paramètres d'instantanés, envoyez une requête POST à la méthode snapshots.insert :

    POST https://compute.googleapis.com/compute/beta/projects/DESTINATION_PROJECT_ID/global/snapshots
    {
      "name": "SNAPSHOT_NAME",
      "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME",
      "snapshotType": "SNAPSHOT_TYPE",
      "guestFlush": true,
    }
    
  • Pour remplacer les paramètres d'instantané et créer un instantané dans un emplacement de stockage personnalisé, vous pouvez aussi envoyer une requête POST à la méthode snapshots.insert et incluez la propriété storageLocations dans votre requête :

    POST https://compute.googleapis.com/compute/beta/projects/DESTINATION_PROJECT_ID/global/snapshots
    {
      "name": "SNAPSHOT_NAME",
      "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME",
      "snapshotType": "SNAPSHOT_TYPE",
      "storageLocations": [
          "STORAGE_LOCATION"
      ],
      "guestFlush": true,
    }
    

Remplacez les éléments suivants :

  • DESTINATION_PROJECT_ID : ID du projet dans lequel vous souhaitez créer l'instantané.
  • SNAPSHOT_NAME : nom de l'instantané.
  • SOURCE_PROJECT_ID : ID de projet du disque source.
  • SOURCE_ZONE : zone du disque source.
  • SOURCE_DISK_NAME : nom du volume de disque à partir duquel vous souhaitez créer un instantané.
  • SNAPSHOT_TYPE : type d'instantané, STANDARD ou ARCHIVE. Si aucun type d'instantané n'est spécifié, un instantané STANDARD est créé.
  • STORAGE_LOCATION : Facultatif : emplacement multirégional Cloud Storage ou la région Cloud Storage dans laquelle vous souhaitez stocker l'instantané. Vous ne pouvez spécifier qu'un seul emplacement de stockage.

    N'utilisez le paramètre storageLocations que si vous souhaitez ignorer l'emplacement de stockage par défaut prédéfini ou personnalisé configuré dans vos paramètres d'instantanés.

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

Programmez des instantanés programmés pour sauvegarder régulièrement et automatiquement vos disques Persistent Disk et Google Cloud Hyperdisk 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é le fichier de configuration de votre environnement invité et créé des scripts personnalisés, la commande suivante crée des instantanés horaires cohérents avec les applications :

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 À propos des programmations d'instantanés pour des disques.

Dépannage

Pour dépanner le processus de création d'instantané, procédez comme suit :

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

    1. Dans la console Google Cloud, accédez à la page Journalisation de Google Cloud Observability > Journaux :
      Accéder à l'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 le champ 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 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, consultez la page Créer une VM.

Étapes suivantes