infraestrutura:bacula

Contribuidores

Revisão: 0.1a (Validação não agendada)

Bacula é uma suíte de aplicativos de código fonte aberto que permitem a você (ou ao Administrador de Sistemas) gerenciar copias de segurança, recuperações e verificações de dados em uma rede de computadores dos mais variados tipos. Ele é de relativa fácil utilização e eficiente, oferecendo várias funcionalidades de gerenciamento de espaço para armazenamento facilitando assim, a busca e recuperação de arquivos perdidos ou danificados. Em termos mais técnicos, é uma ferramenta open source de cópia de segurança via rede. Utilizamos o Bacula em nossos servidores Linux e Unix.

A arquitetura da solução implementada nada rede do IFCE consiste em:

  • 1 VPS: bacula-director
  • 1 VPS: bacula-storage daemon
  • 1 Banco de dados MySQL: Catalogo
  • 1 Servidor Web: bacula-web
  • 1 Daemon em cada host: bacula-filedaemon

Tecnologias utilizadas

Para o completo funcionamento da solução, os seguintes serviços precisam estar operacionais:

Internet/Rede Local - RNP
Firewall - fwpici.ifce.edu.br e fwbenfica.ifce.edu.br
Bind9 (DNS) - ns1.ifce.edu.br
Servidor Web (bacula-web) - nginx.ifce.edu.br
Mailman - listas.ifce.edu.br
Bacula Director - bacula.ifce.edu.br ou bacula-dir.ifce.edu.br
Bacula Storage Daemoon - bacula-sd0.ifce.edu.br e ufc.ifce.edu.br 
Servidor de Banco dedados (Catálogo) - mysql.ifce.edu.br
Bacula File Daemon - Em cada host a ser feita cópia de segurança

A solução implementada no IFCE segue os upstreams da Canonical e bacula-web.org:

bacula (5.2.6+dfsg-9.1ubuntu3)
Bacula-Web 7.0.2 

Seu desenvolvimento não é feito por analistas do IFCE.

Para monitorar o serviço prestado, pode-se:

list jobs

Para acessar o painel de controle do Backup, pode-ser utilizar o comando

bconsole

ou utilizar a ferramenta gráfica (Linux) bat.

Ao configurar ambas, deve-se apontar o cliente para conectar-se com o servidor bacula-dir.ifce.edu.br utilizando a senha salva no 1Password dentro do diretório:

Dominios → ifce.edu.br → HP BladeSystem → Bacula Director

Modificamos um pouco o modelo descrito na documentação oficial para dar um pouco mais de modularidade a nossa solução de backup.

O arquivo de configuração do Bacula Director, localizado em: /etc/bacula/bacula-dir.conf inclui agora, todos os aquivos que estiverem dentro do diretório: /etc/bacula/conf.d

Para facilitar na didática de parametrização deste arquivo de configuração, iremos assumir que:

  • O nome do host a ser salvaguardado será: MaquinaDeTestes;
  • O endereço IPv4 dela é: 200.200.200.200;
  • Seu FQDN é MaquinaDeTestes.ifce.edu.br;
  • Seus arquivos portantes encontram-se em: /opt/ArquivosImportantes e em /etc/ArquivosDeConfiguracaoImportantes;
  • Os arquivos salvos serão escritos no Bacula Storage Daemon: bacula-sd0;
Preparando a maquina a ser salvaguardada

No host a ser salvaguadado, precisamos apenas instalar o Bacula File Daemon. Podemos fazer isto utilizando o gerenciador de pacotes nativo da distribuição: Ubuntu:

operador@MaquinaDeTestesUbuntu:~$ sudo apt-get update; sudo apt-get install bacula-fd -y

CentOS:

[root@MaquinaDeTestesCentOS ~]# yum install bacula-client -y

FreeBSD:

root@MaquinaDeTestesFreeBSD:~ # pkg install bacula5-client-5.2.12_1

Após a instalação do Bacula File Daemon, façamos as configurações necessárias para autorizar o Bacula Director do IFCE (bacula-dir.ifce.edu.br) comunicar-se com o host em questão;

