Práticas recomendadas para snapshots de discos do Compute Engine


É possível criar snapshots do Persistent Disk e do Google Cloud Hyperdisk a qualquer momento. Porém, é mais rápido e confiável fazer isso adotando as práticas recomendadas a seguir.

Considerações sobre segurança

Para evitar o escalonamento de privilégios não intencional, conceda apenas permissões do IAM relacionadas a snapshot aos principais em que você confia para ler e restaurar o snapshot ou Instant Snapshot (Pré-lançamento). Com as permissões a seguir, os usuários podem ler e restaurar dados de snapshots ou Instant Snapshot (Pré-lançamento):

  • compute.snapshots.useReadOnly
  • compute.instantSnapshots.useReadOnly

Qualquer principal que tenha uma das permissões anteriores pode restaurar dados de snapshots ou Instant Snapshots em seu projeto para outro controlado por ele, incluindo um projeto que esteja em uma organização diferente. Por exemplo, se um usuário de má-fé conseguisse um papel do IAM de snapshot no seu projeto, ele poderia restaurar o snapshot no projeto pessoal e acessar os dados contidos nele.

Para saber como verificar as permissões de um principal, consulte Determinar quais principais têm determinados papéis ou permissões.

Como preparar snapshots consistentes

Se você criar um snapshot do Persistent Disk ou do Hyperdisk enquanto o aplicativo estiver em execução, ele não poderá capturar gravações pendentes que estejam em trânsito da memória para o disco. Devido a essas inconsistências, o snapshot pode não refletir o estado exato do aplicativo no momento em que o snapshot foi capturado. Nesse cenário, o snapshot é considerado consistente com falhas porque captura o estado do aplicativo como se a máquina falhasse no momento em que ele foi capturado.

Opcionalmente, é possível pausar o aplicativo para que todas as transações sejam concluídas e o sistema possa limpar todas as gravações pendentes da memória no disco antes da captura do snapshot. Nesse cenário, o snapshot é considerado consistente do aplicativo.

Como criar snapshots consistentes com falhas

Quando você cria um snapshot de um Persistent Disk ou Hyperdisk, não é necessário realizar outras etapas para que ele fique consistente. Em particular, você não precisa pausar sua carga de trabalho.

Se a carga de trabalho não puder tolerar uma pausa temporária, considere o seguinte processo para criar snapshots consistentes com falhas:

  1. Capture um snapshot enquanto os aplicativos estão em execução, supondo que haja algumas inconsistências de dados do aplicativo.
  2. Verifique se é possível restaurar a carga de trabalho para um estado de aplicativo aceitável a partir do snapshot.
  3. Com base na etapa anterior, mantenha ou exclua o snapshot.

Snapshots consistentes de falha provavelmente exigirão repetir diários do sistema de arquivos e do nível de aplicativo antes do uso. Assim, a qualidade do snapshot depende da capacidade do aplicativo de se recuperar rapidamente de um estado consistente em caso de falha.

Como criar snapshots consistentes do aplicativo

  • Usuários do Windows Server: para discos anexados a instâncias do Windows Server, use snapshots VSS.
  • Usuários do Linux: para conseguir a consistência do aplicativo para snapshots de discos anexados a instâncias do Linux, crie scripts de shell pré e pós-snapshot para preparar o sistema para a consistência do aplicativo. Crie um snapshot com a opção guest-flush ativada. Isso executa os scripts de pré e pós antes e depois do snapshot ser capturado. Para mais instruções, consulte Como criar snapshots consistentes no aplicativo Linux.

Como criar manualmente snapshots consistentes do aplicativo

Em alguns cenários, pode ser necessário pausar manualmente seus aplicativos para conseguir snapshots consistentes.

Por exemplo, use essa opção se você precisar de consistência de aplicativos entre vários ou volumes do Hyperdisk ou Persistent Disk. Nesse caso, é necessário congelar todos os sistemas de arquivos em cada disco e concluir todos os snapshots desses discos antes de retomar os aplicativos.

Você não precisa interromper suas VMs. A pausa do aplicativo pode envolver, por exemplo, congelar e desconectar seu sistema de arquivos. Depois de pausar manualmente os aplicativos, retome as cargas de trabalho somente depois que o recurso de snapshot atingir o status UPLOADING.

Ao solicitar um snapshot, verifique o status da operação chamando o método globalOperations.get. A tabela a seguir mostra a relação entre o status da operação do snapshot e o status do recurso do snapshot.

Status da operação Status do recurso de snapshot
PENDING Ainda não há nenhum recurso de snapshot.
RUNNING CREATING ou UPLOADING

CREATING: a criação do snapshot ainda não foi concluída.
UPLOADING: o snapshot foi criado, mas ainda não foi salvo no Cloud Storage.
DONE FAILED ou READY.

Limites de frequência do snapshot

Há limites para a frequência com que você pode tirar um snapshot de um disco.

Como criar snapshots a partir de um disco permanente ou Hyperdisk

É possível capturar snapshots dos discos uma vez a cada 10 minutos, no máximo. Se você quiser emitir uma sequência de solicitações para capturar snapshots dos discos, é possível enviar 6 solicitações, no máximo, em 60 minutos.

Se o limite for excedido, a operação falhará e retornará este erro:

"code": "RESOURCE_OPERATION_RATE_EXCEEDED",
"message": "Operation rate exceeded for resource 'projects/project-id/zones/zone-id/disks/disk-name'.
Too frequent operations from the source resource."

Esse limite se aplica às seguintes operações:

Esse limite não se aplica às seguintes operações:

Como prática recomendada, tire um snapshot do disco uma vez a cada hora. Evite tirar snapshots com mais frequência do que isso. A maneira mais fácil de fazer isso é configurar uma programação de snapshot.

