Criar instantâneos de disco consistentes de aplicativos Linux


Você pode criar snapshots consistentes de aplicativos de discos anexados a instâncias de máquinas virtuais (VM) Linux. Em geral, a qualidade do instantâneo do disco depende de quão bem seus aplicativos podem se recuperar de instantâneos criados durante cargas de trabalho de gravação pesadas. 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 instantâneos consistentes com aplicativos, pause aplicativos ou processos do sistema operacional que gravam dados no disco, libere os buffers de disco e sincronize o sistema de arquivos antes de criar o instantâneo. Dependendo do seu 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 instantâneo consistente de aplicativo dos seus discos, use o seguinte processo:

  1. Para preparar o ambiente convidado para 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 snapshot na sua instância de máquina virtual (VM).
  3. Crie um instantâneo com a opção guest-flush habilitada. A opção guest-flush inicia seus scripts de pré e pós-instantâneo.

Antes de começar

  • Crie uma VM Linux .
  • Atualize o ambiente convidado .
  • Se ainda não o fez, configure a autenticação. Autenticação é o processo pelo qual sua identidade é verificada para acesso a Google Cloud serviços e APIs. Para executar códigos ou amostras em um ambiente de desenvolvimento local, você pode se autenticar no Compute Engine selecionando uma das seguintes opções:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.
    3. REST

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

        After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      Para mais informações, consulte Autenticar para usar REST na documentação de autenticação do Google Cloud.

Funções e permissões necessárias

Para obter as permissões necessárias para gerenciar snapshots padrão, peça ao administrador que conceda a você as seguintes funções do IAM no projeto:

Para obter mais informações sobre a concessão de funções, consulte Gerenciar acesso a projetos, pastas e organizações .

Essas funções predefinidas contêm as permissões necessárias para gerenciar instantâneos padrão. Para ver 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 gerenciar snapshots padrão:

  • Para criar um instantâneo de um disco zonal:
    • compute.snapshots.create no projeto
    • compute.disks.createSnapshot no disco
  • Para criar um instantâneo de um disco regional usando os dados do disco:
    • compute.snapshots.create no projeto
    • compute.instances.useReadOnly na VM de origem
    • compute.disks.createSnapshot no disco
  • Para criar um instantâneo de um disco regional a partir de um ponto de verificação de recuperação de réplica:
    • compute.snapshots.create no projeto
    • compute.disks.createSnapshot no disco
  • Para criar um agendamento de snapshot: compute.resourcePolicies.create no projeto ou organização
  • Para anexar uma programação de snapshot a um disco:
    • compute.disks.addResourcePolicies no disco
    • compute.resourcePolicies.use na política de recursos
  • Para excluir um instantâneo:
    • compute.snapshots.delete no instantâneo
    • compute.snapshots.list no projeto

Você também poderá obter essas permissões com funções personalizadas ou outras funções predefinidas .

Limitações

A criação de snapshots consistentes de aplicativos no Linux tem as seguintes limitações:

  • A consistência do aplicativo é garantida apenas pelo comportamento de seus scripts personalizados pré e pós-instantâneo, e não pela operação de instantâneo em si.
  • 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 limite de tempo limite.

Crie scripts pré e pós-instantâneo

Antes de continuar, atualize o ambiente convidado para que você execute o software mais recente em sua VM Linux.

Para facilitar a consistência do aplicativo, crie scripts de shell pré e pós-instantâneo para serem executados antes e depois da captura do instantâneo. Use os scripts pré e pós para operações como:

  • Pause aplicativos ou processos do sistema operacional em execução na VM que grava dados no disco.
  • Limpe os buffers do disco. Por exemplo, o MySQL possui uma instrução FLUSH . Use qualquer ferramenta disponível para sua aplicação.
  • Sincronize seu sistema de arquivos.

O exemplo de código a seguir mostra um script de pré-instantâneo. Observe o #! personagens.

#!/bin/bash
sudo fsfreeze -f [example-disk-location]

O exemplo de código a seguir mostra um script de pós-instantâneo. Observe o #! personagens.

#!/bin/bash
sudo fsfreeze -u [example-disk-location]

Você deve salvar seus scripts em sua VM no diretório /etc/google/snapshots/ . O caminho completo do seu pré-script deve ser /etc/google/snapshots/pre.sh e o caminho completo do seu post script deve ser /etc/google/snapshots/post.sh .

