Weblog

door Remy onder OpenStack | 0 comments

Automatische backup snapshots op OpenStack

Dit artikel laat zien hoe automatisch backup snapshots gemaakt kunnen worden van instances op ons OpenStack platform. Deze snapshots zijn volledige backups van de virtuele machine en kunnen gebruikt worden om een instance te clonen of terug te zetten. Verder laten we zien hoe er voor een systeemupdate met apt-get een automatische snapshot gemaakt kan worden. Hiermee kan een update zeer snel teruggerold worden. De snapshots hebben de mogelijkheid tot retentie zodat er ook niet enorm veel wildgroei aan snapshots ontstaat.

Dit artikel is technischer dan de meeste van onze blogartikelen.

We gebruiken een script op de instance om via cron een snapshot te maken. In dit voorbeeld gebruiken we het volgende schema:

  • Dagelijks snapshot, `backup_type` ingesteld op `daily`, `rotation` ingesteld op `7`.
  • Wekelijks snapshot, `backup_type` ingesteld op `weekly`, `rotation` ingesteld op  `4`.
  • Maandelijks snapshot, `backup_type` ingesteld op `montly`, `rotation` ingesteld op  `12`.
  • Jaarlijks snapshot,  `backup_type` ingesteld op `yearly`, `rotation` ingesteld op  `2`.

Dit is natuurlijk aan te passen als 7 snapshots ( 1 week ) voor u voldoende zijn.


Het onderdeel van OpenStack dat de daadwerkelijke instances regelt, Nova / Compute, heeft een functie om een image te maken van een instance. Dit is een complete snapshot van de instance op het moment van maken. Onderhuids wordt er een 'qemu snapshot' gemaakt. De tweede functie is hierop gebaseerd, dit is 'nova backup'. Hiermee wordt een image gemaakt die het type 'backup' krijgt. Er kan retentie meegegeven worden, als er meer images dan de opgegeven retentie bestaan dan wordt het oudste image overschreven.

Het terugzetten van een snapshot is een kwestie van het aanmaken van een nieuwe instance op basis van dat image en het overzetten van het floating IP. Als u geen floating IP gebruikt, moet u middels de command line de huidige instance opnieuw installeren.

Snapshots zijn een snelle manier om een backup te maken van een instance. Het is echter wel zeer aan te raden om naast snapshots alsnog backups te maken. Met normale backups kunt u ook één, een paar bestanden of mappen terugzetten, of een specifieke database. Met snapshots is het alles of niets; de hele instance wordt altijd teruggezet. Met backups kunt u ook meer retentie inbouwen, en zaken als incremental en differential backup gebruiken om ruimte te besparen.


Nova Backup


Via 'Nova Backup' worden de snapshots gemaakt. Dit zijn normale images, met als speciaal type backup. Bij het maken ervan moet, naast een naam, ook een type en retentie opgegeven worden. Op basis van het type wordt de retentie uitgevoerd. Een voorbeeld:

Er wordt een snapshot gemaakt met als type 'daily' en als retentie '7'. Als er nu 7 snapshots zijn van type 'daily' en er wordt een 8ste verzoek ingediend, dan wordt van de snapshots met type 'daily' de oudste verwijderd.

Hierdoor kunnen er voor verschillende snapshot soorten verschillende retenties gebruikt worden.

In OpenStack zelf is geen sprake van scheduling van deze snapshots. We moeten dit dus zelf installeren en regelen met bijvoorbeeld cron. Het enige dat OpenStack regelt, is de retentie.

Installatie


We gebruiken een simpel script om de snapshots te maken. Dit roept Nova Backup aan, maar met de juiste gegevens. In dit artikel gebruiken we als voorbeeld de instance zelf, maar het staat u natuurlijk vrij om het script aan te passen zodat deze meerdere instances meeneemt.

U dient via ssh te verbinden met de instance. U kunt hiervoor een client als putty of de terminal voor gebruiken.

We installeren eerst de benodigde afhankelijkheden:

   # Ubuntu
    apt-get install dmidecode wget python-pip
    # CentOS
    yum install dmidecode wget python-pip


Recente versies van Ubuntu hebben de OpenStack tooling als pakket beschikbaar:

    apt-get install python-keystoneclient python-glanceclient python-novaclient


 Op oudere versies, Debian of CentOS moet 'pip' gebruikt worden, de Python package manager:

     pip install python-keystoneclient python-glanceclient python-novaclient


Tenslotte heeft u een bestand nodig waar de inloggegevens in staan. We raden aan om via onze interface een losse gebruiker aan te maken. De inloggegevens kunt u verder terugvinden in de oplevermail evenals het UUID. Het UUID is in Skyline ook onder het 'tandwielmenu: authorization info' te vinden.

Maak het bestand aan:

   nano /root/.openstack_snapshotrc


Plaats de volgende gegevens, waarbij u de termen vervangt door uw projectgegevens:

    export OS_AUTH_URL="https://identity.stack.cloudvps.com/v2.0"
    export OS_TENANT_NAME="PROJECT_UUID"
    export OS_TENANT_ID="PROJECT_UUID"
    export OS_USERNAME="USERNAME"
    export OS_PASSWORD="PASSWORD"


Om te testen of dit correct is, gebruikt u de volgende commando's:

    source /root/.openstack_snapshotrc
    nova credentials


