Para o backup de centenas de milhares de arquivos a performance de escrita no banco de dados (catálogo) do Bacula pode tornar-se um gargalo.
Dessa maneira vamos abordar alguns pontos de melhoria no sentido que a capacidade de transações seja ampliada:
1. Múltiplos Bancos de Dados configurados num mesmo Director
Apesar de servir ao propósito este método traz algumas desvantagens, tais como:
a) Maior dificuldade na administração de bases distintas;
b) Limitação no uso dos storages, na medida que o acesso a determinado volume, pelo banco, precisa ser exclusivo (e consequentemente, as pools também terão de pertencer a apenas um BD). Veja o exemplo diagramado abaixo:
1.1. Configuração de Múltiplos Catálogos no Mysql*:
*Escolhi o MySql porque não possui até o momento (versão 5.x) funcionalidade de balanceamento de carga nativa, mas os procedimentos a seguir podem ser utlizados no Postgesql com as devidas adaptações.
Para criação de um segundo catálogo, após uma instalação fresca do Bacula, realizei um dump do banco de dados:
mysqldump -u root -p[senha_root_mysql] bacula > /etc/bacula/bacula1.sql
Em seguida, criei um novo banco de nome distinto – bacula1, isso através da console do Mysql.
mysql -u root -p[senha_root_mysql]
(agora você deve estar na console do Mysql. mysql>)
create database bacula1;
Na mesma console realizei a restauração do dump:
use bacula1
. bacula1.sql
Garanti os direitos para o usuário do MySql Bacula, para o segundo banco (o bacula1):
grant all privileges on bacula1.* to bacula@localhost;
Com os dois bancos criados, editei o arquivo /etc/bacula/bacula-dir.conf para configurar o acesso do Bacula ao segundo banco. Minhas entradas ficaram assim:
Catalog {
Name = Catalogo1
dbname = bacula; DB Address = “”; dbuser = “bacula”; dbpassword = “123456”
}
Catalog {
Name = Catalogo2
dbname = bacula1; DB Address = “”; dbuser = “bacula”; dbpassword = “123456”
}
}
Depois de reiniciado o Bacula Director o mesmo irá te perguntar que base deve utilizar quando, por exemplo, for submeter um job manualmente.
Em relação ao agendamento de jobs necessário especificar em cada um dos clientes quais dos Catálogos ele deve utilizar. Neste momento você pode fazer um balanceamento de carga manual, dividindo os clientes que possuem maior quantidade de arquivos em Catálogos separados. Exemplo:
Client {
Name = debian-fd
Address = localhost
FDPort = 9102
Catalog = Catalogo1
…
}
Client {
Name = debian2-fd
Address = localhost
FDPort = 9102
Catalog = Catalogo2
…
}
Por último, basta apenas certificar-se de agendar os jobs no recurso Scheudle, de maneira jobs de catálogos diferentes utilizem pools distintas. Fiz isso implementando dois agendamentos:
Schedule {
Name = “Clientes Catatalogo1”
Run = Full Storage = BackupDisco1 Pool = SemanalDisco 1st sun at 23:05
…
}
Schedule {
Name = “Clientes Catatalogo2”
Run = Full Storage = BackupFita1 Pool = SemanalFita 1st sun at 23:05
…
}
2. Configuração de Load Balancer no Catálogo do Bacula (Postgresql)
Esta talvez seja a solução mais elegante para ampliar a capacidade do banco de dados utilizado pelo Bacula.
Além disso pode ser implementado com características de alta disponibilidade, dirimindo assim os impactos com um possível crash de Banco.
O balanceamento de carga com o Postgresql pode ser implementado através da ferramenta Pgpool-2, que dispõe de farta documentação na Internet.
Disponível em: Português