Zálohování XEN strojů pomocí LVM

Úvodem

Někdy je vhodné mít i plnou zálohu XEN stroje/ů (domU) - respektive jejich disků. Konfigurace samotné mašiny je uložena většinou v etc a není problém ji zálohovat, či případně i znovu vytvořit.
Zálohování disků mašiny naráží hned na několik problémů (jistě najdete další):
  1. Konzistence zálohy
  2. Výpadek zálohovanách strojů
  3. Velikost zálohy
  4. Zklamání procesu zálohy (záloha probíhá "dlouhý" čas)
100% splnění bodu číslo 1. vylučuje nemít výpadek stojů (bod 2.)
Pro splnění bodu číslo 1 by bylo třeba: .. nebo dle modelu následného řešení Velikost zálohy ovlivníme jen kompresí. A snad scripty uvnitř v zálohovaných strojů, které minimalizují data (promazání tmp apod. - pozor na promazávání v tmp věcí od KDE, Gnome apod.)
Zklamání procesu zálohy je obecná nepříjemná vlastnost, která nesmí nastat ale nastane nejdříve zítra, proto je nejsnažší zabudovat kontrolní mechanismus (kontrolovat návratové kódy příkazů) s notifikací (odeslat e-mail) PLUS uchovat předchozí zálohu dokud stávající není plně hotova.

Řešení přes LVM

Scriptík je vhodné si projít a případně jednotlivé akce si předem odzkoušet.
Script zde uvedený provádí zálohu, rozumným kompromisem s trochu optimistyckým přístupem.
Konzistence zálohy není sice 100% [čti sto-procentní, sto-procent se u nás píše 100 % .. :)], ale pokud se provede v čase kdy stroje podřimují dá se očekávat dostatečnou kvalitu.
Obnovit stroj po takovéto záloze, je jako spustit PC po výpadku elektřiny (bez záložního zdroje), ale s tím, že těsně před tím dostal systém echo a mohl vysypat případné souborové buffery.
Po obnově je určitě třeba udělat kontrolu databází a v případě problémů tabulky opravit. A pro jistotu zkontrolovat fs.
Tuto zálohu je vhodné kombinovat se zálohami konkrétních dat uvnitř strojů (mysqldump, svnadmin dump apod.). Takto vytvořená záloha například 1x týdně a jednodenní zálohy kritických dat (mysql, svn, www, /home), ale také složky /etc a složky cron-a /var/spool/cron umožní uvést po případném crachu vše do max. 1 den starého stavu a to relativně rychle (nepočítaje odstranění závady a přenos dat, tak rozhodně do 1 hodky).
Ukázka jak lze kupříkladu zálohovat obsah stroje je k dispozici zde – bez dalšího komentáře.

Info:

Script je nasazen a funguje (a zdá se, že správně) - před zveřejněním jsem jej zbavil konrétních údajů, takže doufám, že jsem nevnesl chybu.
Běží v prostředí kde

Naplánování pravidelné zálohy

Script je možné spuštět cronem například takto:
30  4 * * 0  /imegabin/backup_virtuals >> /var/log/backup_virtuals.log 2>> /var/log/backup_virtuals.log
Spuštění v 4:30 v neděli a výpisem chyb i hlášení do /var/log/backup_virtuals.log
Jedná se o docela komplexní "dlouhý" proces, proto je vhodné výstupní informace logovat.
Při neúspěchu je vhodné se co nejdříve zajímat o to co se stalo a zkontrolovat stav!

Výstup ze scriptu

Výpis vypadá následovně:
2009-05-24 23:33:01 move old backup to *.old - start
2009-05-24 23:33:01 move old backup to *.old - done
2009-05-24 23:33:01 Pause machines - start
2009-05-24 23:33:05 Pause machines - done
2009-05-24 23:33:05 Create lvm lvmbackup - start
  Logical volume "lvmbackup" created
2009-05-24 23:33:07 Create lvm lvmbackup - done
2009-05-24 23:33:07 UnPause machines - start
2009-05-24 23:33:10 UnPause machines - done
2009-05-24 23:33:10 Mount and cd to /mnt/lvmbackup - start
2009-05-24 23:33:11 Mount and cd to /mnt/lvmbackup - done
2009-05-24 23:33:11 Backup to tar.gz - start
2009-05-25 00:18:23 Backup to tar.gz - done
2009-05-25 00:18:23 Umount - start
2009-05-25 00:18:27 Umount - done
Lvremove - start
  Logical volume "lvmbackup" successfully removed
2009-05-25 00:18:29 Lvremove - done
2009-05-25 00:18:29 Backup done
---------------------------------------------
Při neúspěchu je vhodné se co nejdříve zajímat o to co se stalo a zkontrolovat stav!

Jak to funguje, když to funguje

Script provádí tyto operace:

Co když script zklame

Co se stane

  1. Pokusí se o uvedení do stavu před zálohou
  2. Zapíše se do logu 'backup-virtuals: Failure. Message: xxxxx'
  3. Pošle se email s případným komentářem jestli je třeba zničit snapshot

Co je třeba udělat co nejdříve

  1. Prohlédnou výstup scriptu (stdout, stderr) viz spouštění cronem
  2. Ověřit existenci snapshot svazku pomocí 'lvdisplay' nebo případně 'lvdisplay /dev/main/lvmbackup' - dle nastavení
    Existuje-li:
    • Je-li namontován svazek (/dev/main/lvmbackup), odmontovat např. 'umount /mnt/lvmbackup' - dle nastavení
    • Zničiti lvm snapshot svazek (opatrně, ničit jen to co je třeba) například 'lvremove -f /dev/main/lvmbackup' - dle nastavní
  3. Zjisti jak příště – lépe :)

Zdroje informací: