Criar snapshots de disco consistentes com o aplicativo Linux

É 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:

  1. 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
  2. Defina as configurações de snapshots na instância de VM.
  3. Crie um snapshot com a opção guest-flush ativada. A opção guest-flush inicia os scripts de pré e pós-snapshot.

Antes de começar

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:

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.create no projeto
  • compute.disks.createSnapshot no 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-flush na 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.

  1. Abra ou crie o arquivo de configuração do ambiente de convidado.

    edit /etc/default/instance_configs.cfg
    
  2. Adicione 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 como true para 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.

  3. 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

  1. Acesse a página Criar um snapshot no console do Google Cloud .

    Acessar a página "Criar um snapshot"
  2. Digite um Nome de snapshot.
  3. 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.

  4. Opcional: insira uma Descrição sobre o snapshot.
  5. Em Disco de origem, selecione o disco do qual você quer criar um snapshot.
  6. 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:

    1. 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.
    2. 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.
  7. Marque a opção Ativar snapshot consistente do aplicativo.
  8. 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-location para 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 --region para 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 STANDARD será 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-location somente 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 POST para o método snapshots.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 POST ao método snapshots.insert e inclua nela a propriedade storageLocations:

    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 POST ao método snapshots.insert e 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 STANDARD será 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 storageLocations somente 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

  1. Acesse a página da Análise de registros no console doGoogle Cloud :

    Acessar a Análise de registros

  2. Cole a seguinte consulta no painel de consulta de registro:

    resource.type="gce_disk"
    jsonPayload.event_subtype="compute.disks.createSnapshot" OR
    protoPayload.methodName="ScheduledSnapshots"
    
  3. Execute a consulta e investigue os registros:

    consulta de registro de criação de snapshots.

Verificar as configurações

A seguir