Olá a todos,
Num dos nossos posts anteriores, falei da minha migração de bacula para bareos.
Uma das razões que referi na altura, foi o formato mais aberto a comunidade do bareos versus a postura mais empresarial da empresa que produz o bacula.
Não me interpretem mal, todos necessitamos de comer, mas a postura pró-empresarial na forma que o bacula começou a ser gerido, em formato pay-for-goodies incomodou-me a um nível pessoal.
Uma outra razão, que deriva diretamente da abertura do bareos, foi a existência de plugins que podem ser utilizados para integrações extremamente interessantes.
Esta capacidade, e em particular o plugin de integração com clusters CEPH/Gluster, deixara-me de olhos em bico.

A ideia é simples: Ao invés de se fazer o típico backup para tape / virtual tape file, o backup é feito por objetos para dentro de um cluster de storage que suporte armazenamento por objetos.
A vantagem disto, é termos replicação em near-real-time de ficheiros, após os backups, por exemplo para uma localização segura, através de um mecanismo de replicação em geo-cluster:

Para os mais curiosos, sim, o processo de geo-replicação é suportado pela Red Hat em ambientes certificados para o efeito, já desde o Red Hat Storage 2.0.
Isto leva a necessidade por detrás do projeto: Foi me pedido um mecanismo de replica, o mais perto de tempo real, de virtual tapes usadas num backup, para um site remoto seguro.
Aguardar pelo fim do backup, para em seguida se efetuar um sync não seria aceitável.
A melhor forma de resolver o problema foi com o bareos+gfsapi, fazendo o backup para um gluster storage server local, deixando o gluster em si, fazer a replica.
O gluster geo-replicado já existia, pelo que a configuração adicional foi relativamente simples:
Nota: para referencia, o nosso volume de gluster que irá receber os backups chama-se geobackup.
No ficheiro /etc/glusterfs/glusterd.vol foi adicionada a opção rpc-auth-allow-insecure a todos os membros do cluster (locais e remoto). Em seguida efetuar um restart a instância de gluster.
Em seguida, nos membros do gluster efetuar o comando gluster volume set geobackups server.allow-insecure.
Existem versões de gluster que podem vos obrigar a parar e a arrancar o volume envolvido através do comando gluster volume stop geobackups e gluster volume start geobackups.
Nota: Tenham atenção se no vosso caso o volume de gluster for partilhado com aplicações ou containers, o restart e o stop/start irá levar a falha do volume e ao que estiver lá em funcionamento.
Em primeiro lugar vamos carregar as bibliotecas necessárias para a manipulação de objetos via gluster:
yum -y install bareos-storage-glusterfs
Em seguida, é altura de criar a diretoria-objecto onde o SD irá escrever as tapes referentes a este objecto:
mount -t glusterfs gluster.empresa.pt:geobackups /mnt mkdir /mnt/bareos chown bareos:bareos /mnt/bareos chmod ug=rwx /mnt/bareos umount /mnt
Substituir o FQDN gluster.empresa.pt pela vossa realidade / ip do vosso servidor de gluster.
Em seguida, será necessária a configuração do daemon do SD em si, para escrever na objecto-dir dentro do nosso gluster cluster.
# cat /etc/bareos/bareos-sd.d/device/GlusterStorage.conf
Device {
Name = GlusterStorage
Description = "Storage device using a Gluster backend."
Archive Device = "Gluster Device"
Device Options = "uri=gluster://gluster.empresa.pt/geobackups/bareos"
Device Type = gfapi
Media Type = GlusterFile
Label Media = yes
Random Access = yes
Automatic Mount = yes
Removable Media = no
Always Open = no
}
Após esta configuração será necessário adicionar a indicação do novo storage de SD disponível, ao Bareos Director:
cat /etc/bareos/bareos-dir.d/storage/Gluster.conf
Storage {
Name = Gluster
Address = IP_DO_VOSSO_SD_TIPICAMENTE_E_O_SERVIDOR_DE_BAREOS
Password = 5KNLs9MYkFWwbC46jqtU32jWEpmkHEGg
Device = GlusterStorage
Media Type = GlusterFile
}
Notem que o Device refere-se ao gerado no passo anterior, e que o MediaType é GlusterFile.
Finalmente, vamos configurar as definições de jobs, filesets no próprio director:
Job {
Name = customer_fileserver_Gluster
fileset = customer_fileserver_Gluster
Type = Backup
Level = Incremental
Client = servidorvps999-fd
Schedule = ClienteVPS999
Storage = Gluster
Pool = customer_fileserver
Messages = Standard
Reschedule on Error = yes
Reschedule Interval = 1 hours
Reschedule Times = 3
}
Pool {
Name = customer_fileserver
Pool Type = Backup
Volume Retention = 60 days
Recycle = yes
AutoPrune = yes
Label Format = customer_fileserver-
Maximum Volumes = 2000
Maximum Volume Bytes = 500M
}
FileSet {
Name = customer_fileserver
Include {
File = /var/www
File = /home
File = /var/pgsql-exports/
Options {
signature = MD5
compression = GZIP9
wild = "*.jpg"
wild = "*.gz"
wild = "*.gif"
wild = "*.zip"
wild = "*.mp3"
noatime=yes
}
}
}
Options {
signature = MD5
compression = GZIP9
aclsupport = yes
signature = MD5
xattrsupport = yes
}
}
}
Finalmente efetuamos um reload ao bareos-sd e ao bareos-dir e tudo deverá funcionar perfeitamente e a primeira :).
Nota: Foram detetados alguns casos onde o bareos-sd tem de correr como root sob pena de aparecerem erros de permissões a escrever os ficheiros de vtapes dentro da pool de storage gluster.
O processo para mim foi baseado em trial-and-error, pois a documentação não estava muito explicita na minha optica, e sobretudo porque a arquitetura deste Cliente é particularmente complexa envolvendo redes de frontend e redes de backup dedicadas para alguns sistemas.
Um dos pontos que tropecei foi nas permissões do object-dir dentro do gluster:
Todas as virtual tapes vão ser criadas com os UIDs/GIDs do Bareos-SD original.
Se não foram dadas permissões adequadas, os vossos ficheiros vão ficar na root do vosso gluster storage volume, ao invés da diretoria de armazenamento esperada.
Outro ponto importante a reter, é a necessidade de garantir conectividade entre a VPS do vosso cliente, e o vosso servidor de SD na porta do processo bareos-sd.
Claro que se tiverem duvidas já sabem onde me encontrar, ou em alternativa, pf enviem-me um email para nuno(at)nuneshiggs.com
Abraço!
Nuno
