Como deu pra perceber, a instalação do
Bacula é simples e
sem complicações. Por padrão os arquivos de configurações ficam
em
/usr/local/etc. Agora é a hora da configuração do
servidor e, para isso, deve-se entender sua estrutura
organizacional. Divide-se em 3 partes:
- o Director (bacula-dir.conf) é a parte mais complexa
do sistema, afinal é a principal onde figura-se toda a
configuração dos trabalhos de backup (job), agendamentos, pools,
seleção do que fazer backup (FileSet), definição do tipo de
armazenamento, etc. Enfim, é onde se configura os clientes e
arquivos que irão fazer parte do backup, além de se
comunicarem com os clientes e dispositivos de armazenamento.
- File Daemon (bacula-fd.conf) representa uma espécie
de agente, rodando em cada máquina que for participar de um
trabalho de backup. Em resumo, todo cliente deverá ter rodando
esse daemon, estabelecendo uma comunicação com o Director, que
por sua vez gerencia todas essas comunicações.
- Storage Daemon (bacula-sd.conf) é o arquivo de
configuração do Bacula onde se insere os dispositivos de
armazenamento, como fitas e discos. Esse daemon é responsável
por estabelecer a comunicação com esses dispositivos.
Em resumo, a boa divisão das funções que compõem um serviço de
backup do Bacula permite sua fácil configuração e administração.
Para a configuração geral de um dado backup, edite o arquivo
bacula-dir.conf; para configurar um cliente, é só editar
o file daemon (
bacula-fd.conf) na máquina que irá se
comunicar com o servidor (onde se encontra a unidade de
armazenamento); e para configurar o tipo de dispositivo que irá
armazenar os trabalhos, é só editar o
bacula-sd.conf.
Antes de iniciar a configuração desses 3 arquivos, deve-se ter
em mente o sistema de backup que você irá adotar para sua empresa.
Ele irá variar de acordo com a necessidade de negócio. Nesse
artigo o exemplo de configuração será baseado no seguinte sistema:
- Backup do próprio servidor, realizando a cópia completa de
todos os sites hospedados, no período de Segunda à Sexta. Como deu
pra perceber, configurei o Bacula no mesmo servidor Web, onde se
encontra a unidade de dispositivo (fita DAT Sony SDT-9000).
- Backup do servidor de e-mail, realizando a cópia de todas as
pastas das contas existentes, também no mesmo período que o servidor
Web. Esse é o cliente, rodando FreeBSD.
De acordo com os trabalhos definidos, agora é chegada a hora de
configurar o Bacula para atender esses backups. Abaixo seguem os
exemplos dos arquivos de configurações do servidor (onde se encontra
a fita DAT). Não irei explicar todos os parâmetros de configuração,
até porque são muitos. Como sempre, é só consultar o manual do
Bacula para obter todas as informações sobre os recursos
disponíveis.
Primeiro irei configurar o arquivo
bacula-sd.conf, inserindo
as principais diretivas sobre o dispositivo de armazenamento:
# vi /usr/local/etc/bacula-sd.conf
Storage {
Name = "server-dir"
# por padrão o bacula já utiliza o nome do servidor em que foi instalado,
# nesse caso o director será identificado como server-dir
SDPort = 9103
# porta de conexão com o daemon
WorkingDirectory = "/var/db/bacula"
PidDirectory = "/var/run"
SubSysDirectory = "/var/db/bacula"
# diretórios utilizados pelo Bacula, também padrão
}
#
# List Directors who are permitted to contact Storage daemon
#
Director {
Name = server-dir
Password = "senha"
}
#
# Devices supported by this Storage daemon
# To connect, the Director must have the same Name and MediaType,
# which are sent to the File daemon
#
Device {
Name = "DDS-3"
Media Type = DDS-3
Archive Device = /dev/sa0
# nesse caso, o dispositivo configurado é uma fita DAT Sony SDT-9000,
# DDS-3. O caminho para acesso no FreeBSD é o /dev/sa0, portanto muita
# atenção para a configuração de acordo com seu sistema
AutomaticMount = yes; # when device opened, read it
Offline On Unmount = yes
AlwaysOpen = yes;
RemovableMedia = yes;
Hardware End of Medium = No
BSF at EOM = yes
}
Messages {
Name = Standard
director = server-dir = all
operator = root = mount
}
# mensagens também padrão
Agora é hora de configurar o bacula-fd.conf de nosso
servidor, afinal ele também será backupeado. Em resumo, o único
parâmetro alterado foi a conexão com o Director, onde você deve
inserir a mesma senha cadastrada no
bacula-dir.conf
.
Obviamente elas devem coincidir para que sejam estabelecidas as
conexões entre o Director, seu cliente, e o dispositivo.
#
# Default Bacula File Daemon Configuration file
#
# There is not much to change here except perhaps the
# File daemon Name to
#
#
# List Directors who are permitted to contact this File daemon
#
Director {
Name = server-dir
Password = "senha"
}
#
# "Global" File daemon configuration specifications
#
FileDaemon {
Name = ns2-fd
FDport = 9102
WorkingDirectory = /var/db/bacula
Pid Directory = /var/run
# arquivos de conexão com o daemon, também padrão
}
# Send all messages except skipped files back to Director
Messages {
Name = Standard
director = server-dir = all, !skipped
}
Como teremos 2 clientes, o próprio servidor e outra máquina,
tendo seus dados backupeados é preciso configurar somente o file
daemon (bacula-fd.conf) da máquina conectada em rede.
Antes disso, é preciso instalar o Bacula com a opção
-enable-only-client. Após essa etapa, é só editar o arquivo
com as mesmas configurações acima. Depois é só startar seu daemon.
Para ter certeza de que tudo está em ordem com esse cliente,
certifique-se de que o daemon esteja rodando:
# ps awux | grep bacula
bacula 25934 0.0 0.7 3104 1892 ?? Ss Mon03PM 0:23.72 /sbin/bacula-fd -v -c /usr/local/etc/bacula-fd.conf
Beleza, está funcionando. A porta 9102 está aberta, pronta pra
estabelecer conexão com o servidor quando esse efetuar o backup.
Agora é chegada a hora de configurar o arquivo principal do Bacula,
o Director. Nele iremos inserir os jobs, agendamentos, clientes e
os arquivos a serem backupeados:
#
# Kerns Production Bacula Director Daemon Configuration file
#
Director {
Name = server-dir
DIRport = 9101
# where we listen for UA connections
QueryFile = "/usr/local/etc/query.sql"
WorkingDirectory = "/var/db/bacula"
PidDirectory = "/var/run"
SubSysDirectory = "/var/db/bacula"
Maximum Concurrent Jobs = 2
# como teremos 2 jobs sendo executados num mesmo agendamento, a #parâmetro foi alterado. O padrão é 1.
Password = senha
}
Schedule {
Name = "Diario"
Run = Level=Full Pool=SegundaPool Monday at 10:00pm
Run = Level=Full Pool=TercaPool Tuesday at 10:00pm
Run = Level=Full Pool=QuartaPool Wednesday at 10:00pm
Run = Level=Full Pool=QuintaPool Thursday at 10:00pm
Run = Level=Full Pool=SextaPool Friday at 10:00pm
# no agendamento, o backup será realizado
# de segunda à sexta, sempre às 22 horas. Criei um pool dos
# volumes para cada dia, afinal cada fita terá sua label
# para cada dia.
}
Job {
# essa é a configuração do trabalho do cliente, a maquina remota.
Name = "Servidor NS1"
Type = Backup
Level = Full
#backup do tipo full
Client=ns1-fd
#esse parâmetro será configurado logo abaixo
FileSet="Server-NS1"
#seleção do que será backupeado, também logo #abaixo
Messages = Standard
Storage = DDS-3
#dispositivo onde será armazenado o job
Pool = Default
Schedule = "Diario"
Write Bootstrap = "/var/db/bacula/Client1.bsr"
Priority = 10
}
Job {
Name = "Servidor NS2-local"
Type = Backup
Level = Full
Client=ns2-local
FileSet="Server-NS2"
Messages = Standard
Storage = DDS-3
Pool = Default
Schedule = "Diario"
RunAfterJob = "/usr/local/etc/ejeta_tape.sh"
# esse parâmetro especifica a
# execução de um comando após o término do job. Esse script faz com que a
# mídia seja desmontada e ejetada. O script está disponível no término desse
# arquivo.
Write Bootstrap = "/var/db/bacula/Client1.bsr"
Priority = 10
}
# Standard Restore template, to be changed by Console program
Job {
Name = "RestoreFiles"
Type = Restore
Client= ns2-local
FileSet="Full Set"
Storage = DDS-3
Messages = Standard
Pool = Default
Where = /tmp/bacula-restores
}
FileSet {
# insira os arquivos/diretórios que deverão ser copiados
Name = "Server-NS2"
Include = signature=MD5 {
/www
}
Exclude = {
# caso queira excluir algum diretório
/www/data
/tmp/* }
}
FileSet {
Name = "Server-NS1"
Include = signature=MD5 {
/var/mail
}
Exclude = {
/tmp/* }
}
FileSet {
Name = "Full Set"
Include = signature=MD5 {
# @/etc/backup.list
}
Exclude = { }
}
# Definição do dispositivo de armazenamento
Storage {
Name = DDS-3
Address = 172.16.0.3
#atenção, coloque sempre o IP e não localhost
SDPort = 9103
Password = senha
Device = "DDS-3"
# deve ser o mesmo do que o especificado no
# bacula-sd.conf
Media Type = DDS-3
}
# máquina local
Client {
Name = ns2-local
Address = localhost
FDPort = 9102
Catalog = BackupDB
Password = senha
File Retention = 30d
# 80 days
Job Retention = 1y
# one year
AutoPrune = yes
# Prune expired Jobs/Files
}
# máquina remota
Client {
Name = ns1-fd
Address = 172.16.0.2
FDPort = 9102
Catalog = BackupDB
Password = senha
File Retention = 30d
# 80 days
Job Retention = 1y
# one year
AutoPrune = yes
# Prune expired Jobs/Files
}
Catalog {
Name = BackupDB
dbname = bacula; user = bacula; password = ""
}
# o Bacula oferece o recurso de enviar os relatórios (logs)
# por e-mail. Para isso insira o seu servidor smtp e
# seu e-mail
Messages {
Name = Standard
mailcommand = "/home/bacula/bin/smtp -h servidor.smtp -f \"\(Bacula\) %r\" -s \"Bacula: %t %e of %c %l\" %r"
operatorcommand = "/home/bacula/bin/smtp -h servidor.smtp -f \"\(Bacula\) %r\" -s \"Bacula: Intervention needed for %j\" %r"
MailOnError =
[email protected] = all
append = "/home/bacula/bin/log" = all
operator =
[email protected] = mount
console = all
}
Pool {
Name = Default
Pool Type = Backup
Recycle = yes
# Bacula can automatically recycle Volumes
AutoPrune = yes
# Prune expired volumes
Volume Retention = 1d
# one year
}
Pool {
Name = SegundaPool
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 6d
# o volume poderá ser utilizado novamente
# para backup após 6 dias
Accept Any Volume = yes
}
Pool {
Name = TercaPool
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 6d
Accept Any Volume = yes
}
Pool {
Name = QuartaPool
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 6d
Accept Any Volume = yes
}
Pool {
Name = QuintaPool
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 6d
Accept Any Volume = yes
}
Pool {
Name = SextaPool
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 6d
Accept Any Volume = yes
}
Agora crie um script ejeta_tape.sh e salve em /usr/local/etc/. Não esqueça de definir permissão sobre esse arquivo para que o Bacula possa executá-lo.
#!/bin/sh
/usr/local/sbin/bconsole -c /usr/local/etc/bconsole.conf <<END_OF_DATA
unmount
quit
END_OF_DATA
Após a configuração desses 3 arquivos no servidor, o serviço Bacula
deverá ser iniciado. No meu caso, a instalação criou o daemon que
controla os serviços em /usr/local/etc/rc.d.
# bacula.sh start
Caso não haja erro de configuração, o Bacula será iniciado e pronto
pra executar os trabalhos de backup. Para confirmar sua execução:
# ps awux | grep bacula
bacula 50839 0.0 0.4 3068 1864 ?? Ss 4:20PM 0:09.66 /usr/local/sbin/bacula-sd -u bacula -g operator -v -c /usr/local/etc/
root 50841 0.0 0.4 3024 1844 ?? Ss 4:20PM 0:20.00 /usr/local/sbin/bacula-fd -u root -g wheel -v -c /usr/local/etc/bacul
bacula 50845 0.0 0.5 5800 2564 ?? Ss 4:20PM 0:10.23 /usr/local/sbin/bacula-dir -u bacula -g bacula -v -c /usr/local/etc/b
root 53861 0.0 0.2 1448 848 p0 S+ 11:40AM 0:00.00 grep bacula