Como criar novos discos zonais a partir de snapshots

É possível criar um novo Persistent Disk ou Hyperdisk zonal a partir de um determinado snapshot por zona de destino no máximo uma vez a cada 10 minutos. A zona de destino se refere ao local de armazenamento do novo disco criado a partir do snapshot. O Google Cloud não garante que será possível criar discos a partir de um snapshot com mais rapidez, embora possa ser possível criar discos com mais frequência se você não tiver criado discos do snapshot na última hora.

Vários snapshots dos mesmos discos são considerados snapshots distintos em relação a esse limite de frequência.

Se esse limite for excedido, a operação falhará e retornará este erro:

"code": "RESOURCE_OPERATION_RATE_EXCEEDED",
"message": "Operation rate exceeded for resource 'projects/project-id/global/snapshots/snapshot-name'. Too frequent operations from the source resource."

Esse limite se aplica às seguintes operações:

Esse limite não se aplica às seguintes operações:

  • Criação de novos Persistent Disks regionais a partir de um snapshot.
  • Criação de novos discos permanentes zonais ou regionais usando uma imagem como origem.

Para criar vários discos com base em um snapshot, use esse snapshot para criar uma imagem e seus discos a partir da imagem:

  1. Crie uma imagem do snapshot.
  2. Criar discos a partir da imagem.

Para discos que não são de inicialização, siga as instruções para criar discos permanentes a partir da imagem e siga estas etapas:

  • No console do Google Cloud, selecione Imagem como o Tipo de origem do disco.
  • Com a gcloud CLI use a flag image.
  • Se estiver usando REST, use o parâmetro sourceImage.

Use snapshots atuais como referência para snapshots posteriores

Se você tiver snapshots de um disco (Persistent Disk ou Hyperdisk), eles serão usados pelo sistema automaticamente como valor de referência para todos os snapshots subsequentes que você criar a partir desse mesmo disco.

  • Crie um novo snapshot a partir de um disco antes de excluir o snapshot anterior desse mesmo disco. O sistema poderá criar o novo snapshot mais rapidamente se puder usar o anterior e lerá apenas os dados novos ou alterados do disco.
  • Aguarde a finalização dos novos snapshots antes de criar snapshots subsequentes do mesmo disco. Se você executar dois snapshots simultaneamente no mesmo disco, ambos partirão da mesma referência e duplicarão o esforço. Se você aguardar a conclusão do novo snapshot, todos os subsequentes serão executados mais rapidamente porque só precisam receber os dados que mudaram desde a finalização do último snapshot.

Programe snapshots fora do horário de pico

Quando você programa snapshots regulares dos seus discos (Persistent Disk ou Hyperdisk), é possível reduzir o tempo necessário para concluir cada snapshot ao criá-los fora do horário de pico, quando possível.

  • Programe snapshots automatizados durante o dia útil na zona em que o disco está localizado. A criação de snapshots costuma ocorrer ao fim do dia útil.
  • Programe snapshots automatizados no início da manhã na zona em que o disco está localizado, em vez de imediatamente à meia-noite. A criação de snapshots costuma ocorrer à meia-noite.

Organizar dados em discos separados

Se você criar um snapshot de um disco (Persistent Disk ou Hyperdisk), todos os dados armazenados nele serão incluídos no snapshot. Maiores quantidades de dados criam snapshots maiores, o que custa mais e leva mais tempo. Para garantir a criação de um snapshot somente dos dados necessários, organize seus dados em discos separados.

  • Armazene dados críticos em um disco secundário ou de dados, em vez de no disco de inicialização. Isso permite criar um snapshot dos seus discos de inicialização somente quando necessário ou com uma programação menos frequente.
  • Se você criar snapshots dos discos de inicialização, armazene partições de troca, arquivos de página, arquivos de cache e registros não críticos em um disco separado. Esses arquivos e essas partições mudam com frequência, e o processo do snapshot provavelmente os identifica como dados alterados que precisam ser incluídos em um snapshot incremental.
  • Para reduzir o número de snapshots que você precisa criar, mantenha dados similares reunidos em um único disco. Mantenha o sistema operacional e os dados voláteis separados dos dados que quer tirar o snapshot, mas não distribua os dados essenciais entre vários discos permanentes como faria com máquinas físicas. Um disco grande é capaz de atingir o mesmo desempenho que vários discos menores do mesmo tamanho total.

Ative a opção discard ou execute fstrim no seu disco

Em instâncias do Linux, se você não formatou e montou os discos (Persistent Disk ou Hyperdisk) com a opção "descartar", execute o comando fstrim na instância antes de criar um snapshot. O comando remove os blocos de que o sistema de arquivos não precisa mais, para que o sistema possa criar o snapshot mais rapidamente e com um tamanho menor. Para saber como configurar a opção de descarte nos discos, consulte Formatar e ativar um disco que não seja de inicialização em uma VM do Linux.

Criar uma imagem de um snapshot usado com frequência

Se você usar um snapshot repetidamente na mesma zona para criar um disco (Persistent Disk ou Hyperdisk), use esse snapshot uma vez e crie uma imagem dele para economizar custos de rede. Armazene essa imagem e use-a para criar o disco e iniciar uma instância de VM. Para mais instruções, consulte Como criar uma imagem personalizada.

Como prática recomendada, tire um snapshot do disco uma vez a cada hora. Evite tirar snapshots com mais frequência do que isso. A maneira mais fácil de fazer isso é configurar uma programação de snapshot.

Outras práticas recomendadas

  • Use sistemas de arquivos com registro de diário, como ext4, para reduzir o risco de armazenar os dados em cache sem que sejam de fato gravados no disco permanente.
  • Crie um snapshot de seus dados regularmente para minimizar a perda de dados devido a uma falha inesperada.

A seguir