===== Índice =====
- Gerência deste documento
- [[#Contribuidores|Contribuidores]]
- [[#Controle de versão|Controle de versão]]
- Visão geral
- [[#Sobre o serviço|Sobre o serviço]]
- [[#Arquitetura do Bacula|Arquitetura do Bacula]]
- [[#Tecnologias utilizadas|Tecnologias utilizadas]]
- [[#Ferramentas de desenvolvimento|Ferramentas de desenvolvimento]]
- [[#Monitoramento|Monitoramento]]
- [[#Acesso, Autenticação e Autorização|Acesso, Autenticação e Autorização]]
- Detalhes técnicos
- [[#Como fazer determinada tarefa|Como fazer determinada tarefa]]
- [[#Referências|Referências]]
- [[#Assinatura|Assinatura]]
=== Contribuidores ===
--- //[[lucas@ifce.edu.br|Lucas do Amaral Saboya]]//
===== 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
{{ :infraestrutura:arquitetura-bacula_.png?400 |}}
== 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 [[http://listas.ifce.edu.br/cgi-bin/mailman/listinfo/pio5ias345dy0gf9uj90jj|clicando aqui]];
* Acessar de dentro das [[infraestrutura:authorized_networks|redes autorizadas]] no [[http://fwpici.ifce.edu.br|fwpici]] o [[http://bacula-web.ifce.edu.br|bacula-web]];
* 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) [[http://www.baculasystems.com/bat-the-bacula-administration-tool|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:
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:
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:
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 [[http://bacula-web.ifce.edu.br/jobs.php|bacula-web]]:
{{ :undefined:screen_shot_2015-03-18_at_8.57.48_pm.png?500 |}}
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 ====
* http://blog.bacula.org/documentation/
* http://www.bacula-web.org/docs.html
* https://help.ubuntu.com/community/Bacula
* http://packages.ubuntu.com/trusty/bacula
==== Assinatura ====
--- //[[lucas.saboya@gmail.com|Luca do Amaral Saboya]] 2015/03/18 17:24//