Primeiramente, precisaremos gerar uma chave para que esta comunicação ocorra de maneira segura. Para isto, podemos utilizar o 1Password, Lastpass ou http://random.org/passwords para gerar as senhas ou com o seguinte comando:

date +%s | sha256sum | base64 | head -c 33 ; echo

Agora, já de posse uma nova chave, abra o arquivo de configuração do bacula-fd, /etc/bacula/bacula-fd

sudo vi /etc/bacula/bacula-fd.conf

Neste arquivo, iniciaremos modificando a seção Director do arquivo:

  • No campo Name, definiremos o nome do Bacula Director, no nosos caso: bacula-dir
  • No campo Password, definiremos a chave que geramos no passo anterior. Esta chave também deverá ser adicionada no arquivo de configuração referente a este host no bacula-dir;

Ao final, teremos na seção Director, algo semelhante a isto:

bacula-fd.conf
Director {
  Name = bacula-dir
  Password = "SENHA_GERADA_NO_ATO_DA_INSTALACAO_OU_POR_VOCE"
}

Agora, iremos as configurações do File Daemon. Procure no mesmo arquivo a seção File Daemon

  • No campo Name, defina no nome do file daemon, no nosso caso: MaquinaDeTestes
  • No campo FDAddress, defina o endereço de IPv4 do hosts, no nosso caso: 200.200.200.200

Ao final teremos uma seção FileDaemon semelhante a esta:

bacula-fd.conf
FileDaemon {                          # this is me
  Name = MaquinaDeTestes
  FDAddress = 200.200.200.200
  FDport = 9102                  # where we listen for the director
  WorkingDirectory = /var/spool/bacula
  Pid Directory = /var/run
  Maximum Concurrent Jobs = 20
}

Agora, precisamos configurar este daemon para enviar mensagens ao Bacula Director caso algo acontença durente sua operação. Procure agora neste mesmo arquivo a seção Messages e modifique:

  • No campo director, o nome do director setado no início da configuração do daemon, no nosso caso: bacula-dir

Resultando numa seção Messages semelhantes a esta:

bacula-fd.conf
Messages {
  Name = Standard
  director =  bacula-dir = all, !skipped, !restored
}

Salve suas modificações, saia do editor de texto e teste suas configurações com o comando:

sudo bacula-fd -tc /etc/bacula/bacula-fd.conf
Descrevendo a rotina de Backups no Bacula-dir
JobDefs {
  Name = "MaquinaDeTestes"
  Type = Backup
  Level = Incremental
  Client = MaquinaDeTestes
  FileSet = "FileSetMaquinaDeTestes"
  Schedule = "DefaultCycle"
  Storage = bacula-sd0
  Messages = Standard
  Pool = File
  Priority = 10
  Write Bootstrap = "/var/lib/bacula/%c.bsr"
}

Job {
  Name = "Backup: MaquinaDeTestes"
  JobDefs = "MaquinaDeTestes"
  Client = MaquinaDeTestes
  Schedule = "DefaultCycle"
  Maximum Concurrent Jobs = 20
}

Job {
  Name = "Restore: MaquinaDeTestes"
  Type = Restore
  Client = bacula-sd0
  Storage = bacula-sd0
  Pool = Default
  FileSet = MaquinaDeTestes
  Messages = Standard
  Where = /opt/bacula/restores
  Maximum Concurrent Jobs = 10
}

FileSet {
  Name = "FileSetMaquinaDeTestes"
  Include {
    Options {
      signature = MD5
      compression = GZIP
    }
    File = /opt/ArquivosImportantes
    File = /etc/ArquivosDeConfiguracaoImportantes
  }
}

Client {
  Name = MaquinaDeTestes
  Address = MaquinaDeTestes.ifce.edu.br
  FDPort = 9102
  Catalog = MyCatalog
  Password = "ESTA_SENHA_É_GERADA_NO_ATO_DA INSTALACAO_DO_BACULA_FILE_DAEMON"
  File Retention = 1 day
  Job Retention = 1 day
  AutoPrune = yes
  Maximum Concurrent Jobs = 20
}

Para restaurar um backup feito pelo Bacula, precisamos apenas de acesso ao Bacula Director e de espaço em disco suficiente para receber as informações a serem geradas.

Logando-se como usário padrão operador no host bacula-dir.ifce.edu.br:

ssh operador@bacula-dir.ifce.edu.br

Execute o comando bconsole:

operador@bacula-dir:~$ sudo bconsole 

Você entrará na interface de linha de comando do bconsole:

Connecting to Director bacula.ifce.edu.br:9101
1000 OK: bacula-dir Version: 5.2.6 (21 February 2012)
Enter a period to cancel a command.
*

Nesta interface, digite o comando restore:

*restore 

Por padrão, o Bacula fará uso de seu catálogo principal e dará início ao wizzard de recuperação de dados:

Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"

First you select one or more JobIds that contain files
to be restored. You will be presented several methods
of specifying the JobIds. Then you will be allowed to
select which files from those JobIds are to be restored.

To select the JobIds, you have the following choices:
     1: List last 20 Jobs run
     2: List Jobs where a given File is saved
     3: Enter list of comma separated JobIds to select
     4: Enter SQL list command
     5: Select the most recent backup for a client
     6: Select backup for a client before a specified time
     7: Enter a list of files to restore
     8: Enter a list of files to restore before a specified time
     9: Find the JobIds of the most recent backup for a client
    10: Find the JobIds for a backup for a client before a specified time
    11: Enter a list of directories to restore for found JobIds
    12: Select full restore to a specified Job date
    13: Cancel
Select item:  (1-13): 

Você aqui, pode escolher como deseja especificar qual backup deseja recuperar. Para restaurar a última cópia válida, selecione a opção

5: Select the most recent backup for a client.

Selecione agora, o host que deseja efetuar a recuperação a partir da lista de hosts configurados:

Defined Clients:
     1: apache
     2: bacula
     3: bacula-sd0
     4: dl-virtual
     5: gforge
     6: gitlab
     7: h-apache
     8: h-mysql
     9: interred
    10: listas
    11: mysql
    12: nginx
    13: ns1
    14: pgsql
    15: sisae
    16: sisdoc
    17: siseve
    18: suap
    19: ufc
    20: ul-virtual
    21: virtual
    22: zimbra
Select the Client (1-22): 

No caso deste artigo, efetuaremos um restore do apache, logo, selecione a opção 1: apache.

O wizzard irá agora procurar no catálogo, a localização dos arquivos nescessários para efetuar a documentação, descompacta-lo e lhe solicitar quais arquivos você deseja recuperar:

Automatically selected FileSet: apache
+-------+-------+----------+----------------+---------------------+------------+
| JobId | Level | JobFiles | JobBytes       | StartTime           | VolumeName |
+-------+-------+----------+----------------+---------------------+------------+
| 1,987 | F     |  777,850 | 42,869,552,661 | 2015-03-17 23:55:00 | Local-0004 |
| 1,987 | F     |  777,850 | 42,869,552,661 | 2015-03-17 23:55:00 | Local-0005 |
| 1,987 | F     |  777,850 | 42,869,552,661 | 2015-03-17 23:55:00 | Local-0006 |
| 1,987 | F     |  777,850 | 42,869,552,661 | 2015-03-17 23:55:00 | Local-0007 |
| 1,987 | F     |  777,850 | 42,869,552,661 | 2015-03-17 23:55:00 | Local-0008 |
+-------+-------+----------+----------------+---------------------+------------+
You have selected the following JobId: 1987

Building directory tree for JobId(s) 1987 ...  ++++++++++++++++++++++++++++++++++++++++++
661,547 files inserted into the tree.

You are now entering file selection mode where you add (mark) and
remove (unmark) files to be restored. No files are initially added, unless
you used the "all" keyword on the command line.
Enter "done" to leave this mode.

cwd is: /
$ 

Para selecionar um arquivo, utilize o comando mark, podendo-se fazer o uso de expressões regulares. Logo, para efetuar o restore de todos os arquivos, basta digitar mark * e em seguida encere a seleção de arquivos:

$mark *
777,850 files marked.
$done

Agora, iremos especificar em que host devemos escrever as informações recuperadas. Pode-se restaurar os arquivos diretamente no servidor de origem ou em qualquer outro host:

$ done
Bootstrap records written to /var/lib/bacula/bacula-dir.restore.1.bsr

