[Tutorial] Instalação do Bacula Com Multiplos Discos em Mesmo Pool

Tutorias diversos sobre serviços e aplicações em servidores Linux
Avatar do usuário
tacioandrade
Administrator
Administrator
Mensagens: 110
Registrado em: 10 Jun 2013 22:03
Localização: Vitória da Conquista - Ba
Idade: 34
Contato:
Status: Offline

[Tutorial] Instalação do Bacula Com Multiplos Discos em Mesmo Pool

Mensagem por tacioandrade »

=> Ambiente
* Servidor com 3 discos (em Raid 1) para armazenamento dos Backups
= /dev/md6 - 900GB
= /dev/md7 - 1TB
= /dev/md8 - 3TB


=> Lógica do Bacula

O Bacula é estruturado da seguinte forma:
* Device (disco ou partição do sistema), pode ser dividido em 1 ou mais Storages;
* Storage  (local de armazenamento de arquivos backupeados) e os arquivos backupeados em si ficam em arquivos chamados Pools;
* Pools são a aglomeração de Volumes (arquivos de um mesmo tamanho para que são usados para armazenamento dos Backups)
* Volume é apenas 1 dos arquivos do Pool que são usados para facilitar a pesquisa e indexação dos dados, além de facilitar o armazenamento dos mesmos em medias como CDs, DVDs, Fitas, etc;


=> Problema encontrado na configuração Básica do Bacula

O Bacula em si trabalha da seguinte forma, cada agendamento de backup, deve ser feito em um determinado Storage e cada Storage fica limitado a apenas um Device, ou seja, como nosso ambiente é muito grande, ou montariamos uma partição LVM unindo os 3 Volumes Raid em epenas 1 disco virtual ou então teriamos que dar um jeito do Bacula utilizar multiplos Devices (Discos) como se fosse um único Storage e para isso é necessário fazer uso do Pool Scratch e de links simbólicos.


=> Instalação do Bacula

Instale o Bacula da forma que achar melhor, seja compilando os pacotes manualmente ou com eu fiz, instalando a partir dos repositórios:

# apt-get install mysql-serve mysql-client bacula-director-mysql bacula-sd-mysql bacula-fd bacula-console bacula-common-mysql

Após instalar coloque uma senha de root no mysql e quando for requisitada a senha durante a instalação do bacula, digite-a para que o bacula crie um usuário com o nome bacula e a senha que você definir no passo seguinte.

=> Configuração

Inicialmente é necessário que os discos que se deseja utilizar para backup sejam montados durante o boot no servidor, para que os demais passos para a configuração do backup em múltiplos discos funcionem normalmente.
Após verificar que os discos estão montando corretamente, você deverá definir qual o tamanho que deseja que seus Volumes possuam (esse valor pode variar dependendo do que deseja fazer com ele, por exemplo 4GB se desejar armazenar uma cópia em DVD, no meu caso coloquei de 10GB). Após definir esse valor, vá no seu servidor onde o Bacula está instalado e dê o comando df -h, para definir quantos Volumes você poderá manter em cada disco, no meu exemplo:

root@bacula:/home/tacio# df -h
Sist. Arq.                                              Tam      Usad Dispon.  Uso% Montado em
/dev/md6                                                824G    25G    758G      4%    /DISCK900GB
/dev/md7                                                917G  200M    871G    1%    /DISCK1TB
/dev/md8                                                2,7T    203M    2,6T      1%  /DISCK3TB

Ou seja no meu caso no DISK900GB poderei ter até 82 Volumes de 10GB, pois 10GB * 82GB = 820GB. No DISK1TB teremos 87 Volumes e no DISK3TB teremos 260 Volumes.
Após definir a quantidade de Volumes que cada disco possui, devemos criar com o comando touch em cada disco (inicialmente vazio) essa mesma quantidade de arquivos.
Para criação deste arquivo pode-se usar um shell script mais ou menos como o seguinte:

#!/bin/bash
for i in {1..82}
do
  touch /DISK900GB/bacula0"$i "
done
for i in {1..87}
do
  touch /DISK1TB/bacula1"$i "
done
for i in {1..260}
do
  touch /DISK3TB/bacula1"$i "
done

Após criar a quantidade de volumes para cada disco, você deverá criar um diretório, /bacula (ou outro de sua preferência), e criar links simbólicos para cada um dos arquivos para o diretório /bacula.

#!/bin/bash
cd /DISCK900GB
for i in `ls b*`
do
  ln -s $i /bacula/$i
done
cd /DISCK1TB
for i in `ls b*`
do
  ln -s $i /bacula/$i
done
cd /DISCK3TB
for i in `ls b*`
do
  ln -s $i /bacula/$i
done
chown bacula.bacula -R /DISCK900GB
chown bacula.bacula -R /DISCK1TB
chown bacula.bacula -R /DISCK3TB
chmod -R 777 /DISCK900GB
chmod -R 777 /DISCK1TB
chmod -R 777 /DISCK3TB

Após criar todos os arquivos simbólicos corretamente, você terá um resultado parecido com o seguinte:
root@bacula:/home/tacio# ls -l /bacula/
total 0
lrwxrwxr-x 1 bacula bacula 23 Out 21 13:55 bacula00001 -> /DISCK900GB/bacula00001
lrwxrwxr-x 1 bacula bacula 23 Out 21 15:19 bacula00002 -> /DISCK900GB/bacula00002
lrwxrwxr-x 1 bacula bacula 23 Out 21 15:19 bacula00003 -> /DISCK900GB/bacula00003
lrwxrwxr-x 1 bacula bacula 23 Out 21 15:19 bacula00004 -> /DISCK900GB/bacula00004

