Construindo para Produção: Aplicações Web – Backups

Introdução

Após criar um plano de recuperação para os vários componentes de sua aplicação, você deve configurar o sistema de cópia de segurança necessário para o suportar. Este tutorial irá concentrar-se no uso de Bacula como solução de backup. As vantagens de usar um sistema de backup completo, como o Bacula, é que dá você total controle sobre o que você faz backup e recuperação em nível de arquivo individual, e você pode agendar backups e recuperações de acordo com o que é melhor para você.

Soluções como DigitalOcean Droplet Backups (cópias de snapshot de todo o Droplet) são fáceis de configurar e podem ser suficientes para suas necessidades, se você precisar apenas de backups semanais. Se optar por backups do DigitalOcean, certifique-se de configurar backups hot de sua base de dados, seguindo a seção Criar Backups Hot de sua Base de Dados.

Neste trecho do tutorial, vamos configurar o Bacula para manter backups diários dos backups necessários dos servidores que compõem a configuração de sua aplicação (db1, app1, app2 e lb1), definidos anteriormente em nosso plano de recuperação — essencialmente, este é um tutorial que mostra como usar o Bacula para criar backups de um stack LAMP. Também usaremos o Percona XtraBackup para criar backups hot do seu banco de dados MySQL. Por fim, usaremos o rsync para criar uma cópia dos seus backups the um servidor em um data center remoto. Isso adicionará dois servidores à sua configuração: backups e remotebackups (localizados em um data center separado).

Vamos começar.

Instalar Bacula no Servidor de Backups

Configure o Bacula em seu servidor de backups seguindo este tutorial: Como Instalar o Servidor Bacula no Ubuntu 14.04.

Então siga o seção de configuração do diretório do Bacula (servidor) deste tutorial: Como fazer cópias de segurança de um servidor Ubuntu 14.04 com Bacula. Você precisará do nome do diretório quando estiver configurando os clientes do Bacula (nas máquinas que você deseja fazer cópias). Para parar quando chegar à seção Instalar e Configurar o Cliente do Bacula. Note que vamos usar a pool de arquivos remotos para todos os trabalhos de backup que estaremos definindo. Com isso dito, você pode querer alterar algumas configurações antes de prosseguir.

Instale o Cliente do Bacula em Cada Servidor

Instale o cliente do Bacula em cada servidor que você deseja fazer cópias (db1, app1, app2, e lb1) seguindo a seção Instalar e Configurar o Cliente do Bacula deste tutorial: Como fazer cópias de segurança de um servidor Ubuntu 14.04 com Bacula. Para parar quando chegar à seção Adicionar conjuntos de arquivos (servidor).

Nota que você precisará do Nome do Demonstrado de Arquivos (normalmente o hostname acrescentado por “-fd”) e da Senha do Diretório (a senha que o servidor Bacula usará para conectar a cada cliente) do arquivo bacula-fd.conf em cada servidor.

Adicionar Clientes do Bacula às Backups Servidor

Na backups, o servidor Bacula, adicione uma Resouro de Cliente ao arquivo /etc/bacula/conf.d/clients.conf para cada servidor que você instalou o cliente do Bacula.

Abra o arquivo clients.conf:

  1. sudo vi /etc/bacula/conf.d/clients.conf

Aqui é um exemplo de definição de resouro de Cliente para o servidor banco de dados, db1. Observe que o valor de Name deve coincidir com o Nome do Resumo de Arquivos e a Senha deve coincidir com a Senha do Diretório no servidor de cliente—esses valores poderem ser encontrados no arquivo /etc/bacula/bacula-fd.conf em cada servidor de cliente do Bacula:

clients.conf — Example Client resource definition
Client {
  Name = db1-fd
  Address = db1.nyc3.example.com
  FDPort = 9102
  Catalog = MyCatalog
  Password = "PDL47XPnjI0QzRpZVJKCDJ_xqlMOp4k46"          # password for Remote FileDaemon
  File Retention = 30 days            # 30 days
  Job Retention = 6 months            # six months
  AutoPrune = yes                     # Prune expired Jobs/Files
}

Crie uma definição semelhante de Cliente para cada dos outros servidores restantes do Bacula cliente. Na nossa amostra, houverão quatro recursos de Cliente quando terminarmos: db1-fd, app1-fd, app2-fd, e lb1-fd. Essa configuração configura o diretório do Bacula, no servidor backups, para poder conectar a cada servidor cliente do Bacula…

Salvar e sair.

Mais detalhes sobre esta seção pode ser encontrado no Guia de Instalação e Configuração do Cliente Bacula na Aula Como Fazer Cópias de Segurança de um Servidor Ubuntu com o Bacula.

Criar Cópias Hot das Bases de Dados