The job will require the following
   Volume(s)                 Storage(s)                SD Device(s)
===========================================================================
   
    Local-0004                bacula-sd0                FileStorage              
    Local-0005                bacula-sd0                FileStorage              
    Local-0006                bacula-sd0                FileStorage              
    Local-0007                bacula-sd0                FileStorage              
    Local-0008                bacula-sd0                FileStorage              

Volumes marked with "*" are online.


777,850 files selected to be restored.

The defined Restore Job resources are:
     1: Restore: apache
     2: Restore: dl-virtual
     3: Restore: gforge
     4: Restore: gitlab
     5: Restore: h-apache
     6: Restore: h-mysql
     7: Restore: interred
     8: Restore: listas
     9: Restore: mysql
    10: Restore: nginx
    11: Restore: ns1
    12: Restore: pgsql
    13: Restore: sisae
    14: Restore: sisdoc
    15: Restore: siseve
    16: Restore: suap
    17: Restore: ul-virtual
    18: Restore: virtual
    19: Restore: Zimbra
Select Restore Job (1-19): 

No caso deste artigo, iremos efetuar a recuperação das informações no host ufc.ifce.edu.br, o conjunto de arquivos salvos descrito pelo job Restore: apache, selecionando a opção 1:

Select Restore Job (1-19): 1
Run Restore job
JobName:         Restore: apache
Bootstrap:       /var/lib/bacula/bacula-dir.restore.1.bsr
Where:           /opt/bacula/restores
Replace:         always
FileSet:         apache
Backup Client:   apache
Restore Client:  apache
Storage:         bacula-sd0
When:            2015-03-18 20:44:21
Catalog:         MyCatalog
Priority:        10
Plugin Options:  *None*
OK to run? (yes/mod/no): 

Para recuperar as informações em um host diferente do host em questão, modifique com o comando mod o Job a ser executado, a opção Restore Client :

OK to run? (yes/mod/no): mod
Parameters to modify:
     1: Level
     2: Storage
     3: Job
     4: FileSet
     5: Restore Client
     6: When
     7: Priority
     8: Bootstrap
     9: Where
    10: File Relocation
    11: Replace
    12: JobId
    13: Plugin Options
Select parameter to modify (1-13): 5
The defined Client resources are:
     1: bacula
     2: ufc
     3: bacula-sd0
     4: apache
     5: dl-virtual
     6: gforge
     7: gitlab
     8: h-apache
     9: h-mysql
    10: interred
    11: listas
    12: mysql
    13: nginx
    14: ns1
    15: pgsql
    16: sisae
    17: sisdoc
    18: siseve
    19: suap
    20: ul-virtual
    21: virtual
    22: zimbra
Select Client (File daemon) resource (1-22): 2

Após a modificação descrita acima, chega a hora de inciar o Job:

Run Restore job
JobName:         Restore: apache
Bootstrap:       /var/lib/bacula/bacula-dir.restore.1.bsr
Where:           /opt/bacula/restores
Replace:         always
FileSet:         apache
Backup Client:   apache
Restore Client:  ufc
Storage:         bacula-sd0
When:            2015-03-18 20:44:21
Catalog:         MyCatalog
Priority:        10
Plugin Options:  *None*
OK to run? (yes/mod/no): yes

Pode-se acompanhar o andamento do Job autenticado em nossa VPN pptp.ifce.edu.br via bacula-web:

Quando a recuperação terminar, os arquivos estarão disponíveis no host de destino apontado como Restore Client logo acima:

root@ufc:~# ls -lah /opt/bacula/restores/var/www/sites
total 344K
drwxr-xr-x. 86 root                  root   4.0K Mar 18 20:54 .
drwxr-xr-x.  7 root                  root   4.0K Mar 18 20:54 ..
drwxrwx---.  3 acarau                apache 4.0K Sep 20  2012 acarau
[...]
drwxrwx---.  3 www                   apache 4.0K Sep 26  2013 www
drwxr-xr-x.  3 root                  root   4.0K Dec  8 11:15 www2

Luca do Amaral Saboya 2015/03/18 17:24

  • infraestrutura/bacula.txt
  • Última modificação: 2021/08/25 10:33
  • (edição externa)