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

Introdução

Após conceber um plano de recuperação para os vários componentes da sua aplicação, você deve configurar o sistema de backup 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 ele dá você controle total sobre o que você faz backup e restauração a nível de arquivo individual, e você pode agendar backups e restores de acordo com o que é melhor para você.

Soluções como o Backups de Droplet DigitalOcean (backups de instantâneo de todo o Droplet) são fáceis de configurar e podem ser suficientes para suas necessidades, se você só precisar de backups semanais. Se você optar pelos Backups do DigitalOcean, certifique-se de configurar backups quentes de sua base de dados, seguindo a seção Criar Backups Quentes da Sua Base de Dados.

Nesta parte do tutorial, configuraremos um Bacula para manter cópias de segurança diárias dos backups necessários dos servidores que compõem a configuração da sua aplicação (db1, app1, app2 e lb1), definidos previamente no nosso plano de recuperação — essencialmente, este é um tutorial que mostra como usar o Bacula para criar backups de uma pilha LAMP. Também usaremos o Percona XtraBackup para criar backups quentes do seu banco de dados MySQL. Por último, usaremos o rsync para criar uma cópia dos seus backups, em um servidor de 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 no seu servidor 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 Demonstrador de Arquivos (normalmente o hostname acrescentado por “-fd”) e da Senha do Diretório (a senha que o servidor Bacula usará para conectar à cada cliente) do arquivo bacula-fd.conf.

Adicionar Clientes do Bacula ao Servidor de Backups

Na backups, o servidor Bacula, adicione uma Resourça de Cliente ao arquivo /etc/bacula/conf.d/clients.conf para cada servidor em 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 recurso de Cliente para o servidor de banco de dados, db1. Observe que o valor de Name deve coincidir com o Nome do FileDaemon e o Password deve coincidir com a Senha do Diretório no servidor de cliente; esses valores podem 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 conectar à cada servidor cliente do Bacula…

Salve e saia.

Mais detalhes sobre esta seção podem ser encontrados em Instalar e Configurar o Cliente Bacula na seção Como Fazer Backup de um Servidor Ubuntu com Bacula.

Criar Backups Quentes do Seu Banco de Dados

Para garantir que produzimos backups consistentes (ou seja, utilizáveis) do nosso banco de dados ativo, deve ser tomada especial atenção. Uma maneira simples e eficaz de criar backups quentes com MySQL é usar o Percona XtraBackup.

Instalar o Percona XtraBackup

No seu servidor de banco de dados, db1, instale e configure o Percona XtraBackup seguindo este tutorial: Como Criar Backups Quentes de Bancos de Dados MySQL com Percona XtraBackup no Ubuntu 14.04. Pare quando chegar à seção Realizar Backup Quente Completo.

Criar Script de XtraBackup

O Percona XtraBackup está pronto para criar backups hot do seu banco de dados MySQL, que eventualmente serão backupado por 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 pelo que você configurou quando instalou o XtraBackup:

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

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

# excluir backup full existente
rm -r /data/backups/full

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

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

Salve e saia. Executar este script (com privilégios de superusuário) excluirá o backup existente de XtraBackup em /data/backups/full e criará um novo backup full. Mais detalhes sobre a criação de backups com XtraBackup podem ser encontrados na seção Realizar Backup Hot 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 tentar fazer a cópia de segurança do servidor de banco de dados. Uma boa solução é configurar sua tarefa de cópia de segurança do Bacula para rodar o script como um ” pré-script de cópia” mas optaremos por usar um cron job para manter o processo simples.

