25 junho 2007

Tutorial Bacula: Configurando Director Daemon

Voltei para postar mais uma parte do tutorial sobre Bacula, desta vez explicarei sobre a configuração do Director Daemon. Como já havia dito, é a configuração mais complexa do Bacula, e, como irão perceber, o arquivo de configuração é bem extenso. Eu modifique toda a disposição do arquivo de configuração em relação ao padrão, dividindo-o em seções que, na minha opinião, fica bem mais fácil de ser entendido.

Coloquei algumas observações em forma de comentário no meio das configurações. Basicamente todos os pontos importantes estão comentados. Os motivos para os pontos que não estão comentados são: a) não havia necessidade de comentar, é auto-explicativo; b) a configuração do item logo acima é igual e já esta comentado (devemos evitar redundância); c) eu realmente esqueci de comentar ;-), nesse caso me avisem para que possa corrigir.

Vamos ver as configurações:

#
# Configuracoes globais do servidor bacula
#

Director {

# Nome do Director Daemon – Servidor Bacula que estamos configurando agora
Name = sf1-dir
# Porta pela qual o servidor Bacula será acessado (normalmente pelo console)
DIRport = 9101
# Arquivo contendo as instruções SQL usadas para acessar o banco de dados
QueryFile = "/etc/bacula/query.sql"
# Diretório de trabalho do Director
WorkingDirectory = "/var/lib/bacula/working"
PidDirectory = "/var/run"
# Numero máximo de trabalhos ao mesmo tempo
Maximum Concurrent Jobs = 1
# Senha necessaria para acessar o servidor bacula pelo console
Password = "senha"
# Configuração de mensagens utilizadas pelo Director
Messages = Mensagens
}

##################################################################################
## Banco de dados a ser usado para armazenar as informações dos backups
##################################################################################
Catalog {

# Nome do catálogo
Name = MyCatalog
# Nome do banco de dados, usuário e senha para ser acessado pelo Bacula
# Por padrão a senha do banco de dados esta em branco, caso você altere a senha
# no banco de dados, deve colocar a nova senha aqui
dbname = bacula; user = bacula; password = ""
}

##################################################################################
# Seção clientes
# Configura os clientes onde estão os dados a serem armazenados em backup
##################################################################################
###################
## Servidor ServArq
###################
Client {

Name = ServArq
# Nome ou endereço IP do cliente
Address = servarq
# Porta de acesso ao cliente, configurada no arquivo de configuração do cliente
FDPort = 9102
# Catalogo a ser utilizado no banco de dados
Catalog = MyCatalog
# Senha para se acessar o cliente, configurada no arquivo de configuração do cliente
Password = "senha"
# Tempo em que o backup do cliente sera armazenado no banco de dados
# Passado esse tempo o registro desse arquivo sera excluído
# Isso não afeta o backup que esta armazenado
File Retention = 30 days
# Tempo em que os trabalhos do cliente serão armazenados no baco de dados
# Passado esse tempo o registro desse arquivo sera excluído
# Isso não afeta o backup que esta armazenado
Job Retention = 30 days
# Este comando irá apagar os registros dos arquivos e jobs,
# citados acima, automaticamente
AutoPrune = yes
}

# Este cliente é praticamente igual ao cliente acima, somente muda
# o tempo de retenção dos arquivos e dos jobs
# Fiz dessa forma pois os backups mensais devem ser guardados por
# um tempo muito maior que os backups diários e semanais
Client {

Name = ServArqMensal
Address = servarq
FDPort = 9102
Catalog = MyCatalog
Password = "senha"
# Estou deixando para 20 anos pois o backup mensal terá retenção de 20 anos
File Retention = 20 years
Job Retention = 20 years
AutoPrune = yes
}

#############################################
## ServApl – servidor de aplicações
## Basicamente é repetida a configuração do ServArq
## inclusive uma configuração distinta para o backup
## mensal
#############################################
Client {

Name = ServApl
Address = servapl
FDPort = 9102
Catalog = MyCatalog
Password = "senha"
File Retention = 30 days
Job Retention = 30 days
AutoPrune = yes
}

Client {

Name = ServAplMensal
Address = servapl
FDPort = 9102
Catalog = MyCatalog
Password = "senha"
File Retention = 20 years
Job Retention = 20 years
AutoPrune = yes
}

###############
## ServBD – servidor de banco de dados
###############
Client {

Name = ServBD
Address = servbd
FDPort = 9102
Catalog = MyCatalog
Password = "senha"
File Retention = 30 days
Job Retention = 30 days
AutoPrune = yes
}

Client {

Name = ServBDMensal
Address = servbd
FDPort = 9102
Catalog = MyCatalog
Password = "senha"
File Retention = 20 years
Job Retention = 20 years
AutoPrune = yes
}

