Aumentar a Performance do Catálogo do Bacula (múltiplos bancos de dados)

load balancer

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:

bacula bancos de dados

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”

}

Catalog {
Name = Catalogo1
# dbdriver = “dbi:sqlite3”; dbaddress = 127.0.0.1; dbport =
dbname = bacula; DB Address = “”; dbuser = “bacula”; dbpassword = “123456”
}
Catalog {
Name = Catalogo2
# dbdriver = “dbi:sqlite3”; dbaddress = 127.0.0.1; dbport =
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

}

Pronto.

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.

bacula cluster 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: pt-brPortuguês

Deixe uma resposta