Para garantir que as cópias de segurança ativas da nossa base de dados sejam consistentes (i.e. utilizáveis), é necessário tomar precauções específicas. Uma maneira simples e eficaz de fazer hot backups com o MySQL é usando o Percona XtraBackup.

Instale o Percona XtraBackup

Na sua máquina servidora de banco de dados, db1, instale e configure o Percona XtraBackup seguindo este tutorial: Como Criar Cópias Hot de Bases de Dados do MySQL com o Percona XtraBackup no Ubuntu 14.04. Para parar quando chegar ao Seção Perform Full Hot Backup.

Criar Script de XtraBackup

O Percona XtraBackup está pronto para criar backups hot de sua base de dados MySQL, que serão eventualmente backupidos pelo Bacula (ou DigitalOcean Backups), mas os backups hot devem ser agendados de alguma forma. Vamos configurar a solução mais simples: um script bash e um job cron.

Crie um script bash chamado run_extra_backup.sh em /usr/local/bin:

  1. sudo vi /usr/local/bin/run_xtrabackup.sh

Adicione o seguinte script. Certifique-se de substituir o usuário e senha pelaque você configurou quando instalou o XtraBackup:

/usr/local/bin/run_xtrabackup.sh
#!/bin/bash

# pré xtrabackup
chown -R mysql: /var/lib/mysql
find /var/lib/mysql -type d -exec chmod 770 "{}" \;

# exclui backups completos existentes
rm -r /data/backups/full

# xtrabackup cria backup
innobackupex --user=bkpuser  --password=bkppassword --no-timestamp /data/backups/full

# xtrabackup prepare backup
innobackupex --apply-log /data/backups/full

Salve e saia. Executar este script (com privilégios de superusuário) excluirá o backup XtraBackup existente em /data/backups/full e criará um novo backup completo. Mais detalhes sobre a criação de backups com XtraBackup podem ser encontrados na seção Realizar Backup Quente Completo do tutorial do XtraBackup.

Torne o script executável:

  1. sudo chmod +x /usr/local/bin/run_xtrabackup.sh

Para fazer uma cópia de segurança adequada do banco de dados, precisamos executar o script XtraBackup antes que o Bacula tente fazer a cópia de segurança do servidor de banco de dados. Uma boa solução é configurar seu trabalho de backup do Bacula para rodar o script como um “script pré-backup”, mas nós optaremos por usar um cron job para manter o processo simples.

Crie um arquivo de configuração de cron (os arquivos na /etc/cron.d são adicionados ao crontab do root):

  1. sudo vi /etc/cron.d/xtrabackup

Adicione o seguinte trabalho cron:

/etc/cron.d/xtrabackup
30 22    * * *   root    /usr/local/bin/run_xtrabackup.sh

Este agendou o script para ser executado como root todos os dias às 22h e 30min (22 horas, 30 minutos). Escolhemos esta hora pois o Bacula está atualmente programado para executar suas jobs de backup diariamente às 23h05m – haverá 35 minutos para o script XtraBackup completar. Isso permite que o script seja executado com sucesso.

Agora que as cópias hot do banco de dados estão configuradas, vamos ver as FileSets do Bacula.

Configure Bacula FileSets

O Bacula irá criar cópias de arquivos especificados em conjuntos de arquivos associados com o trabalho de backup que serão executados. Essa seção abordará a criação de conjuntos de arquivos que incluam as cópias necessárias de backup que identifiquemos em nossos planos de recuperação. Mais detalhes sobre adicionar conjuntos de arquivos ao Bacula pode ser encontrado na seção Adicionar Conjuntos de Arquivos (Servidor) do tutorial do Bacula.

Na sua máquina de backups, abra o arquivo filesets.conf.

  1. sudo vi /etc/bacula/conf.d/filesets.conf

Conjunto de arquivos do servidor de bancos de dados

Os backups requeridos para nosso servidor de banco de dados, conforme o plano de recuperação do servidor de banco de dados, incluem:

  • Banco de dados MySQL: uma cópia de backup é criada por nossa script XtraBackup às 22h30 diariamente
  • Configuração do MySQL: localizada em /etc/mysql

Também incluiremos o script do XtraBackup: /usr/local/bin/run_xtrabackup.sh, e o arquivo de cron correspondente.

Com os backups necessários em mente, vamos adicionar este “Conjunto de arquivos do Banco de Dados” à configuração do Bacula:

filesets.conf — MySQL Database
FileSet {
  Name = "MySQL Database"
  Include {
    Options {
      signature = MD5
      compression = GZIP
    }
    File = /data/backups
    File = /etc/mysql/my.cnf
    File = /usr/local/bin/run_xtrabackup.sh
    File = /etc/cron.d/xtrabackup
  }
  Exclude {
    File = /data/backups/exclude
  }
}

