Plugin bsnapshot do Bacula – Guia Rápido

A partir do Bacula Enterprise versão 8.2, é possível que os clientes façam backups automáticos de snapshots de sistemas de arquivos. Também é possível gerenciar snapshots dos sistemas através das interfaces do Bacula.

O plugin fornece restauração em nível de arquivo no estado da geração do snapshot, com toda a garantia de integridade. Esse recurso pode ser muito útil para o backup integrado com grandes bases de dados MySQL, PostgreSQL, MongoDB etc.

Os seguintes back-ends de snapshots são compatíveis atualmente:

  • BTRFS
  • ZFS
  • LVM

Por padrão, os snapshots são montados (ou diretamente disponíveis) no diretório .snapshots no sistema de arquivos raiz. (No ZFS, o padrão é .zfs/snapshots).

O programa de back-end Snapshot é chamado bsnapshot e está disponível no pacote bacula-enterprise-snapshot. Para usar o recurso Gerenciamento de instantâneos, o pacote deve ser instalado no cliente.

O programa bsnapshot pode ser configurado usando o arquivo /opt/bacula/etc/bsnapshot.conf. Os seguintes parâmetros podem ser ajustados no arquivo de configuração:

  • sudo = <yes∣no> Use sudo para executar comandos
  • disabled = <yes∣no> Desativar suporte para instantâneos
  • retry = Configurar o número de tentativas para algumas operações
  • snapshot_dir = Use um nome personalizado para o diretório Snapshot. (.SNAPSHOT, .snapdir, etc.)
  • lvm_snapshot_size = Especifique um tamanho de instantâneo personalizado para um determinado volume LVM
  • mountopts = Especifique uma opção de montagem personalizada para um determinado dispositivo (disponível em 10.0.4)
  • trace = Especifique um arquivo de rastreamento
  • debug = Especifique um nível de depuração

Há um exemplo como segue:

# cat /opt/bacula/etc/bsnapshot.conf
trace=/tmp/snap.log
debug=10
lvm_snapshot_size=/dev/ubuntu-vg/root:5%
mountopts=nouuid
mountopts=/dev/ubuntu-vg/root:nouuid,nosuid

Quiesce de Aplicativo

Ao usar Snapshots, é muito importante desativar os aplicativos que estão sendo executados no sistema. A maneira mais simples de desativar um aplicativo é interrompê-lo. Normalmente, tirar o Snapshot é muito rápido e o tempo de inatividade dura apenas alguns segundos.

Se o tempo de inatividade não for possível e/ou o aplicativo fornecer uma maneira de desativar, um script mais avançado pode ser usado. Um exemplo é descrito adiante.

Novas Diretivas do Director

O uso do plugin Snapshot no FileDaemon é determinado pela nova diretiva Enable Snapshot FileSet. O padrão é no.

FileSet {
  Name = LinuxHome
  Enable Snapshot = yes
  Include {
    Options = { Compression = LZO }
      File = /home
  }
}

Por padrão, os Snapshots são excluídos do cliente no final do backup. Para manter Snapshots no Cliente e gravá-los no Catálogo por um determinado período, é possível utilizar a diretiva SnapshotRetention nos recursos Client ou Job. O valor padrão é 0 segundos. Se, para um determinado trabalho, as diretivas Client e Job Snapshot Retention forem definidas, a diretiva Job será usada.

Client {
  Name = linux1
  ...
  Snapshot Retention = 5 days
}

Para remover Snapshots automaticamente, é possível usar o seguinte comando RunScript:

Job {
  ...
  Client = linux1
  ...
  RunScript {
    RunsOnClient = no
    Console = "prune snapshot client=%c yes"
    RunsAfter = yes
  }
}

Em RunScripts, a palavra-chave AfterSnapshot para a diretiva RunsWhen permitirá que um comando seja executado logo após a criação do Snapshot. AfterSnapshot é um sinônimo para a palavra-chave AfterVSS.

Job {
  ...
  RunScript {
    Command = "/etc/init.d/mysql start"
    RunsWhen = AfterSnapshot
    RunsOnClient = yes
  }
  RunScript {
    Command = "/etc/init.d/mysql stop"
    RunsWhen = Before
    RunsOnClient = yes
  }
}

Informações de Saída do Job

A lista de todos os dispositivos usados pelo Plugin de Snapshot é exibida no log do Job e indica se existem Snapshots estavam disponíveis.