Após os links serem criados, vamos agora para os arquivos de configuração. Primeiramente abra o arquivo /etc/bacula/bacula-sd.conf

Procure a sessão FileStorage e altere para ficar desta forma:

Device {
  Name = FileStorage
  Media Type = File
  Archive Device = /bacula          # Diretório onde você colocou os links simbólicos
  LabelMedia = no;                        # Não criar o volume automaticamente
  Random Access = Yes;
  AutomaticMount = yes;              # when device opened, read it
  RemovableMedia = no;
  AlwaysOpen = no;
  Maximum Changer Wait = 1800;
}

Salve o arquivo e abra o  /etc/bacula/bacula-dir.conf
No Director comente a linha DirAddress como abaixo caso queira acessar o console de recuperação ou outra ferramenta como o Bacula Administrator Tools, de outra maquina da rede:

Director {                            # Definição do diretor, nome que fica em TODOS os clientes
  Name = bacula-dir
  DIRport = 9101                # Porta padrão do diretor
  QueryFile = "/etc/bacula/scripts/query.sql"
  WorkingDirectory = "/var/lib/bacula"
  PidDirectory = "/var/run/bacula"
  Maximum Concurrent Jobs = 1
  Password = "SENHA"        # Senha alterada por segurança
  Messages = Daemon
#  DirAddress = 127.0.0.1
}

Na parte do Storage, altere para ficar mais ou menos desta forma:

Storage {
  Name = File
  Address = IP ou DNS do Servidor Bacula
  SDPort = 9103
  Password = "SENHA DO bacula-sd.conf"
  Device = FileStorage          # O Device onde estão os links simbolicos
  Media Type = File
}

Pool {
  Name = Default
  Pool Type = Backup
  Recycle = yes                      # Após acabar todos os Volumes ele apaga os antigos
  AutoPrune = yes                  # Prune expired volumes
  Volume Retention = 1 months        # Tempo que os backups devem ser mantidos
  Maximum Volume Bytes = 10GB    # Tamanho de cada volume definido anteriormente
  Maximum Volumes = 500                # Quantidade máxima de Volumes
  Recycle Pool = Scratch                  # De quem ele irá pegar os Volumes (depois explico)
}
Pool {
  Name = Scratch
  Pool Type = Backup
  Recycle = yes
  Recycle Pool = Scratch
  ActionOnPurge = Truncate
  Maximum Volume Bytes = 10GB  # Recomendo que coloque a mesma quantidade do Default
  Maximum Volumes = 500  # Recomendo que coloque a mesma quantidade do Default
}

Agora vou explicar o porque de 2 Pools distintos. No caso o Pool Scratch do Bacula é um pool especial, ele foi criado para que outros Pools possam pegar arquivos emprestados sempre que necessários. Agora após fazermos a configuração, vamos adicionar os Volumes criados no pool Scratch com outro script:

#!/bin/bash
cd /bacula
for i in `ls b*`
do
  echo label volume=$i pool=Scratch storage=File | bconsole
done
echo "list volumes pool=Scratch" | bconsole

Após rodar o script acima algo como isso aparecerá na tela:

Connecting to Director localhost:9101
1000 OK: bacula-dir Version: VERSAO
Enter a period to cancel a command.
list volumes pool=Scratch
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"
+---------+-------------+-----------+---------+----------+----------+--------------+---------+------+-----------+-----------+---------------------+
| MediaId | VolumeName  | VolStatus | Enabled | VolBytes | VolFiles | VolRetention | Recycle | Slot | InChanger | MediaType | LastWritten        |
+---------+-------------+-----------+---------+----------+----------+--------------+---------+------+-----------+-----------+---------------------+
|      1 | bacula00001 | Append    |      1 |      198 |        0 |  31,536,000 |      1 |    0 |        0 | File      | 0000-00-00 00:00:00 |
|      2 | bacula00002 | Append    |      1 |      198 |        0 |  31,536,000 |      1 |    0 |        0 | File      | 0000-00-00 00:00:00 |
|      3 | bacula00003 | Append    |      1 |      198 |        0 |  31,536,000 |      1 |    0 |        0 | File      | 0000-00-00 00:00:00 |

Caso apareça isso, está pronta a configuração, em TODOS os jobs que for agendar no Bacula, você deverá selecioanar o Pool padrão como Default e Storage como File.



Job {
  Name = BackupServidorX
  Type = Backup
  Level = Incremental
  Client = xserver-fd
  FileSet = BackupServidorX
  Schedule = WeeklyCycle
  Storage = File
  Pool = Default
  Messages = Standard
}

Agora é só adicionar os clientes, agendamentos, etc e pronto. =)



Avatar do usuário
marceloleaes
Administrator
Administrator
Mensagens: 1516
Registrado em: 10 Jun 2013 12:45
Localização: Novo Hamburgo
Idade: 41
Contato:
Status: Offline

Re:[Tutorial] Instalação do Bacula Com Multiplos Discos em Mesmo Pool

Mensagem por marceloleaes »

Aeeee \o/

Desenrolou o conde drácula man !!!!
"Transportai um punhado de terra todos os dias e fareis uma montanha." Confúcio

Responder

Voltar para “Tutoriais”