Índice
- Gerência deste documento
- Visão geral
- Detalhes técnicos
Contribuidores
Controle de versão
Revisão: 0.1a (Validação não agendada)
Sobre o serviço
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.
Arquitetura do Bacula
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
Ferramentas de desenvolvimento
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.
Monitoramento
Para monitorar o serviço prestado, pode-se:
- Incluir seu endereço de email na lista pio5ias345dy0gf9uj90jj@listas.ifce.edu.br clicando aqui;
- Acessar pelo bconsole o bacula-director e rodar o comando:
list jobs
Acesso, Autenticação e Autorização
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
Como adicionar um novo host as rotinas de backup
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 }
Restaurando um Backup
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
Referências
Assinatura
— Luca do Amaral Saboya 2015/03/18 17:24