De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


Bacula - Gestão de Backup Distribuida - Prática (cont.)

Colaboração: Alexandro Silva

Data de Publicação: 31 de março de 2010

Agora iremos configurar o Bacula Storage e o File Daemon:

Edite o arquivo /etc/bacula/bacula-sd.conf

  Storage {                             # definition of myself
  Name = backup-sd
  SDPort = 9103                  # Director's port
  WorkingDirectory = "/var/lib/bacula"
  Pid Directory = "/var/run/bacula"
  SDAddress = 123.122.123.123
  }
  
  # List Directors who are permitted to contact Storage daemon
  
  Director {
  Name = backup-dir
  Password = "Nlw2vp555z4vep0dasdads"
  }
  
  # Restricted Director, used by tray-monitor to get the
  #   status of the storage daemon
  
  Director {
  Name = backup-mon
  Password = "Mon/GxVW6dfndasdasdsadasd"
  Monitor = yes
  }
  
  # Devices supported by this Storage daemon
  # To connect, the Director's bacula-dir.conf must have the
  #  same Name and MediaType.
  
  Device {
  Name = FileStorage
  Device Type = File
  Media Type = File
  Archive Device = /backup2/storage
  }

Edite o arquivo /etc/bacula/bacula-fd

  # List Directors who are permitted to contact this File daemon
  
  Director {
  Name = "backup-dir"
  Password = "Nlw2vp555z4vep0viaBpeAsdads"
  }
  
  # Restricted Director, used by tray-monitor to get the
  #   status of the file daemon
  
  Director {
  Name = "backup-mon"
  Password = "Mon/GxVW6dfnO+EVBPpkdasdsaP"
  Monitor = yes
  }
  
  # "Global" File daemon configuration specifications
  
  FileDaemon {                          # this is me
  Name = Server-2-fd
  FDport = 9102                  # where we listen for the director
  WorkingDirectory = /var/lib/bacula
  Pid Directory = /var/run/bacula
  Maximum Concurrent Jobs = 20
  FDAddress = 123.123.123.123
  Heartbeat Interval = 15 seconds
  }
  
  # Send all messages except skipped files back to Director
  Messages {
  Name = Standard
  director = backup-dir = all, !skipped, !restored

Com todos os arquivos devidamente configurados inicie os serviços

  invoke-rc.d bacula-director restart
  invoke-rc.d bacula-sd restart
  invoke-rc.d bacula-fd restart

E conecte-se ao Bacula Console:

  bconsole
  Connecting to Director 123.123.123.123:9101
  1000 OK: backup-dir Version: 2.4.4 (28 December 2008)
  Enter a period to cancel a command.
  *

Aparecendo a tela acima tudo está funcionando perfeitamente. Para obter informações sobre os comandos digite help.

Existe uma gama de ferramentas gráficas para gestão do bacula, posso citar o bacula-console-qt. Para ser sincero eu não utilizo ferramentas gráficas. O Bacula Console me atende muito bem nas tarefas diárias.

Backup dos SGBDs

Como informei anteriormente, existe uma limitação do Bacula para fazer cópias de segurança de SGBDs porém não recomendo o backup "a quente" das bases. Todos os SGBDs do mercado possuem ferramentas que geram o dump do banco sem afetar a integridade dos dados. Seguem 02 scripts que utilizo para gerar as cópias tanto do Postgresql quanto do MySQL:

MySQL

Este script é de autoria do meu colega Marcelo Dultra, analista de segurança da FTC.

O arquivo de configuração /etc/bkpmysql.cfg contém as infomações necessárias para a realização do backup

  Nome do Job:Nome do dump:Diretório destino:Usuário do banco:senha:Arquivo log:email envio alerta

Esse é o script

  #!/bin/bash
  
  #
  # Definicao de Variaveis
  #
  
  arqcontrole='/etc/bkpmysql.cfg'
  
  if [ -z "${arqcontrole}" ]
  then
   echo "${0} - Erro Fatal: Arquivo de Configuracao nao existe!"
   exit 1
  fi
  
  titbkp=`cat ${arqcontrole}|cut -d: -f1`
  arqbkp=`cat ${arqcontrole}|cut -d: -f2`
  adibkp=`cat ${arqcontrole}|cut -d: -f3`
  usebkp=`cat ${arqcontrole}|cut -d: -f4`
  senbkp=`cat ${arqcontrole}|cut -d: -f5`
  logbkp=`cat ${arqcontrole}|cut -d: -f6`
  usrbkp=`cat ${arqcontrole}|cut -d: -f7`
  dia=`date '+%u'`
  
  msg_erro()
  {
   echo "ATENCAO ADMINISTRADOR!                       " > /tmp/bkpmysql.msg
   echo "Erro no Backup da Base de Dados Horde - ${serbkp}!" >> /tmp/bkpmysql.msg
   echo ${msg}                                          >> /tmp/bkpmysql.msg
   mail ${usrbkp} -s "${serbkp} - Erro Backup DB Horde" </tmp/bkpmysql.msg
  }
  
  echo "`date '+%d/%m/%y - %H:%M:%S -'` INICIO DA ROTINA" > ${logbkp}
  
  case ${dia} in
    1) sem="Segunda";;
    2) sem="Terca";;
    3) sem="Quarta";;
    4) sem="Quinta";;
    5) sem="Sexta";;
    6) sem="Sabado";;
    7) sem="Domingo";;
    *) msg="Dia da Semana nao definido"
       msg_erro
       echo "`date '+%d/%m/%y - %H:%M:%S -'` Erro! Dia da Semana Invalido!" >> ${logbkp}
       exit 1
  esac
  
  if [ -z "${titbkp}" -o -z "${arqbkp}" -o -z "${adibkp}" -o -z "${usebkp}" -o -z "${senbkp}" -o -z "${logbkp}" -o -z "${usrbkp}" -o -z "${sem}" ]
  then
        echo "`date '+%d/%m/%y - %H:%M:%S -'` Parametros Invalidos!" >> ${logbkp}
        msg="`date '+%d/%m/%y - %H:%M:%S -'` Parametros Invalidos!"
   msg_erro
   exit 1
  fi
  
  cd ${adibkp}
  
  echo "`date '+%d/%m/%y - %H:%M:%S -'` Gerando dump do banco ..." >> ${logbkp}
  
  mysqldump -u ${usebkp} -p${senbkp} --add-locks --add-drop-table --all-databases --flush-logs --disable-keys --result-file=${arqbkp}.${sem} 2>> ${logbkp}
  
  if [ ${?} -eq 0 ]
  then
        echo "`date '+%d/%m/%y - %H:%M:%S -'` Dump Gerado!"                  >> ${logbkp}
  else
        echo "`date '+%d/%m/%y - %H:%M:%S -'` Erro na realizacao do Backup!" >> ${logbkp}
        msg="`date '+%d/%m/%y - %H:%M:%S -'` Erro na realizacao do Backup!"
   msg_erro
   exit 1
  fi
  
  echo "`date '+%d/%m/%y - %H:%M:%S -'` Compactando arquivo do dump ..." >> ${logbkp}
  
  gzip -f ${arqbkp}.${sem}
  
  if [ ${?} -eq 0 ]
  then
        echo "`date '+%d/%m/%y - %H:%M:%S -'` Arquivo Compactado!" >> ${logbkp}
  else
        echo "`date '+%d/%m/%y - %H:%M:%S -'` Erro na compactacao!" >> ${logbkp}
        msg="`date '+%d/%m/%y - %H:%M:%S -'` Erro na compactacao!!"
        msg_erro
        exit 1
  fi
  
  echo "`date '+%d/%m/%y - %H:%M:%S -'` FIM DA ROTINA DE BACKUP ..." >> ${logbkp}
  
  exit