##################################################################################
# Seção Pool
##################################################################################

Pool {

# Define o Pool para o backup semanal completo
Name = Semanal
Pool Type = Backup
# As 2 opções abaixo são utilizada para que a fita sera auto reciclada,
# ou seja, eh como se dissesse que os dados da fita podem ser apagados
# e gravados novos dados em seu lugar
Recycle = yes
AutoPrune = yes
# Define quanto tempo os dados ficarão na fita sem poderem ser apagados.
# Somente a depois desse tempo a fita sera reciclada
Volume Retention = 13 days
# Define a quantidade máxima de trabalhos que podem ser armazenados em uma fita
# sem que ela precise ser reciclada
Maximum Volume Jobs = 3
# Define o numero máximo de fitas que sera utilizada pelo Pool
Maximum Volumes = 2
}

Pool {

# Define o Pool para o backup diário incremental.
# As opções abaixo são as mesmas do Pool Semanal.
Name = Diario
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 7 days
Maximum Volume Jobs = 12
Maximum Volumes = 1
}

Pool {

# Define o Pool para o backup Mensal completo.
# As opções abaixo são as mesmas das anteriores.
# Aqui não definiremos um máximo de volumes, isso faz com que
# possa ser usado quantos volumes forem necessários.
Name = Mensal
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 20 years
Maximum Volume Jobs = 3
}

# O Pool Defaul deve ser criado pois os jobs exigem que seja
# definido o parâmetro Pool, e como não é bom utilizar um dos Pools
# acima, criamos um default. Ele nunca será usado de fato.
Pool {

Name = Default
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 365 days
}

##################################################################################
# Seção Schedule
# Agenda o nível , a data e a hora do backup para os jobs
##################################################################################
# É necessário criar um agendamento para cada cliente, pois não é
# possível fazer backup de vários clientes com o mesmo trabalho de backup
##########
# ServArq
##########
Schedule {

# Agenda o backup completo para a segunda, terceira, quarta e quinta (caso haja)
# segunda-feiras de cada mês, e também os backup diários incrementais.
# Se o mês não tiver 5 segunda-feiras, a quinta segunda-feira será ignorada.
# O backup sera sempre as 22:00 horas.
# Foram passados dois parâmetros Run pois um mesmo agendamento pode
# agendar datas e horários diferentes para o mesmo backup.

# Nome do agendamento
Name = ServArq
# Indica o nível, o dia e a hora do backup
Run = Full 2nd-5th Monday at 10:00pm
Run = Incremental tue-sun at 10:00pm

}

# Agenda o backup mensal para o servidor ServArq
Schedule {

Name = ServArqMensal
Run = Full 1st Monday at 10:00pm
}

############
# ServApl
############
# Agenda o backup completo e incremental para o servidor ServApl
# O backup sera sempre as 22:10 horas
Schedule {

Name = ServApl
Run = Full 2nd-5th Monday at 10:10pm
Run = Incremental tue-sun at 10:10pm
}

# Agenda o backup mensal para o servidor ServApl
Schedule {

Name = "ServAplMensal"
Run = Full 1st Monday at 10:10pm
}

############
# ServBD
############
# Agenda o backup completo e incremental para o servidor ServBD
# O backup sera sempre as 22:20 horas
Schedule {

Name = ServBD
Run = Full 2nd-5th Monday at 10:20pm
Run = Incremental tue-sun at 10:20pm
}

# Agenda o backup mensal para o servidor ServBD
Schedule {

Name = ServBDMensal
Run = Full 1st Monday at 10:20pm
}

##################################################################################
# Seção FileSet
# Determina quais arquivos devem ser feitos backup e quais ficarão fora dos backups
##################################################################################
FileSet {

Name = ServArq
# Define quais arquivos ou diretórios farão parte do backup
Include {
# Define algumas opções para o backup
Options {
# Opção de segurança
signature = MD5
# Compressão dos dados usando GZIP
# O número 9 indica o taxa de compressão, quanto mais alto
# mais compressão. Vai de 1 a 9
compression=GZIP9
# Exclui do backup os arquivos com extensão tmp
wildfile = "*.tmp"
# Diz que os arquivos indicados em wildfile não farão parte do backup
Exclude = yes
}
# Define quais diretórios farão parte do backup
File = /arquivos/dados
File = /etc
}
}

FileSet {

Name = "ServApl"
Include {
Options {
signature = MD5
IgnoreCase = yes
compression=GZIP9
wildfile = "*.tmp"
Exclude = yes
}
# Por ser sistema de arquivos Windows é necessário indicar a letra da unidade
# A barra (/) não esta errada, por ser em Linux é essa mesmo que temos de usar
File = "F:/Aplicacoes"
}
}

