Criar snapshots de discos consistentes do aplicativo Linux


Crie snapshots consistentes de aplicativos de discos permanentes anexados a instâncias de máquina virtual (VM) do Linux. Em geral, a qualidade do snapshot do disco permanente 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 do 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, pausar apps ou processos do sistema operacional que gravam dados no disco permanente, 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 do aplicativo dos seus discos permanentes, 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. definir as configurações do snapshot na instância de máquina virtual (VM).
  3. Crie um snapshot com a opção guest-flush ativada. A opção guest-flush inicia seus scripts de snapshot pré e pós.

Antes de começar

  • Crie uma VM do Linux.
  • Atualize o ambiente de convidado.
  • Configure a autenticação.

    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

    1. Instale a Google Cloud CLI e inicialize-a executando o seguinte comando:

      gcloud init
    2. Defina uma região e uma zona padrão.

    REST

    Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para a CLI gcloud.

      Instale a Google Cloud CLI e inicialize-a executando o seguinte comando:

      gcloud init

Restrições

  • A consistência do aplicativo é garantida apenas pelo 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, nenhum snapshot é criado no caso de um erro de script ou tempo limite.

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 permanente.
  • Esvaziar os buffers do disco. Por exemplo, o MySQL tem uma instrução FLUSH (em inglês). 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 #!. A execução de fsfreeze -f bloqueia qualquer processo em execução que tente acessar o sistema de arquivos. Portanto, use isso com cuidado se seu aplicativo for sensível à latência.

#!/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 para os scripts de snapshot pré e pós é uma lista de discos que estão sendo instantâneos. É 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 na solicitação de snapshot, será possível verificar qual disco 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 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 do aplicativo atualizando um arquivo de configuração específico na VM.

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

    /etc/default/instance_configs.cfg
    
  2. Adicione a seguinte seção ao arquivo de configuração:

    [Snapshots]
    enabled = enabled
    timeout_in_seconds = timeout
    

    Substitua os valores de acordo com as seguintes descrições:

    Chave Valor Padrão Descrição
    enabled true ou false false Se o recurso de snapshot consistente do aplicativo está ativado.
    timeout_in_seconds Inteiro [0, 300] 60 Número de segundos que o script pré ou pós-snapshot pode levar para concluir a execução antes de um erro de tempo limite. Observe que o número de segundos que toda a operação de snapshot pode levar para ser concluída antes de um erro de tempo limite é de 300 segundos por disco. Isso não é configurável.
  3. Salve as configurações:

    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 novo snapshot.
  2. Digite um Nome para o snapshot.
  3. Como opção, digite uma Descrição para o snapshot.
  4. Em Disco de origem, selecione um disco atual a partir do qual você quer criar um snapshot.
  5. Selecione um local de armazenamento.
  6. Marque a opção Ativar snapshot consistente do aplicativo.
  7. Clique em Criar.

gcloud

Execute o comando

gcloud compute disks snapshot DISK_NAME [DISK_NAME ...] --guest-flush

Substitua:

  • DISK_NAME é o nome de um ou mais discos permanentes com que você quer criar snapshots.

A CLI do Google Cloud aguarda até que um status READY ou FAILED seja retornado ou retorna os últimos detalhes conhecidos do snapshot após o tempo limite máximo ter se esgotado.

REST

Faça uma solicitação POST ao método disks.createSnapshot com a opção guestFlush ativada:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME/createSnapshot?guestFlush=true

Substitua:

  • PROJECT_ID: o ID do projeto.
  • ZONE: a zona em que a VM e o disco estão localizados;
  • DISK_NAME: o nome do disco permanente a partir do qual você quer criar um snapshot.

Criar uma programação de snapshot com o guest-flush ativado

Use snapshots programados para fazer backup regular e automático dos discos permanentes zonais e regionais. Se quiser programar snapshots consistentes do aplicativo para o backup, 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 minhas configurações e criar scripts personalizados, o comando a seguir cria snapshots consistentes de aplicativos 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

Para saber mais, consulte Como criar snapshots agendados de discos permanentes.

Solução de problemas

  • Revise os registros dos seus eventos de criação de snapshot:

    1. No console do Google Cloud, acesseGeração de registros do pacote de operações do Google Cloud> Registros página:
      Acessar o Explorador de registros
    2. Acesse Explorador de registros na barra de navegação à esquerda.
    3. Na lista Filtrar por rótulo ou pesquisa de texto, selecione Converter para filtro avançado.

    Converter para filtro avançado.

    Substitua o campo de filtro pelo seguinte texto:

    resource.type="gce_disk"
    jsonPayload.event_subtype="compute.disks.createSnapshot"
    
  • Se nenhum script for encontrado, nenhum snapshot será criado Verifique se você seguiu as etapas em Criar scripts de snapshot pré e postar.

  • 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 permanente precisa ser anexado a uma VM para capturar um snapshot do disco com guest-flush ativado. Para saber como criar uma VM do Linux e anexar um disco permanente, consulte Como criar uma VM.

A seguir