Crie um arquivo de configuração de cron (os arquivos em /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 30m (22ª hora, 30ª minuto). Escolhemos esta hora porque o Bacula está atualmente programado para executar suas tarefas de cópia diariamente às 23h:05m – permitirá 35 minutos para o script XtraBackup completar. Essa hora permite que o script de cópia hot do banco de dados seja feita com sucesso.

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

Configure Bacula FileSets

O Bacula irá criar cópias de arquivos especificados nas FileSets associadas com os Jobs de backup que serão executados. Essa seção abordará a criação de FileSets que incluam as cópias requeridas que identifiquemos em nossos planos de recuperação. Mais detalhes sobre adicionar FileSets ao Bacula pode ser encontrado na seção Adicionar FileSets (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

FileSet do Servidor de Aplicações

As cópias necessárias para nosso servidor de banco de dados, segundo 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 22:30 horas diariamente
  • Configuração do MySQL: localizada em /etc/mysql

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

Com as cópias requeridas em mente, vamos adicionar esta “MySQL Database” FileSet à 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 FileSet do servidor de aplicação.

Conjunto de Arquivos do Servidor de Aplicações

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

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

Com as nossas cópias de backup necessárias em mente, vamos adicionar este conjunto de arquivos “DocumentRoot do Apache” à nossa configuração de 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 conjunto de arquivos 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 nossas cópias de backup necessárias em mente, vamos adicionar este conjunto de arquivos “DocumentRoot do Apache” à nossa configuração de 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
  }
}

Salvar e sair.

Agora as nossas Configurações de FileSets estão configuradas. Vamos prosseguir para criar os trabalhos de backup do Bacula que utilizarão esses FileSets.

Crie Trabalhos de Backup do Bacula

Vamos criar trabalhos de backup do Bacula que irão executar e criar backups dos servidores.

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, criei um novo trabalho 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 trabalhos de backup para os servidores de aplicação.

Backup dos Servidores de Aplicação

Para os 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).

Trabalho do App1:

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

App2 job:

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

Agora configuraremos o trabalho de backup do servidor de balanceamento de carga.

Trabalho de Backup do Servidor de Balanceamento de Carga

Para nosso trabalho de backup do servidor de balanceamento de carga, criaremos um novo trabalho chamado “Backup lb1”. O importante aqui é que especificamos o Cliente correto (lb1-fd) e o Conjunto de Arquivos (Certificados SSL e Configuração do HAProxy):

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

Salve e saia.

Agora nossos Trabalhos de Backup estão configurados. A última etapa é 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 Backup de um Servidor com Bacula. Este tutorial também cover como restaurar backups do Bacula. Observe que a restauração do banco de dados MySQL requerirá seguir o Passo A Passo para Restauração de Backups. O tutorial sobre o Percona XtraBackup também cobre como fazer restores de backups.

Agrupamento de Backups

O agendamento de backups do Bacula pode ser ajustado modificando a configuração do diretório do Bacula (/etc/bacula/bacula-dir.conf). Todos os Jobs de backup que criamos usam o “DefaultJob”, que usa o “WeeklyCycle” definido 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 at 11:05 pm

Você pode verificar isso usando o console do Bacula para checar o estado do Director. Ele deve exibir todos os Jobs 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

Livre para adicionar ou alterar o horário de qualquer dos trabalhos de cópia de segurança. Seria sensato modificar o horário do servidor da aplicação para ocorrer ao mesmo tempo 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 ser consistentes com o outro.

Configure Backups Remotos

Agora estamos prontos para configurar um servidor remoto que 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ê possa ter uma cópia das suas cópias críticas de backup mesmo se houver um desastre no centro de dados de sua produção. Na nossa exemplo, vamos usar a região de São Francisco (SFO1) do DigitalOcean para nosso servidor de backups remotos.

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

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

Próximo, no servidor backups, gere 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 backups, escreva um comando rsync que copie os dados de backup Bacula (/bacula/backup) para algum lugar no servidor remotebackups. O uso do rsync é coberto em nosso Como Usar Rsync tutorial. O comando provavelmente será algo assim:

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

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

Por último, você vai querer configurar uma tarefa cron que execute o script rsync_backups.sh como root, após a conclusão das tarefas de backup Bacula. Isso é coberto em nosso Como Agendar Tarefas Rotineiras Com Cron tutorial

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

Outras Considerações

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

Além de criar cópias de segurança dos servidores da aplicação, você provavelmente desejará configurar o Bacula para criar cópias de segurança para outros servidores adicionados à sua configuração. Por exemplo, você deve configurar Bacula para criar cópias de segurança dos servidores de monitoramento e logística centralizada depois que eles sejam estabelecidos.

Conclusão

Você agora deve ter cópias diarias e uma cópia remota dessas cópias de segurança do 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.

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

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