FileSet {

Name = "ServBD"
Include {
Options {
signature = MD5
IgnoreCase = yes
compression=GZIP9
}
File = "G:/BKPBancos"
}
}

##################################################################################
# Seção Storage
# Configura qual servidor esta com a unidade de fita, qual unidade de fita usar
##################################################################################
Storage {

# Nome do dispositivo a ser usado no Director
Name = AIT-1
# Endereço do servidor, pode ser o nome ou o endereço IP
Address = ServArq
# Porta pela qual o servidor de Storage será acessada
SDPort = 9103
# Senha com a qual o Director acessará o Storage Daemon
Password = "senha"
# Dispositivo configurado no Storage Daemos que iremos utilizar
Device = AIT-1
}

##################################################################################
# Seção Job
# Configura os trabalhos de backup
##################################################################################
# Para que se possa fazer um backup completo na segunda-feira e incremental
# nos demais dias da semana, é necessário que os dois tipos de backup sejam
# controlados por este mesmo job. É necessário que o Client e o FileSet também
# sejam os mesmo nos dois tipos de backup. Analisando a configuração veremos isso.
# Uma observação que deve ser feita é que, mesmo quando estiver agendado para
# executar o backup incremental, o Bacula poderá executar o backup Full. Dois motivos
# para que isso aconteça é: 1 – Nunca ter sido feito um backup full desses arquivos antes;
# 2 – ter sido feito alguma mudança no FileSet.
############
# ServArq
############
# Define o trabalho para o backup semanal e diário do ServArq
Job {

# Nome do trabalho
Name = ServArq
# Tipo do trabalho, pode ser Backup ou Restore
Type = Backup
# Cliente que foi configurado acima
Client = ServArq
# File set do servidor ServArq configurado acima
FileSet = ServArq
# O storage configurado acima
Storage = AIT-1
# O agendamento para o backup do ServArq configurado acima
Schedule = ServArq
# O Pool configurado, mas que será indicado aqui apenas por que o Bacula
# exige esse parâmetro, não será utilizado
Pool = Default
# Os dois parâmetros abaixo serão os utilizados para indicar o Pool.
# Um indica o Pool o Pool para o backup Full e o outro para o Incremental.
# O Bacula que indica qual Pool será utilizado, conforme agendamento.
Full Backup Pool = Semanal
Incremental Backup Pool = Diario
# Configuração de mensagem utilizada por este Job
Messages = Mensagens
# Script que será executado antes da execução do backup. No caso, esse script
# montará o dispositivo (caso não esteja montado) antes de ser feito o backup.
# Mostrarei esse script no final dessa parte do artigo.
RunBeforeJob = "/usr/sbin/monta_tape.sh"
# Define a prioridade do Job, quanto menor o valor, a prioridade é maior
# O padrão é 10. É uma opção importante pois, caso os backups atrasem, a execução
# será pela prioridade e não mais pelo horário.
Priority = 10
}

# Define o trabalho para o backup mensal do servidor ServArq
Job {

Name = ServArqMensal
Type = Backup
Client = ServArqMensal
FileSet = ServArq
Storage = AIT-1
# Neste caso informamos somente um Pool, pois o backup mensal
# será sempre completo
Pool = Mensal
Schedule = ServArqMensal
Messages = Mensagens
RunBeforeJob = "/usr/sbin/monta_tape.sh"
Priority = 10
}

# Define o trabalho de Restore o backup semanal do servidor ServArq
# O Job Restore é importante para restaurarmos um backup
# As opções são as mesmas dos Jobs de backup
Job {

Name = RestoreServArqSemanal
Type = Restore
Client = ServArq
FileSet = ServArq
Storage = AIT-1
Messages = Mensagens
Pool = Semanal
Where = /tmp/bacula-restores
}

Job {

Name = RestoreServArqDiario
Type = Restore
Client = ServArq
FileSet = ServArq
Storage = AIT-1
Messages = Mensagens
Pool = Diario
Where = /tmp/bacula-restores
}

Job {

Name = RestoreServArqMensal
Type = Restore
Client = ServArqMensal
FileSet = ServArq
Storage = AIT-1
Messages = Mensagens
Pool = Mensal
Where = /tmp/bacula-restores
}

###############
# ServApl
###############
Job {

# Define o trabalho para o backup semanal do servidor ServApl
Name = ServApl
Type = Backup
Client = ServApl
FileSet = ServApl
Storage = AIT-1
Schedule = ServApl
Pool = Default
Full Backup Pool = Semanal
Incremental Backup Pool = Diario
Messages = Mensagens
RunBeforeJob = "/usr/sbin/monta_tape.sh"
Priority = 11
}