Een voorbeeld van werkende configuratie:

    +------------------+-------------------------+
    | User Credentials | Value                   |
    +------------------+-------------------------+
    | id               | f3[...]11               |
    | name             | image-test-1            |
    | roles             |
    | roles_links      | []                      |
    | username         | image-test-1            |
    +------------------+-------------------------+


Het script zelf installeren we op het systeem:

    wget -O "/usr/local/bin/create-snapshot.sh" "https://raw.githubusercontent.com/RaymiiOrg/openstack-nova-snapshot/master/create_snapshot.sh"
    chmod +x /usr/local/bin/create-snapshot.sh


Het script is erg simpel en heeft twee parameters, namelijk backup_type en rotation. Deze zijn beide niet verplicht, als standaard is het type 'manual' en de rotation '7' ingesteld.

U kunt nu een testsnapshot maken:

    /usr/local/bin/create-snapshot.sh


U ziet, als het goed gaat, het volgende terug:

    INFO: Start OpenStack snapshot creation.
    SUCCESS: Backup image created and pending upload.


De status van de server wijzigt ook in Skyline:



Tijdens het maken van een image of snapshot kunt u geen nieuw snapshot maken of andere beheeracties uitvoeren zoals het herstarten van de server via OpenStack. Wel via de commandline indien nodig (reboot).

Het image zal ook gaan uploaden in Skyline:


Backup snapshots


Nu het script en de afhankelijkheden geïnstalleerd zijn, kunnen we de automatische snapshots instellen. Dit doen we via cron. Open het volgende bestand in een teksteditor:

    nano '/etc/cron.d/snapshots'


Plak het volgende:

    # Daily snapshot
    1 1 * * * root /bin/bash /usr/local/bin/create-snapshot.sh daily 7
    # Weekly snapshot
    1 1 * * 0 root /bin/bash /usr/local/bin/create-snapshot.sh weekly 4
    # Montlhy snapshot
    1 1 1 * * root /bin/bash /usr/local/bin/create-snapshot.sh monthly 12
    # Yearly snapshots
    1 1 1 1 * root /bin/bash /usr/local/bin/create-snapshot.sh yearly 2


U kunt zelf bepalen welke snapshots er gemaakt worden door de betreffende regels weg te laten.

Middels cron kunt u ook nog andere schema's instellen. Stel dat het om een belangrijke server gaat waar de gehele dag op gewerkt wordt. Het verlies van 8 uur werk kan dan een enorm probleem zijn. Met onderstaande cron wordt er tussen 6 en 18 uur elke 2 uur een snapshot gemaakt, waarvan er 12 bewaard worden. Als er iets misgaat, is er dus maximaal 2 uur werk verloren:

    # Snapshot past every 2nd hour from 6 through 18
    1 6-18/2 * * * root /bin/bash /usr/local/bin/create-snapshot.sh officehours 12


U kunt bovenstaande regel in hetzelfde bestand plakken.


Snapshot bij systeemupdates met apt


De pakketbeheerder 'apt' in Ubuntu en Debian ondersteunt zogenaamde 'hooks'. Dit zijn scripts die uitgevoerd worden voordat 'apt' onderliggend 'dpkg' aanroept. Globaal gezegd voor de installatie of verwijdering van een pakket en voor een upgrade.

Om de hook in te stellen, opent u het volgende bestand in een teksteditor:

   nano /etc/apt/apt.conf.d/00openstacksnapshot


U plaatst het volgende:

    DPkg::Pre-Invoke {"/bin/bash /usr/local/bin/create-snapshot.sh apt 5";};


Dit maakt de snapshots bij de apt-get acties:

 

Terugzetten


Het belangrijkste van backups is natuurlijk dat ze hersteld kunnen worden indien nodig.

Via Skyline kunt u een nieuwe server opstarten vanaf images. Gezien de snapshots normale images zijn, kunt u die kiezen om een VM te starten. Daarna koppelt u het floating IP los van de oude server en koppelt u deze aan de nieuwe server.

Heeft u geen floating IP maar een public IP dan moet u middels de command line een herinstallatie van de huidige instance uitvoeren.

Hiervoor moet u een Linux machine ter beschikking hebben met bovenstaande installatie van de OpenStack software. Eveneens het bestand met projectgegevens. Met de volgende commando's kunt u een herinstallatie uitvoeren:

    nova rebuild --poll "INSTANCE_UUID" "SNAPSHOT_IMAGE_UUID"


Waarbij u de juiste UUID's invult (van de server en van het image). Let wel dat dit alle huidige data van de server vernietigd.

Afsluiting


Ten slotte raden we zeer aan regelmatig te testen of uw backups nog werken. Minimaal elke maand een test restore doen, is een goede manier om te zorgen dat uw backups werken en dat u weet hoe ze terug te zetten zijn indien nodig.

Heeft u hulp nodig met het instellen van de snapshots? Of wilt u meer informatie over backups? Laat het ons vooral weten via onze servicedesk; support@cloudvps.nl, of bel ons.


Meer informatie over het nova commando kunt u hier vinden: http://docs.openstack.org/cli-reference/nova.html. Een technischer engels achtergrondartikel hier: https://raymii.org/s/tutorials/OpenStack_Quick_and_automatic_instance_snapshot_backups.html

Tags:

Comments (0)

Laat een reactie achter

Commenting is not available in this channel entry.
VPS Bestellen
VPS Bestellen