É possível criar snapshots consistentes com o aplicativo de volumes Persistent Disk anexados a instâncias de máquina virtual (VM) do Linux. Em geral, a qualidade do snapshot do disco depende do modo como os aplicativos podem se recuperar dos snapshots que você cria durante intensas cargas de trabalho de gravação. Os snapshots consistentes com o aplicativo capturam o estado dos dados do aplicativo no momento do backup, com todas as transações do aplicativo concluídas e todas as gravações pendentes liberadas para o disco.
Para criar snapshots consistentes com o aplicativo, pause apps ou processos do sistema operacional que gravam dados no disco, limpe os buffers do disco e sincronize o sistema de arquivos antes de criar o snapshot. Dependendo do aplicativo, essas e outras etapas podem ser necessárias para garantir que todas as transações do aplicativo sejam concluídas e capturadas no backup.
Para criar um snapshot consistente com o aplicativo dos seus discos, use o seguinte processo:
- Para preparar o ambiente de convidado para a consistência do aplicativo, crie scripts de shell personalizados para serem executados antes e depois da captura do snapshot
- Defina as configurações de snapshots na instância de VM.
- Crie um snapshot com a opção
guest-flushativada. A opçãoguest-flushinicia os scripts de pré e pós-snapshot.
Antes de começar
- Crie uma VM do Linux.
- Atualize o ambiente de convidado.
-
Configure a autenticação, caso ainda não tenha feito isso.
Com isso, você confirma sua identidade para acesso a serviços e APIs do Google Cloud . Para executar
códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no
Compute Engine selecionando uma das seguintes opções:
Selecione a guia para como planeja usar as amostras nesta página:
Console
Quando você usa o console do Google Cloud para acessar os serviços e as APIs do Google Cloud , não é necessário configurar a autenticação.
gcloud
-
Instale a Google Cloud CLI e faça login na CLI gcloud com sua identidade federada. Depois de fazer login, inicialize a Google Cloud CLI executando o seguinte comando:
gcloud init
-
- Defina uma região e uma zona padrão.
REST
Para usar as amostras da API REST desta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para a CLI gcloud.
Instale a Google Cloud CLI e faça login na CLI gcloud com sua identidade federada.
Saiba mais em Autenticar para usar REST na documentação de autenticação do Google Cloud .
Papéis e permissões necessárias
Para receber as permissões necessárias para criar um snapshot consistente com o aplicativo, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:
- Administrador da instância do Compute (v1) (
roles/compute.instanceAdmin.v1) -
Para se conectar a uma VM que pode ser executada como uma conta de serviço:
Usuário da conta de serviço (v1) (
roles/iam.serviceAccountUser)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Esses papéis predefinidos contêm as permissões necessárias para criar um snapshot consistente com o aplicativo. Para acessar as permissões exatas necessárias, expanda a seção Permissões necessárias:
Permissões necessárias
As seguintes permissões são necessárias para criar um snapshot consistente com o aplicativo:
-
compute.snapshots.createno projeto -
compute.disks.createSnapshotno disco
Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.
Tipos de disco compatíveis
É possível criar snapshots consistentes com o aplicativo para volumes do Persistent Disk anexados a instâncias do Linux.
Os volumes do Hyperdisk não são compatíveis com
guest-flush ou com o Serviço de cópia de sombra de volume (VSS, na sigla em inglês). Para criar
snapshots consistentes com o aplicativo para volumes do Hyperdisk, pause manualmente
o aplicativo antes de criar o snapshot. Para mais informações, consulte
Criar manualmente
snapshots consistentes com o aplicativo.
Limitações
A criação de snapshots consistentes com o aplicativo no Linux tem as seguintes limitações:
- A consistência do aplicativo depende do comportamento dos seus scripts de pré e pós-snapshot personalizados, e não pela própria operação do snapshot.
- Ao usar a opção
guest-flushna solicitação de criação de snapshot, o snapshot não será criado se o script retornar um erro ou atingir o tempo limite. - Os volumes do Hyperdisk não são compatíveis com
guest-flush.
Criar scripts pré e pós-snapshot
Antes de prosseguir, atualize o ambiente de convidado para que você esteja executando o software mais recente na sua VM do Linux.
Para facilitar a consistência do aplicativo, crie scripts de shell pré e pós para serem executados antes e depois da captura do snapshot. Use os scripts pré e pós para operações como:
- Pause os apps ou processos do sistema operacional em execução na VM que grava dados no disco.
- Esvaziar os buffers do disco. Por exemplo, o MySQL tem uma instrução
FLUSH. Use a ferramenta que estiver disponível para o aplicativo. - Sincronize seu sistema de arquivos.
O exemplo de código a seguir mostra um script pré-snapshot. Observe os caracteres iniciais #!.
#!/bin/bash sudo fsfreeze -f [example-disk-location]
No exemplo de código a seguir, mostramos um script de snapshot de postagem. Observe os #! caracteres iniciais.
#!/bin/bash sudo fsfreeze -u [example-disk-location]
Salve os scripts na VM no diretório /etc/google/snapshots/. O caminho completo do script de pré-lançamento precisa ser
/etc/google/snapshots/pre.sh e o caminho completo do script de postagem precisa ser
/etc/google/snapshots/post.sh.
Como referenciar discos específicos nos scripts
O primeiro argumento transmitido aos scripts pré e pós-snapshot é uma lista de discos para os quais você está criando snapshots. É possível usar esse argumento nos scripts para várias verificações. Por exemplo, se a VM tiver vários discos anexados, mas você tiver especificado apenas um disco na solicitação de snapshot, será possível verificar para qual disco o snapshot está sendo criado.
O argumento é formatado da seguinte forma:
- Discos anexados por SCSI: uma lista separada por vírgulas de pares
<target/lun>. - Discos anexados ao NVME: uma lista separada por vírgulas de pares
<nvme:namespace>.
Por exemplo, seu disco de inicialização anexado a SCSI pode aparecer como 1/0, enquanto um outro disco anexado à VM pode aparecer como 2/0.
Editar o arquivo de configuração do ambiente de convidado
Defina as configurações de snapshot consistentes com o aplicativo atualizando um arquivo de configuração específico na VM.
Abra ou crie o arquivo de configuração do ambiente de convidado.
edit /etc/default/instance_configs.cfgAdicione a seção a seguir ao arquivo de configuração, salve as alterações e saia do editor.
[Snapshots] enabled = ENABLED timeout_in_seconds = TIMEOUT_SECONDS
Substitua:
ENABLED: defina comotruepara ativar o recurso de snapshot consistente do aplicativo. O valor padrão éfalse.TIMEOUT_SECONDS: o número de segundos que o script de antes ou pós-snapshot pode levar para concluir a execução antes de expirar. O valor inteiro precisa estar entre 0 e 300. O valor padrão é60.
Reinicie o agente convidado para usar as novas definições de configuração.
$ sudo systemctl restart google-guest-agent.service
Criar um snapshot com guest-flush ativado
Usando o console do Google Cloud , a Google Cloud CLI ou REST,
crie um snapshot com a opção guest-flush ativada. Isso começa a executar os scripts de snapshot anterior e posterior antes e depois da captura.
Console
Acesse a página Criar um snapshot no console do Google Cloud .
Acessar a página "Criar um snapshot"- Digite um Nome de snapshot.
-
Selecione um Tipo de snapshot. O snapshot padrão é
STANDARD, que é a melhor opção para backup de longo prazo e recuperação de desastres.Escolha Snapshot de arquivamento para uma retenção de dados mais econômica.
- Opcional: insira uma Descrição sobre o snapshot.
- Em Disco de origem, selecione o disco do qual você quer criar um snapshot.
Na seção Local, escolha o local de armazenamento dos snapshots.
O local padrão predefinido ou personalizado definido nas configurações de snapshot é selecionado automaticamente. Se preferir, modifique as configurações dos snapshots e os armazene em um local de armazenamento personalizado da seguinte forma:
Escolha o tipo de local de armazenamento que você quer para os snapshots.
- Escolha Multirregional para maior disponibilidade por um custo mais alto.
- Escolha Snapshots regionais para ter mais controle sobre a localização física dos dados por um custo menor.
- No campo Selecionar local, escolha a região ou multirregião específica que você quer usar. Para usar a região ou multirregião mais próxima do disco de origem, selecione Com base no local do disco.
- Marque a opção Ativar snapshot consistente do aplicativo.
- Clique em Criar para criar o snapshot.
gcloud
Crie o snapshot na política de local de armazenamento definida pelas configurações do snapshot ou usando um local de armazenamento alternativo de sua escolha. Para mais informações, consulte Escolher o local de armazenamento dos snapshots.
Para criar um snapshot no local padrão predefinido ou personalizado definido nas configurações do snapshot, use o comando
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-
Como alternativa, para substituir as configurações de snapshot e criar um snapshot em um local de armazenamento personalizado, inclua a flag
--storage-locationpara indicar onde ele deve ser armazenado: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 -
(Pré-lançamento) Para criar um snapshot com escopo regional em uma região permitida, inclua a flag
--regionpara indicar onde criar o snapshot.gcloud beta compute snapshots create SNAPSHOT_NAME \ --region=SNAPSHOT_SCOPE_REGION --source-disk=SOURCE_DISK_NAME \ --source-disk-zone=SOURCE_ZONE \ --snapshot-type=SNAPSHOT_TYPE
Substitua:
- SNAPSHOT_NAME: um nome para o snapshot.
- SOURCE_ZONE: a zona do disco de origem.
- SOURCE_DISK_NAME: o nome do volume de disco a partir do qual você quer criar um snapshot.
- SNAPSHOT_TYPE: o tipo de snapshot, que é STANDARD ou
ARCHIVE.
Se um tipo de snapshot não for especificado, um snapshot
STANDARDserá criado. -
STORAGE_LOCATION (opcional): para snapshots com escopo global, a multirregião do Cloud Storage ou a região do Cloud Storage em que você quer armazenar o snapshot. É possível especificar apenas um local de armazenamento.
Use o parâmetro
--storage-locationsomente quando quiser substituir o local de armazenamento padrão predefinido ou personalizado que está definido nas configurações de snapshot. -
SNAPSHOT_SCOPE_REGION (opcional): para snapshots com escopo regional, a região em que o snapshot está no escopo. Se você incluir esse parâmetro, não poderá usar o parâmetro
--storage-location. O STORAGE_LOCATION é definido automaticamente como SNAPSHOT_SCOPE_REGION.
REST
Crie o snapshot na política de local de armazenamento definida pelas configurações do snapshot ou usando um local de armazenamento alternativo de sua escolha. Para mais informações, consulte Escolher o local de armazenamento dos snapshots.
-
Para criar o snapshot no local padrão predefinido ou personalizado configurado nas configurações de snapshot, faça uma solicitação
POSTpara o métodosnapshots.insert.POST https://compute./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, } -
Como alternativa, para substituir as configurações de snapshot e criar um snapshot em um local de armazenamento personalizado, faça uma solicitação
POSTao métodosnapshots.inserte inclua nela a propriedadestorageLocations:POST https://compute./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, } -
(Pré-lançamento) Para criar um snapshot com escopo regional em uma região permitida, faça uma solicitação
POSTao métodosnapshots.inserte defina a região de criação:POST https://compute./compute/beta/projects/DESTINATION_PROJECT_ID/regions/SNAPSHOT_SCOPE_REGION/snapshots { "name": "SNAPSHOT_NAME", "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME", "snapshotType": "SNAPSHOT_TYPE" }
Substitua:
- DESTINATION_PROJECT_ID: o ID do projeto em que você quer criar o snapshot.
- SNAPSHOT_NAME: um nome para o snapshot.
- SOURCE_PROJECT_ID: o ID do projeto de disco de origem.
- SOURCE_ZONE: a zona do disco de origem.
- SOURCE_DISK_NAME: o nome do disco a partir do qual você quer criar um snapshot.
- SNAPSHOT_TYPE: o tipo de snapshot, que é STANDARD ou
ARCHIVE.
Se um tipo de snapshot não for especificado, um snapshot
STANDARDserá criado. -
STORAGE_LOCATION (opcional): para snapshots com escopo global, a multirregião do Cloud Storage ou a região do Cloud Storage em que você quer armazenar o snapshot. É possível especificar apenas um local de armazenamento.
Use o parâmetro
storageLocationssomente quando quiser substituir o local de armazenamento padrão predefinido ou personalizado que está definido nas configurações de snapshot. SNAPSHOT_SCOPE_REGION (opcional): para snapshots com escopo regional, a região em que o snapshot está. Se você incluir esse parâmetro, não poderá usar o parâmetro
storageLocations. O STORAGE_LOCATION é definido automaticamente como SNAPSHOT_SCOPE_REGION.
Criar uma programação de snapshot com o guest-flush ativado
É possível ativar backups regulares e automáticos consistentes com o aplicativo dos volumes zonais e
regionais do Persistent Disk com programações de snapshot. Para ativar
snapshots consistentes com o aplicativo para os snapshots programados, use a opção --guest-flush
ao criar a programação de snapshot para que os scripts pré e pós-snapshot
sejam executados antes e depois de cada snapshot programado.
Por exemplo, depois de definir o arquivo de configuração do ambiente para convidado e criar scripts personalizados, o comando a seguir cria snapshots consistentes com o aplicativo por hora:
gcloud compute resource-policies create snapshot-schedule SCHEDULE_NAME \ --description "MY HOURLY SNAPSHOT SCHEDULE" \ --start-time 22:00 \ --hourly-schedule 4 \ --guest-flush \ --max-retention-days SNAPSHOT_RETENTION_AGE
Para saber mais, consulte Sobre programações de snapshots para discos.
Solução de problemas
Resolva problemas com a programação e o processo de criação de snapshots analisando os registros e as configurações.
Analisar os registros
Acesse a página da Análise de registros no console doGoogle Cloud :
Cole a seguinte consulta no painel de consulta de registro:
resource.type="gce_disk" jsonPayload.event_subtype="compute.disks.createSnapshot" OR protoPayload.methodName="ScheduledSnapshots"Execute a consulta e investigue os registros:
Verificar as configurações
Se nenhum script pré ou pós-snapshot for encontrado na instância para congelar a atividade/IOPS no sistema de arquivos, nenhum snapshot será criado. Verifique se você seguiu as etapas em Criar scripts pré e pós-snapshot.
Se houver um erro de script ou tempo limite, nenhum snapshot será criado. Consulte Como se preparar para snapshots consistentes. O tempo limite máximo para você definir nas configurações é de 300 segundos. Repita todo o processo usando os scripts de amostra.
Um disco precisa ser anexado a uma VM para capturar um snapshot do disco com
guest-flushativado. Para saber como criar uma VM do Linux e anexar um disco, consulte Como criar uma VM.