Bouwen voor productie: Webapplicaties — Back-ups

Inleiding

Nadat u een herstelplan heeft opgesteld voor de verschillende componenten van uw toepassing, moet u een back-up systeem instellen dat nodig is om hem te ondersteunen. Dit handleiding zal zich focussen op het gebruik van Bacula als back-up oplossing. Het voordeel van het gebruik van een volledig ontwikkelde back-up systeem, zoals Bacula, is dat u volledig controle heeft over wat u back-upt en herstelt op het niveau van individuele bestanden, en u kunt back-ups en hersteltoepassingen plannen volgens wat het beste is voor u.

Oplossingen zoals DigitalOcean Droplet Backups (snapshot back-ups van uw gehele Droplet) zijn gemakkelijk te installeren en zouden misschien voldoende zijn voor uw behoeften, als u alleen maar weekelijk back-ups nodig heeft. Als u kiest voor DigitalOcean Backups, stel er zeker een warme back-up van uw database in door de Maak warme back-ups van uw database sectie te volgen.

In dit gedeelte van de handleiding zullen we Bacula instellen om dagelijkse back-ups van de vereiste back-ups van de servers die uw applicatieconfiguratie samenvatten (db1, app1, app2 en lb1), zoals eerder gedefinieerd in ons herstelplan, te onderhouden – in wezen een handleiding die u laat zien hoe u Bacula kunt gebruiken om back-ups van een LAMP-stack aan te maken. We zullen ook Percona XtraBackup gebruiken om hot back-ups van uw MySQL-database te maken. Tenslotte zullen we rsync gebruiken om een kopie van uw back-ups te maken op een server in een externe datacenter. Dit voegt twee servers toe aan uw setup: backups en remotebackups (gelegen in een afzonderlijk datacenter).

Laten we beginnen.

Installeer Bacula op de Backups Server

Stel Bacula in op uw backups server door deze handleiding te volgen: <diy11 Hoe To Install Bacula Server on Ubuntu 14.04.

Ga naar de sectie Organiseer configuratie van Bacula-director (server) in deze handleiding: Hoe uw Ubuntu 14.04-server backs up met Bacula. U hebt de directornaam nodig wanneer u de Bacula-clients (op de servers die u wilt back-up maken) installeert. Stop bij de Install en configureer Bacula-client sectie.

U moet acht zijn dat we alle back-up jobs gebruiken met de RemoteFile-pool. Met dat in mind, zou u mogelijk wat instellingen wijzigen voordat u doorgaat.

Bacula-client installieren op elke server

Installeer de Bacula-client op elke server waarop u back-ups wilt maken (db1, app1, app2, en lb1) door de Install and Configure Bacula Client sectie te volgen van deze handleiding: Hoe uw Ubuntu 14.04-server backs up met Bacula. Stop bij de Add Filesets (Server) sectie.

Je hebt de FileDaemon Naam nodig (meestal de hostnaam met “-fd” eraan toegevoegd) en de Director Wachtwoord (het wachtwoord dat de Bacula-server zal gebruiken om verbinding te maken met elke client) uit het bestand bacula-fd.conf op elke server.

Voeg Bacula Clients toe aan Backups Server

Op backups, de Bacula-server, voeg een Client bron toe aan het bestand /etc/bacula/conf.d/clients.conf voor elke server waar je de Bacula-client hebt geïnstalleerd.

Open het bestand clients.conf:

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

Hier is een voorbeeld van de Client brondefinitie voor de databaseserver, db1. Let op dat de waarde van Naam moet overeenkomen met de Naam van de FileDaemon bron en het Wachtwoord moet overeenkomen met het Wachtwoord van de Director bron, op de clientserver—deze waarden kunnen worden gevonden in /etc/bacula/bacula-fd.conf op elke Bacula-clientserver:

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
}

Maak een vergelijkbare Client bron voor elke van de overige Bacula-clientservers. In ons voorbeeld moeten er vier Client bronnen zijn wanneer we klaar zijn: db1-fd, app1-fd, app2-fd en lb1-fd. Dit configureert de Bacula Director, op de backups server, om in staat te zijn verbinding te maken met de Bacula-client op elke server…

Bewaar en sluit af.

Meer details over dit gedeelte vindt u in de Installeer en configureer Bacula Client in de Hoe te back-uppen van een Ubuntu Server met Bacula handleiding.

Maak hot back-ups van uw database

Om consistente (d.w.z. bruikbare) back-ups van onze actieve database te verkrijgen, moet ons speciale zorg besteden. Een eenvoudige en effectieve manier om hot back-ups te maken met MySQL is door Percona XtraBackup te gebruiken.

Installeer Percona XtraBackup

Installeer en configureer Percona XtraBackup op uw database server, db1, door deze handleiding te volgen: Hoe te maken van hot back-ups van MySQL databases met Percona XtraBackup op Ubuntu 14.04. Stop met het bereiken van de Uitvoeren van een volledige hot back-up sectie.

Maak XtraBackup Script