JobId 3:    Create Snapshot of /home/build
JobId 3:    Create Snapshot of /home/build/subvol
JobId 3:    Delete snapshot of /home/build
JobId 3:    Delete snapshot of /home/build/subvol
...
JobId 3: Bacula 127.0.0.1-dir 7.2.0 (23Jul15):
  Build OS:               x86_64-unknown-linux-gnu archlinux 
  JobId:                  3
  Job:                    Incremental.2015-02-24_11.20.27_08
  Backup Level:           Full
...
  Snapshot/VSS:           yes
...
  Termination:            Backup OK

Novos comandos snapshot do Bconsoles

O novo comando de Snapshot exibirá por padrão o seguinte menu:

*snapshot
Snapshot choice:
     1: List snapshots in Catalog
     2: List snapshots on Client
     3: Prune snapshots
     4: Delete snapshot
     5: Update snapshot parameters
     6: Update catalog with Client snapshots
     7: Done
Select action to perform on Snapshot Engine (1-7):

O comando snapshot também pode ter os seguintes parâmetros:

[client=<client-name> | job=<job-name> | jobid=<jobid>]
 [delete | list | listclient | prune | sync | update]

Também é possível usar os comandos tradicionais list, llist, update, prune ou delete em Snapshots.

*llist snapshot jobid=5
 snapshotid: 1
       name: NightlySave.2015-02-24_12.01.00_04
 createdate: 2015-02-24 12:01:03
     client: 127.0.0.1-fd
    fileset: Full Set
      jobid: 5
     volume: /home/.snapshots/NightlySave.2015-02-24_12.01.00_04
     device: /home/btrfs
       type: btrfs
  retention: 30
    comment:

* snapshot listclient
Automatically selected Client: 127.0.0.1-fd
Connecting to Client 127.0.0.1-fd at 127.0.0.1:8102
Snapshot      NightlySave.2015-02-24_12.01.00_04:
  Volume:     /home/.snapshots/NightlySave.2015-02-24_12.01.00_04
  Device:     /home
  CreateDate: 2015-02-24 12:01:03
  Type:       btrfs
  Status:     OK
  Error:

Para atualizar o catálogo com os snapshots do cliente (ou snapshot sync), o Diretor contata o FileDaemon, lista os snapshots do sistema e cria registros de catálogo dos snapshots.

*snapshot sync
Automatically selected Client: 127.0.0.1-fd
Connecting to Client 127.0.0.1-fd at 127.0.0.1:8102
Snapshot      NightlySave.2015-02-24_12.35.47_06:
  Volume:     /home/.snapshots/NightlySave.2015-02-24_12.35.47_06
  Device:     /home
  CreateDate: 2015-02-24 12:35:47
  Type:       btrfs
  Status:     OK
  Error:
Snapshot added in Catalog

*llist snapshot
 snapshotid: 13
       name: NightlySave.2015-02-24_12.35.47_06
 createdate: 2015-02-24 12:35:47
     client: 127.0.0.1-fd
    fileset:
      jobid: 0
     volume: /home/.snapshots/NightlySave.2015-02-24_12.35.47_06
     device: /home
       type: btrfs
  retention: 0
    comment:

Restrições de Back-End LVM

Snapshots de LVM são bastante primitivos em comparação com ZFS, BTRFS, NetApp e outros sistemas. Por exemplo, não é possível usar Snapshots se o Grupo de Volume (VG) estiver cheio. O administrador deve manter algum espaço livre no VG para criar Snapshots.

A quantidade de espaço livre necessária depende da atividade do Volume Lógico (LV). O bsnapshot usa 10% do LV por padrão. Esse número pode ser configurado por LV no arquivo bsnapshot.conf.

[root@system1]# vgdisplay
  --- Volume group ---
  VG Name               vg_ssd
  System ID
  Format                lvm2
...
  VG Size               29,81 GiB
  PE Size               4,00 MiB
  Total PE              7632
  Alloc PE / Size       125 / 500,00 MiB
  Free  PE / Size       7507 / 29,32 GiB
...

Também não é aconselhável deixar Snapshots no backend do LVM. Ter vários instantâneos do mesmo LV no LVM tornará o sistema mais lento.

Opções de Depuração

Para obter informações de baixo nível sobre o bsnapshot, a tag de depuração “snapshot” deve ser usada no comando setdebug.

*setdebug level=10 tags=snapshot client
*setdebug level=10 tags=snapshot dir

 

Disponível em: pt-brPortuguês enEnglish (Inglês) esEspañol (Espanhol)

Deixe uma resposta