Referenciando discos específicos em seus scripts

O primeiro argumento passado para seus scripts pré e pós-instantâneo é uma lista de discos para os quais você está criando instantâneos. Você pode usar esse argumento em seus scripts para diversas verificações. Por exemplo, se sua VM tiver vários discos anexados, mas você especificou apenas um disco na solicitação de instantâneo, poderá verificar para qual disco o instantâneo está sendo criado.

O argumento é formatado da seguinte forma:

  • Discos anexados a SCSI : uma lista separada por vírgulas de pares <target/lun> .
  • Discos anexados a NVME : uma lista separada por vírgulas de pares <nvme:namespace> .

Por exemplo, o disco de inicialização conectado ao SCSI pode aparecer como 1/0 , enquanto um disco adicional conectado à VM pode aparecer como 2/0 .

Edite o arquivo de configuração do seu ambiente convidado

Defina as configurações de snapshot consistentes do seu aplicativo atualizando um arquivo de configuração específico em sua VM.

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

    edit /etc/default/instance_configs.cfg
    
  2. Adicione a seção a seguir ao arquivo de configuração, salve suas alterações e saia do editor.

    [Snapshots]
    enabled = ENABLED
    timeout_in_seconds = TIMEOUT_SECONDS
    

    Substitua o seguinte:

    • ENABLED : Defina como true para ativar o recurso de instantâneo consistente do aplicativo. O valor padrão é false .
    • TIMEOUT_SECONDS : o número de segundos que o script pré ou pós-instantâneo pode levar para terminar a execução antes do tempo limite. O valor inteiro deve estar entre 0 e 300. O valor padrão é 60 .

  3. Reinicie o Guest Agent para usar as novas definições de configuração.

    $ sudo systemctl restart google-guest-agent.service
    

Crie um instantâneo com guest-flush habilitada

Usando o console do Google Cloud, a Google Cloud CLI ou REST, crie um snapshot com a opção guest-flush ativada. Isso inicia a execução dos scripts pré e pós-instantâneo antes e depois da captura do instantâneo.

Console

  1. Acesse a página Criar um instantâneo no console do Google Cloud.

    Vá para a página Criar um instantâneo
  2. Insira um Nome para instantâneo.
  3. Selecione um tipo de instantâneo . O padrão é um STANDARD PADRÃO, que é a melhor opção para backup de longo prazo e recuperação de desastres.

    Escolha Arquivar snapshot para uma retenção de dados mais econômica.

  4. Opcional: insira uma descrição da captura instantânea.
  5. Em Disco de origem , selecione o disco existente do qual você deseja criar um instantâneo.
  6. Na seção Local , escolha o local de armazenamento do snapshot .

    O local padrão predefinido ou personalizado definido nas configurações do snapshot é selecionado automaticamente. Opcionalmente, você pode substituir as configurações de snapshot e armazená-los em um local de armazenamento personalizado fazendo o seguinte:

    1. Escolha o tipo de local de armazenamento que deseja para seu instantâneo.

      • Escolha Multirregional para maior disponibilidade a um custo mais elevado.
      • Escolha snapshots regionais para ter mais controle sobre a localização física dos seus dados a um custo menor.
    2. No campo Selecionar local , selecione a região ou multirregião específica que você deseja usar. Para usar a região ou multirregião mais próxima do disco de origem, selecione Com base na localização do disco .
  7. Marque a opção Habilitar snapshot consistente do aplicativo .
  8. Clique em Criar para criar o instantâneo.

gcloud

