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 :
- 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é.
- Configurez les paramètres d'instantané sur votre instance de machine virtuelle (VM).
- Créez ensuite un instantané avec l'option
guest-flush
activée. L'optionguest-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
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- 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.
Install the Google Cloud CLI, then initialize it by running the following command:
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 :
-
Administrateur d'instances Compute (v1) (
roles/compute.instanceAdmin.v1
) -
Pour se connecter à une VM pouvant s'exécuter en tant que compte de service : utilisateur du compte de service (v1) (
roles/iam.serviceAccountUser
)
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
compute.disks.createSnapshot
-
-
Pour créer un instantané d'un disque régional à l'aide des données stockées sur le disque :
-
compute.snapshots.create
-
compute.instances.useReadOnly
compute.disks.createSnapshot
-
-
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
compute.disks.createSnapshot
-
-
Pour créer une programmation d'instantanés :
compute.resourcePolicies.create
- Pour associer une programmation d'instantanés à un disque :
-
compute.disks.addResourcePolicies
compute.resourcePolicies.use
-
- Pour supprimer un instantané, procédez comme suit :
compute.snapshots.delete
compute.snapshots.list
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.
Ouvrez ou créez le fichier de configuration de votre environnement invité.
edit /etc/default/instance_configs.cfg
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 surtrue
pour activer la fonctionnalité d'instantané cohérent pour l'application. La valeur par défaut estfalse
.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 est60
.
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
Accédez à la page Créer un instantané dans la console Google Cloud.
Accéder à la page "Créer un instantané"- Saisissez un nom d'instantané.
-
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.
- (Facultatif) Saisissez une Description de l'instantané.
- Sous Disque source, sélectionnez le disque existant dont vous souhaitez créer un instantané.
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 :
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.
- 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.
- Cochez l'option Activer l'instantané d'application cohérent.
- 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éthodesnapshots.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éthodesnapshots.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é :
- Dans la console Google Cloud, accédez à la page Journalisation de Google Cloud Observability > Journaux :
Accéder à l'Explorateur de journaux - Accédez à l'explorateur de journaux sur le panneau de navigation de gauche.
- Dans la liste Filtrer par étiquette ou texte recherché, sélectionnez Convertir en filtre avancé.
Remplacez le champ de filtre par le texte suivant :
resource.type="gce_disk" jsonPayload.event_subtype="compute.disks.createSnapshot"
- Dans la console Google Cloud, accédez à la page Journalisation de Google Cloud Observability > Journaux :
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.