Agora vamos passar para o conjunto de arquivos do servidor de aplicações.

Conjunto de Arquivos do Servidor de Aplicação

As cópias de backup necessárias para nossos servidores de aplicação, de acordo com o nosso plano de recuperação de servidores de aplicação, incluem:

  • Arquivos de Aplicação: localizados em /var/www/html no nosso exemplo

Com as nossas cópias de backup necessárias em mente, adicionaremos este “DocumentRoot do Apache” FileSet à nossa configuração Bacula:

filesets.conf — Apache DocumentRoot
FileSet {
  Name = "Apache DocumentRoot"
  Include {
    Options {
      signature = MD5
      compression = GZIP
    }
    File = /var/www/html
  }
  Exclude {
    File = /var/www/html/exclude
  }
}

Você pode também incluir o arquivo de configuração das portas do Apache, mas isso é facilmente substituível.

Agora vamos passar para o FileSet do servidor de balanceador de carga.

Conjunto de Arquivos do Servidor de Balanceador de Carga

As cópias de backup necessárias para nossos servidores de balanceador de carga, de acordo com o nosso plano de recuperação de servidores de balanceador de carga, incluem:

  • Certificado SSL (PEM) e arquivos relacionados: localizados em /root/certs no nosso exemplo
  • Arquivo de configuração do HAProxy: localizado em /etc/haproxy

Com as nossas cópias de backup necessárias em mente, adicionaremos este “DocumentRoot do Apache” FileSet à nossa configuração Bacula:

filesets.conf — SSL Certs and HAProxy Config
FileSet {
  Name = "SSL Certs and HAProxy Config"
  Include {
    Options {
      signature = MD5
      compression = GZIP
    }
    File = /root/certs
    File = /etc/haproxy
  }
  Exclude {
    File = /root/exclude
  }
}

Salve e saia.

Agora as nossas Configurações de FileSet estão configuradas. Vamos prosseguir para a criação dos Jobs de Backup do Bacula que usarão esses FileSets.

Criando Jobs de Backup do Bacula

Vamos criar Jobs de Backup do Bacula que irão executar e criar backups das nossas máquinas servidoras.

Crie um arquivo jobs.conf no diretório /etc/bacula/conf.d:

  1. sudo vi /etc/bacula/conf.d/jobs.conf

Backup do Servidor de Banco de Dados

Para o trabalho de backup do servidor de banco de dados, criaremos um novo job chamado “Backup_db1”. O aspecto importante aqui é especificar corretamente o Cliente (db1-fd) e FileSet (Base de Dados do MySQL):

jobs.conf — Backup db1
Job {
  Name = "Backup db1"
  JobDefs = "DefaultJob"
  Client = db1-fd
  Pool = RemoteFile
  FileSet="MySQL Database"
}

Agora vamos configurar os jobs de backup para os servidores de aplicação.

Jobs de Backup do Servidor de Aplicação

Para nossos servidores de aplicação, criaremos duas tarefas de backup chamadas “Backup app1” e “Backup app2”. O aspecto importante aqui é especificar corretamente os Clientes (app1-fd e app2-fd) e FileSet (Diretório Raiz do Apache).

Job do App1:

jobs.conf — Backup app1
Job {
  Name = "Backup app1"
  JobDefs = "DefaultJob"
  Client = app1-fd
  Pool = RemoteFile
  FileSet="Apache DocumentRoot"
}

Tarefa2 do App2:

jobs.conf — Backup app2
Job {
  Name = "Backup app2"
  JobDefs = "DefaultJob"
  Client = app2-fd
  Pool = RemoteFile
  FileSet="Apache DocumentRoot"
}

Agora vamos configurar a tarefa de cópia de segurança do servidor de balanceador de carga.

Tarefa de Cópia de Segurança do Servidor de Balanceador de Carga

Para nossa tarefa de cópia de segurança do servidor de balanceador de carga, criaremos uma nova tarefa chamada “Cópia de Segurança lb1”. O importante aqui é que especifiquemos o Cliente (lb1-fd) e o Conjunto de Arquivos (Certificados SSL e Configuração de HAProxy) corretos:

jobs.conf — Backup lb1
Job {
  Name = "Backup lb1"
  JobDefs = "DefaultJob"
  Client = lb1-fd
  Pool = RemoteFile
  FileSet="SSL Certs and HAProxy Config"
}

Salvar e sair.

Agora nossas tarefas de cópia de segurança estão configuradas. O passo final é reiniciar o diretor Bacula.

Reiniciar Diretor Bacula

No servidor de backups, reinicie o diretor Bacula para aplicar todas as nossas mudanças:

  1. sudo service bacula-director restart