Job {

Name = ServAplMensal
Type = Backup
Level = Full
Client = ServAplMensal
FileSet = ServAplMensal
Storage = AIT-1
Pool = Mensal
Schedule = ServAplMensal
Messages = Mensagens
RunBeforeJob = "/usr/sbin/monta_tape.sh"
Priority = 11
}

Job {

Name = RestoreServAplSemanal-sapp
Type = Restore
Client = ServApl
FileSet = ServApl
Storage = AIT-1
Messages = Mensagens
Pool = Semanal
Where = /tmp/bacula-restores
}

Job {

Name = RestoreServAplDiario
Type = Restore
Client = ServApl
FileSet = ServApl
Storage = AIT-1
Messages = Mensagens
Pool = Diario
Where = /tmp/bacula-restores
}

Job {

Name = RestoreServAplMensal
Type = Restore
Client = ServApl
FileSet = ServApl
Storage = AIT-1
Messages = Mensagens
Pool = Mensal
Where = /tmp/bacula-restores
}

###############
# ServBD
###############
Job {

# Define o trabalho para o backup semanal
Name = ServBD"
Type = Backup
Client = ServBD
FileSet = ServBD
Storage = AIT-1
Schedule = ServBD
Pool = Default
Full Backup Pool = Semanal
Incremental Backup Pool = Diario
Messages = Mensagens
RunBeforeJob = "/usr/sbin/monta_tape.sh"
Priority = 12
}

Job {

Name = ServBDMensal
Type = Backup
Level = Full
Client = ServBDMensal
FileSet = ServBDMensal
Storage = AIT-1
Pool = Mensal
Schedule = ServBDMensal
Messages = Mensagens
RunBeforeJob = "/usr/sbin/monta_tape.sh"
Priority = 12
}

Job {

Name = RestoreServBDSemanal
Type = Restore
Client = ServBD
FileSet = ServBD
Storage = AIT-1
Messages = Mensagens
Pool = Semanal
Where = /tmp/bacula-restores
}

Job {

Name = RestoreServBDDiario
Type = Restore
Client = ServBD
FileSet = ServBD
Storage = AIT-1
Messages = Mensagens
Pool = Diario
Where = /tmp/bacula-restores
}

Job {

Name = RestoreServBDMensal
Type = Restore
Client = ServBD
FileSet = ServBD
Storage = AIT-1
Messages = Mensagens
Pool = Mensal
Where = /tmp/bacula-restores
}

##################################################################################
# Seção Mensagens
##################################################################################

Messages {

Name = Mensagens
# Envia todas as mensagens geradas pelo Bacula para o arquivo
# /var/log/messages
syslog = all, !skipped, !saved
}

Esse é o script que será executado antes do primeiro Job do dia para montar a fita no Bacula:
Depois de criado o script, é só dar as permissões adequadas e estará pronto.

Eu sei que esteticamente essa listagem do arquivo de configuração não ficou nada boa, mas espero que todos tenham conseguido entende-lo. Não é mesmo complexo? Mas o grande problema é que, talvez, para deixar as configurações mais simples tenha uma grande perda na flexibilidade do sistema. O ideal seria um sistema menos complexo de se configurar e com toda flexibilidade que o Bacula tem. Acho que vou fazer disso o meu projeto de TCC da faculdade ;-).

Um ponto que gostaria de comentar é sobre redundância, que falei no começo do post, que nesse arquivo de configuração é abundante (pelo menos a meu ver). Uma mesmas configuração pode ser encontrada em vários pontos diferentes da configuração. Acredito que isso seja uma coisa que gera dificuldade para a maioria das pessoas entenderem como o Bacula funciona.

Como de praxe, peço para que comentem principalmente se o artigo precisar de alguma melhoria para que fique mais fácil de entende-lo.

A próxima parte, a última (felizmente, não aguento mais escrever sobre Bacula :-\ ), trará a explicação de como operar o sistema. Será um manual básico sobre as principais funções necessárias para operação do sistema, sem se aprofundar muito. Pretendo faze-lo até a próxima semana.

3 comentários:

Aldeia Digital disse...

Meus sinceros parabéns pelo artigo!!!

O Bacula é muito interessante, mas é realmente muito complexo para pequenas situações.

Um abraço,

Alexandre

Helton disse...

Mt bom...mas no meu ta dando um erro de autorização do FileSet onde eu posso arrumar esse erro?!!?

domaxzz10 disse...

Excelente tutorial.
O bacula é um software fantástico, mas muito complexo. Exige muita dedicação mas depois vem a recompensa.