Percona XtraBackup is klaar om warme back-ups van je MySQL-database te maken, die uiteindelijk worden backed-up door Bacula (of DigitalOcean Backups), maar de warme back-ups moeten op de een of andere manier worden ingepland. We zullen de eenvoudigste oplossing instellen: een bash-script en een cron-taak.

Maak een bash-script genaamd run_extra_backup.sh aan in /usr/local/bin:

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

Voeg het volgende script toe. Zorg ervoor dat je de gebruiker en het wachtwoord vervangt door wat je hebt ingesteld toen je XtraBackup hebt geïnstalleerd:

/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 "{}" \;

# verwijder bestaande volledige back-up
rm -r /data/backups/full

# xtrabackup maak back-up
innobackupex --user=bkpuser  --password=bkppassword --no-timestamp /data/backups/full

# xtrabackup bereid back-up voor
innobackupex --apply-log /data/backups/full

Sla op en sluit af. Door dit script uit te voeren (met superuser-rechten) wordt de bestaande XtraBackup back-up verwijderd op /data/backups/full en wordt een nieuwe volledige back-up gemaakt. Meer details over het maken van back-ups met XtraBackup zijn te vinden in het gedeelte Voer Volledige Warme Back-up Uit van de XtraBackup-tutorial.

Maak het script uitvoerbaar:

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

Om onze database correct te back-upen moeten we eerst de XtraBackup-script uitvoeren voordat Bacula probeert de back-up van de database-server te maken. Een goede oplossing is om je Bacula back-up job te configureren om de script als een “pre-backup script” te gebruiken, maar we zullen hier voor klikken op een simpele manier gaan gebruiken met een cron job. Maak een cron-configuratiebestand aan (bestanden in /etc/cron.d worden toegevoegd aan root’s crontab):

Voeg de volgende cron-job toe:

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

Dit scheduleert het script om elke dag om 22:30 uur (22e uur, 30e minuut) als root te runnen. We hebben dit tijdstip gekozen omdat Bacula momenteel zijn back-up jobs dagelijks om 23:05 uur draait—we zullen hier later over het aanpassen van deze tijd spreken. Dit biedt 35 minuten aan de script om te compleet zijn.

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

Nu dat de database hot backups zijn ingesteld, lees je nu over de configuratie van Bacula FileSets.

Configureer Bacula FileSets

Bacula zal back-ups maken van bestanden die zijn gespecificeerd in de FileSets die zijn geassocieerd met de backup Jobs die worden uitgevoerd. Deze sectie gaat over het maken van FileSets die de verplichte back-ups bevatten die we in onze herstelplannen hebben identificeerd. Meer informatie over het toevoegen van FileSets aan Bacula kan je finden in de Bacula tutorial.

Op je back-ups server, open de filesets.conf file:

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

Database Server FileSet

De vereiste back-ups voor onze database server, volgens onze database server herstelplan, zijn:

  • MySQL database: een back-up opslaan door onze XtraBackup script in /data/backups/full, dagelijks om 10:30 uur
  • MySQL configuratie: gelegd in /etc/mysql

We ook de XtraBackup script: /usr/local/bin/run_xtrabackup.sh, en de bijbehorende cron file.

Met onze vereiste back-ups in mind, zullen we deze “MySQL Database” FileSet toevoegen aan onze Bacula configuratie:

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
  }
}

Nu lees je naar de applicatie server FileSet.

Applicatie-server bestandset

De benodigde back-ups voor onze applicatieservers, volgens onze herstelplan voor applicatieservers, zijn:

  • Applicatie-bestanden: in bijvoorbeeld /var/www/html in onze voorbeeld

Met de benodigde back-ups in gedachten, zal we deze “Apache DocumentRoot” FileSet aan onze Bacula configuratie toevoegen:

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

Je kunt ook het configuratiebestand van Apache poorten inclureren, maar dat is eenvoudig te vervangen.

Nu gaan we naar de FileSet van de load balancer server.

De benodigde back-ups voor onze load balancer servers, volgens onze herstelplan voor load balancer servers, includen:

  • SSL certificaat (PEM) en gerelateerde bestanden: in bijvoorbeeld /root/certs in onze voorbeeld
  • HAProxy configuratiebestand: in /etc/haproxy

Met onze benodigde back-ups in gedachten, zal we deze “Apache DocumentRoot” FileSet aan onze Bacula configuratie toevoegen:

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
  }
}

Sla je werk op en sluit je af.

Nu zijn onze Filesets geconfigureerd. Laten we nu verder gaan met de creatie van de Bacula backup jobs die deze servers gebruiken zullen.

Bacula Backup Jobs maken

We maken Bacula backup jobs die worden uitgevoerd en backups maken van onze servers.

Maak een jobs.conf-bestand in /etc/bacula/conf.d:

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

Backup job voor database server

Voor de backupserver database job maak je een nieuwe job genaamd “Backup_db1”. Het belangrijke ding hier is dat je de juiste Client (db1-fd) en FileSet (MySQL Database) specificeert:

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

Nu stellen we de backups voor de applicatieservers aan.

Backup jobs voor applicatieservers

Voor onze applicatieservers maak je twee backuptjobs genaamd “Backup_app1” en “Backup_app2”. Het belangrijke ding hier is dat je de juiste Clients (app1-fd en app2-fd) en FileSet (Apache DocumentRoot) specificeert.