Neste momento, você desejará testar as conexões de clientes e trabalhos de backup, ambos dos quais são cobertos no tutorial Como Fazer Cópia de Segurança de um Servidor com Bacula. Este tutorial também cover como restaurar cópias de segurança do Bacula. Nota que a restauração do banco de dados MySQL requerirá seguir o passo A Restore Database do tutorial do Percona XtraBackup.

Agenda de Backups

A agenda de cópias do Bacula pode ser ajustada modificando a configuração do Director do Bacula (/etc/bacula/bacula-dir.conf). Todos os Jobs de backup que criamos usam o “DefaultJob”, que usa a rotina “WeeklyCycle”, definida como:

  • Full backup on the first Sunday of a month at 11:05 pm
  • Differential backups on all other Sundays at 11:05 pm
  • Incremental backups on other days, Monday through Saturday, at 11:05 pm

Você pode verificar isso usando o console do Bacula para verificar o estado dos Jobs. Ele deve exibir todos os trabalhos agendados:

Director Status — Scheduled Jobs
Scheduled Jobs: Level Type Pri Scheduled Name Volume =================================================================================== Incremental Backup 10 20-May-15 23:05 BackupLocalFiles MyVolume Incremental Backup 10 20-May-15 23:05 Backup lb1 Remote-0002 Incremental Backup 10 20-May-15 23:05 Backup app2 Remote-0002 Incremental Backup 10 20-May-15 23:05 Backup app1 Remote-0002 Incremental Backup 10 20-May-15 23:05 Backup db1 Remote-0002

Ajuste a agenda de qualquer um dos trabalhos de cópia de segurança que possuído. Seria sensato modificar a agenda do servidor da aplicação para ocorrer ao mesmo tempo em que o script do Percona XtraBackup é executado (10:30 pm). Isso evitará as cópias de segurança da aplicação e do banco de dados não estarem inconsistentes com o outro.

Configure Remote Backups

Agora estamos prontos para configurar um servidor remoto que irá armazenar copias das nossas cópias de segurança do Bacula. Este servidor remoto deve estar em uma região geográficamente separada da sua área de produção para que você tenha uma cópia das suas cópias críticas de segurança mesmo se houver um desastre no centro de dados de sua produção. Na nossa ilustração, vamos usar a região de São Francisco (SFO1) do DigitalOcean para nosso servidor remotobackups.

Vamos explicar uma método simples para enviar nossas cópias de segurança do nosso servidor de backups para o nosso servidor remotobackups usando chaves públicas SSH, rsync e cron.

No servidor remotobackups, crie um usuário que será usado para a conexão de login do rsync.

Avançando, no servidor de backups, crie um par de chaves SSH sem senha como root. Instale a chave pública no usuário remotebackups que você acabou de criar. Isso é coberto em nosso tutorial Como Configurar Chaves SSH.

No servidor de backups, crie um comando rsync que copie os dados de backup Bacula (/bacula/backup) para um local no servidor remotebackups. A utilização de rsync é coberta em nosso tutorial Como Usar Rsync. O comando provavelmente terá algo como este aspecto:

  1. rsync -az /bacula/backup remoteuser@remotebackups_public_hostname_or_IP:/path/to/remote/backup

Adicione o comando the um script, como /usr/local/bin/rsync_backups.sh e faça-o executável.

Por fim, você queira configurar uma tarefa cron que execute o script rsync_backups.sh como root, depois que as tarefas de backup Bacula normalmente são concluídas. Isso é coberto em nosso tutorial Como Agendar Tarefas Rotineiras Com Cron.

Após configurar tudo isso, verifique se há uma cópia de seus backups no servidor remotebackups no dia seguinte.

Outros Considerações

Não discutimos as exigências de disco para as cópias de segurança. Você deve revisar o espaço em disco que suas cópias estão usando e revistir sua configuração e horário de cópia de segurança baseado em suas necessidades e recursos.

Além de criar cópias de segurança dos servidores da aplicação, você provavelmente quer configurar o Bacula para criar cópias de segurança de outros servidores adicionados à sua configuração. Por exemplo, você deve configurar Bacula para fazer cópias de segurança dos servidores de monitoramento e log centralizados após os quais você os estabeleceu.

Conclusão

Você agora tem cópias diarias e uma cópia remota dessas cópias de seu servidor de aplicações de produção. Certifique-se de que é capaz de restaurar os arquivos e adicione as etapas de restauração de dados ao seu plano de recuperação.

Avançe para o próximo tutorial para começar a configurar o monitoramento para a configuração do servidor de produção: Construindo para Produção: Aplicações Web — Monitoramento.

Source:
https://www.digitalocean.com/community/tutorials/building-for-production-web-applications-backups