Você pode criar seu instantâneo na política de local de armazenamento definida pelas configurações de instantâneo ou usando um local de armazenamento alternativo de sua escolha. Para obter mais informações, consulte Escolha o local de armazenamento do snapshot .

  • Para criar um snapshot no local padrão predefinido ou personalizado configurado 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
    
  • Alternativamente, para substituir as configurações de snapshot e criar um snapshot em um local de armazenamento personalizado, inclua o sinalizador --storage-location para indicar onde armazenar seu snapshot.

    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
    
  • ( Visualização ) Para criar um instantâneo com escopo regional em uma região permitida, inclua o sinalizador --region para indicar onde criar seu instantâneo.

    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 o seguinte:

  • SNAPSHOT_NAME : um nome para o instantâneo.
  • SOURCE_ZONE : a zona do disco de origem.
  • SOURCE_DISK_NAME : o nome do volume de disco a partir do qual você deseja criar um instantâneo.
  • SNAPSHOT_TYPE : o tipo de instantâneo, STANDARD ou ARCHIVE . Se um tipo de instantâneo não for especificado, um instantâneo STANDARD será criado.
  • STORAGE_LOCATION : opcional: para snapshots com escopo global, a multirregião do Cloud Storage ou a região do Cloud Storage onde você deseja armazenar o snapshot. Você pode especificar apenas um local de armazenamento.

    Use o parâmetro --storage-location somente quando desejar substituir o local de armazenamento padrão predefinido ou customizado configurado nas configurações do snapshot.

  • SNAPSHOT_SCOPE_REGION : Opcional: para capturas instantâneas com escopo regional, a região para a qual a captura instantânea tem escopo. Se você incluir esse parâmetro, não poderá usar o parâmetro --storage-location . O STORAGE_LOCATION é automaticamente definido como SNAPSHOT_SCOPE_REGION .

DESCANSAR

Você pode criar seu instantâneo na política de local de armazenamento definida pelas configurações de instantâneo ou usando um local de armazenamento alternativo de sua escolha. Para obter mais informações, consulte Escolha o local de armazenamento do snapshot .

  • Para criar um snapshot no local padrão predefinido ou personalizado configurado nas configurações do snapshot, faça uma solicitação POST para o método 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,
    }
    
  • Alternativamente, para substituir as configurações de snapshot e criar um snapshot em um local de armazenamento personalizado, faça uma solicitação POST para o método snapshots.insert e inclua a propriedade storageLocations em sua solicitação:

    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,
    }
    
  • ( Visualização ) Para criar um snapshot com escopo regional em uma região permitida, faça uma solicitação POST para o método snapshots.insert e defina a região de criação:

    POST https://compute.googleapis.com/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 o seguinte:

  • DESTINATION_PROJECT_ID : o ID do projeto no qual você deseja criar o instantâneo.
  • SNAPSHOT_NAME : um nome para o instantâneo.
  • SOURCE_PROJECT_ID : o ID do projeto do disco de origem.
  • SOURCE_ZONE : a zona do disco de origem.
  • SOURCE_DISK_NAME : o nome do disco a partir do qual você deseja criar um instantâneo.
  • SNAPSHOT_TYPE : o tipo de instantâneo, STANDARD ou ARCHIVE . Se um tipo de instantâneo não for especificado, um instantâneo STANDARD será criado.
  • STORAGE_LOCATION : opcional: para snapshots com escopo global, a multirregião do Cloud Storage ou a região do Cloud Storage onde você deseja armazenar o snapshot. Você pode especificar apenas um local de armazenamento.

    Use o parâmetro storageLocations somente quando desejar substituir o local de armazenamento padrão predefinido ou customizado configurado nas configurações de snapshot.

  • SNAPSHOT_SCOPE_REGION : Opcional: para capturas instantâneas com escopo regional, a região para a qual a captura instantânea tem escopo. Se você incluir esse parâmetro, não poderá usar o parâmetro storageLocations . O STORAGE_LOCATION é automaticamente definido como SNAPSHOT_SCOPE_REGION .

Crie uma programação de snapshot com guest-flush habilitada

Use snapshots programados para fazer backup regular e automático do disco permanente zonal e regional e do hiperdisco do Google Cloud. Se desejar agendar snapshots consistentes do aplicativo para seu backup, use a opção --guest-flush ao criar o agendamento de snapshot para que os scripts pré e pós-instantâneo sejam executados antes e depois de cada snapshot agendado.

Por exemplo, depois de configurar o arquivo de configuração do ambiente convidado e criar scripts personalizados , o comando a seguir cria snapshots consistentes do 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 agendamentos de snapshots para discos .

Solução de problemas

Solucione problemas de agendamento de snapshot e processo de criação revisando os logs e verificando as configurações.

Revise os registros

  1. Acesse a página do Logs Explorer no console do Google Cloud:

    Acesse o Explorador de registros

  2. Cole a seguinte consulta no painel Consulta de log :

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

    consulta de log de criação de instantâneo.

Verifique as configurações

O que vem a seguir