Há algum tempo, introduzimos a capacidade de tirar snapshots de um disco. Este é um recurso muito útil que permite salvar de forma rápida e eficiente os estados do disco, mesmo em sistemas ativos.
Graças ao ZFS, os snapshots automáticos apenas consumirão o delta entre o estado atual e o momento em que o snapshot foi tirado. Isso significa que se o seu disco original tinha 15GB e apenas 1MB de dados foi alterado entre o snapshot e o estado atual, o tamanho do snapshot será de 1MB. Se você gravar outro megabyte no disco, o snapshot crescerá mais um megabyte.
Outra beleza deste sistema é que qualquer snapshot pode ser promovido (clonado) para um disco rígido completo. Isso significa que você pode criar uma cópia independente que pode ser montada em um servidor, potencialmente em um sistema de armazenamento totalmente diferente. Como tal, isso forma a base para uma estratégia de gerenciamento de armazenamento (dependendo da sua carga de trabalho).
Um aviso
Embora o uso de snapshots periódicos possa fazer parte da sua estratégia de backup, não é prudente confiar nos snapshots como sua única estratégia.
Existem também inúmeras situações em que o uso desses snapshots não funcionará, como tirar um snapshot de um servidor de banco de dados em execução. A funcionalidade de snapshot ainda pode ser útil em servidores de banco de dados parados (para criar uma restauração de ponto no tempo), mas, novamente, não deve ser sua única estratégia de backup.
Criando snapshots automáticos
Usando nossa biblioteca Python, automatizar snapshots é realmente simples. No entanto, dado que precisamos armazenar as credenciais da CloudSigma no sistema que aciona os snapshots, desaconselhamos fortemente que você exponha as credenciais do serviço de produção de forma insegura. Se você quiser executar isso em um servidor em nuvem, por exemplo, certifique-se de que ele esteja protegido do restante da infraestrutura (como usando nosso recurso de políticas de rede) e que esteja totalmente bloqueado.
Após instalar a biblioteca Python, você pode baixar e executar o script da seguinte forma:
[bash light=”true”] $ wget https://raw.githubusercontent.com/cloudsigma/pycloudsigma/master/samples/snapshot.py$ python snapshot.py drive-uuid my-snapshot
[/bash]
snapshot.py aceita dois argumentos:
- O UUID do disco do qual você deseja tirar o snapshot
- Um nome amigável para o snapshot
Depois de criar manualmente um snapshot e verificar se ele funciona (você pode ver isso na seção ‘snapshot’ do disco), agora podemos automatizar isso.
A maneira mais adequada e padronizada de executar uma tarefa como essa seria no crontab (assumindo que você esteja no Linux ou Mac OS X).
Com o mesmo usuário com o qual você criou o snapshot acima, execute:
[bash light=”true”]
$ crontab -e
[/bash]
Se você quiser tirar um snapshot todas as noites à 1h, adicione a seguinte linha:
|
1 |
0 1 * * * python /path/to/snapshot.py drive-uuid my-snapshot >> $HOME/snapshot.log 2>&1 |
Você também notará que o script registrará os logs em um arquivo chamado snapshot.log no diretório home do usuário que executa o script.
Expurgando snapshots automaticamente
Como os snapshots crescem com o tempo, você provavelmente desejará excluir esses snapshots após algum tempo. Para resolver esse problema, criamos outro script que pode fazer isso por você. O script chama-se snapshot_purge.py e aceita dois argumentos:
- O UUID do disco
- O número de dias de snapshots que você gostaria de manter
Por exemplo, se você quiser manter 30 dias de snapshots, basta executar:
[bash light=”true”]
$ wget https://raw.githubusercontent.com/cloudsigma/pycloudsigma/master/samples/snapshot_purge.py
$ python snapshot_purge.py drive-uuid 30
[/bash]
Você também pode automatizar isso, é claro. Por exemplo, se quisermos expurgar snapshots com mais de 30 dias, podemos adicionar o seguinte ao nosso crontab (que será executado à 1h30):
|
1 |
30 1 * * * python /path/to/snapshot_purge.py unidade-uuid 30 >> $HOME/snapshot_purge.log 2>&1 |
Conclusão
É isso aí, pessoal. Usando esses dois scripts, você poderá automatizar os snapshots da sua unidade. Se precisar tirar snapshots de várias unidades, basta adicionar mais linhas do snapshot.py ao seu crontab com UUIDs diferentes.
Estamos, é claro, apenas arranhando a superfície do que podemos fazer com snapshots, mas espero que isso sirva como um curso rápido sobre o uso de snapshots em suas rotinas de gerenciamento de armazenamento.
Se você tiver necessidades de retenção de dados mais sofisticadas, esperamos que possa reutilizar parte do código nos scripts acima.
Comentários
Nenhum comentário ainda. Seja o primeiro.