Postgresql

  #!/bin/bash
  DATE=`date +"%Y-%m-%d"`
  HOSTNAME=`hostname`
  DIR=/var/bkpdb
  d=rtdb
  su postgres -c "pg_dump $d | gzip -c > $DIR/$d.$HOSTNAME.$DATE.out.gz"

Caso de uso - Colivre

A Colivre utiliza o Bacula para fazer o backup de cerca de 8 servidores espalhados pelo globo. A política adotada é de cópias Full todos os domingos e cópias diferenciais de segunda a sábado.

Num teste de restore realizado semanalmente, foram restaurados cerca de 8 GB em 2 min. isso porque os servidores estavam na mesma rede. Já o restore de um servidor remoto com o mesmo tamanho de arquivo levou cerca de 10 min.

Os arquivos (volumes) são gravados em 03 storages (partições) diferentes, com a reciclagem eles ocupam menos de 40% dos discos.

Alcançamos esse nível de gerenciamento de backup com muito estudo, paciência e análise. Levando cerca de 15 dias, periodo de 20/12 a 03/01, para deixar a rotina redonda, só é preciso monitorar diariamente os logs e de vez em quando fazer uma intervenção.

O Bacula tem se mostrado uma ferramenta madura, escalável, segura e confiável tranquilizando minhas poucas noites de sono.

Leituras Obrigatórias

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Alexandro Silva