Job voor app1:

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

App2 taak:

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

Nu zal het systeem een back-uptaak voor de load balancer server instellen.

Load Balancer Server Back-uptaak

Voor onze load balancer server back-uptaak zal een nieuwe taak worden aangemaakt met de naam “Backup lb1”. Het belangrijke onderdeel hierbij is het correct aanwijzen van de Client (lb1-fd) en het FileSet (SSL Certificaten en HAProxy Configuratie):

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

Bewaar en sluit af.

Nu zijn onze back-uptaken configured. Het laatste stukje is om de Bacula Director opnieuw te starten.

Herstart Bacula Director

Op de back-up server herstart u de Bacula Director om alle aanpassingen door te voeren:

  1. sudo service bacula-director restart

Nu wil je proberen de clientconnecties en de back-upjobs te testen, die zijn onderdeel van het tutorial over hoe een server back-up maken met Bacula. Dat tutorial beschrijft ook hoe uw Bacula back-ups herstelt. Herstellen van de MySQL-database zal u naar de tutorial over Perform Backup Restoration van de Percona XtraBackup gaan.

Bekijk back-upschema

De Bacula back-up schema kan worden aangepast door de configuratie van de Bacula Director te wijzigen (/etc/bacula/bacula-dir.conf). Alle back-up Jobs die we hebben gemaakt gebruiken de “DefaultJob” JobDef, welke gebruik maakt van de “WeeklyCycle” schema, wat definieerd is als:

  • Complete back-up op de eerste zondag van een maand om 11:05 uur
  • Differentiele back-ups op alle andere zondagen om 11:05 uur
  • Incrementele back-ups op andere dagen, van maandag tot zaterdag, om 11:05 uur

U kunt dit verifieren door de Bacula console te gebruiken om de status van de Directeur te controleren. Het zou allemaal uitgeven over alle geplande jobs:

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

Geef je vrij om de planning van een van je back-up taken toe te voegen of aan te passen. Het zou zinvol zijn om de planning van de applicatieservers aan te passen zodat deze同时 met de uitvoering van het Percona XtraBackup-script (22:30 uur) plaatsvindt. Dit voorkomt dat de back-ups van de applicatie en database niet consistent zijn met elkaar.

Instellen van Afstand Back-ups

Nu zijn we klaar om een externe server in te stellen die kopieën van onze Bacula back-ups zal opslaan. Deze externe server moet in een geografisch gescheiden regio zijn, zodat je een kopie van je cruciale back-ups hebt, zelfs als er een ramp optreedt in je productie 数据center. In ons voorbeeld zullen we de regio San Francisco (SFO1) van DigitalOcean gebruiken voor onze remotebackups server.

Wij zullen een eenvoudige methode uitleggen om onze back-ups van onze backups server naar onze remotebackups server te sturen met behulp van publieke SSH-sleutels, rsync en cron.

Op de remotebackups server, maak een gebruiker aan die zal worden gebruikt voor het rsync-login.

Naast het backups server genereer je als root een paar SSH-sleutels zonder wachtwoord. Installeer de publieke sleutel op de gebruiker remotebackups die je net hebt gemaakt. Dit wordt in onze tutorial over hoe je SSH-sleutels installeert beschreven.

Op de backups server schrijf je een commando rsync dat de Bacula-backupdata (/bacula/backup) naar een locatie op de remotebackups server copieert. Gebruik van rsync wordt in onze tutorial over hoe je rsync gebruikt uitgelegd. Het commando zal er waarschijnlijk iets gelijken aan dit kunnen zijn:

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

Voeg het commando toe aan een script, bijvoorbeeld /usr/local/bin/rsync_backups.sh en maak het executabel.

Uiteindelijk wil je een cronjob instellen die de rsync_backups.sh script als root uitvoert, na de Bacula-backupjobs meestal tegen het einde van de dag. Dit wordt in onze tutorial over hoe je routine taaks met cron scheduleren uitgelegd.

Na alle stappen te hebben voltooid, verifieer de volgende dag of er een kopie van je backups op de remotebackups server is.

Andere overwegingen

We hebben niet over de schijfruimte-eisen voor uw back-ups gesproken. U zal zeker een keuze moeten maken over hoeveel ruimte uw back-ups gebruikt, en u moet uw setup en back-up schema aanpassen op basis van uw behoeften en bronnen.

Naast het maken van back-ups van uw applicatie-servers wilt u waarschijnlijk ook back-ups instellen voor andere servers die u toegevoegd hebt aan uw setup. Bijvoorbeeld moet u Bacula configureren om back-ups te maken van uw monitoren en centrale logboek-servers nadat u ze opstarten.

Conclusie

U hebt nu dagelijke back-ups en een remote copy van deze back-ups van uw productie-applicatie-servers. Verifieer dat u de bestanden kunt herstellen en voeg de stappen van herstelling toe aan uw herstelplannen.

Ga naar de volgende tutorial om met de monitoringsinstellingen voor uw productie-server-setup te beginnen: Bouwen voor Productie: Web-applicaties — Monitor.

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