Categories
Database Backup

> Discover why standard VM snapshots cause data corruption in transactional databases like PostgreSQL and SQL Server. Learn DBA best practices for application-consistent backups, avoiding VM stun, and ensuring data integrity with CloudSave.

Za DevOps inženjere i sistemske administratore, snimci virtuelnih mašina (VM snapshots) predstavljaju osnovni alat. Oni pružaju brz i praktičan način za beleženje stanja servera pre rizičnog ažuriranja, velike promene konfiguracije ili primene aplikacije. Ako nešto krene po zlu, vraćanje na prethodno stanje traje svega nekoliko sekundi.

Međutim, kada se ova ista metodologija primeni na transakcione baze podataka—kao što su PostgreSQL, MySQL, Oracle ili Microsoft SQL Server—snimci virtuelnih mašina se pretvaraju iz sigurnosne mreže u tempiranu bombu.

Oslanjanje na standardne snimke hipervizora za pravljenje rezervnih kopija baza podataka jedan je od najčešćih uzroka oštećenja podataka, „pocepanih“ stranica (torn pages) i nepopravljivih prekida u radu produkcionih sistema. U ovom članku istražićemo arhitektonski sukob između hipervizora i mehanizama baza podataka, mehaniku oštećenja podataka tokom snimanja i inženjerske najbolje prakse potrebne za bezbedno pravljenje rezervnih kopija virtuelizovanih baza podataka.

Arhitektonski sukob: Hipervizori protiv mehanizama baza podataka

Da bismo razumeli zašto snimci virtuelnih mašina ugrožavaju baze podataka, prvo moramo ispitati kako oba sistema upravljaju stanjem i I/O operacijama.

Kako hipervizori izvršavaju snimke

Kada hipervizor (kao što je VMware ESXi, Microsoft Hyper-V ili KVM) napravi snimak, on ne kopira disk. Umesto toga, on zamrzava trenutnu datoteku virtuelnog diska (npr. .vmdk ili .vhdx) u stanje samo za čitanje i kreira novi delta disk (diferencijalni disk). Sva naknadna upisivanja se usmeravaju na ovaj delta disk.

Kada se snimak obriše, hipervizor mora da potvrdi (konsoliduje) podatke sa delta diska nazad u osnovni disk. Standardni snimci su potpuno nesvesni aplikacija koje rade unutar gostujućeg operativnog sistema. Oni beleže stanje diska tačno onako kako postoji u toj mikrosekundi.

Kako transakcione baze podataka upravljaju stanjem

Transakcione baze podataka su dizajnirane oko ACID svojstava (Atomicity, Consistency, Isolation, Durability – Atomičnost, Konzistentnost, Izolacija, Trajnost). Da bi postigle visoke performanse uz održavanje ACID usaglašenosti, baze podataka ne upisuju svaku transakciju direktno u primarne datoteke podataka na disku odmah. Umesto toga, koriste složenu, višeslojnu arhitekturu:

  1. Buffer Pool / Shared Buffers: Podaci se čitaju i modifikuju unutar sistemske memorije.
  2. Write-Ahead Log (WAL) / Redo Logs: Promene se sekvencijalno upisuju u visoko optimizovanu datoteku dnevnika na disku kako bi se osigurala trajnost.
  3. Checkpoints / Lazy Writers: Periodično, baza podataka ispira modifikovane (prljave) stranice iz memorije u stvarne datoteke podataka na disku.

Zbog ove arhitekture, fizičke datoteke podataka na disku su skoro uvek van sinhronizacije sa stvarnim stanjem baze podataka. Pravo stanje baze podataka postoji samo kao kombinacija datoteka podataka na disku, WAL/Redo dnevnika i podataka koji se trenutno nalaze u memoriji.

Zona opasnosti: Šta se dešava tokom snimka virtuelne mašine

Kada napravite standardni snimak virtuelne mašine na kojoj se nalazi baza podataka, vi beležite stanje konzistentno u slučaju pada (crash-consistent).

Konzistentnost u slučaju pada naspram aplikacione konzistentnosti

Snimak konzistentan u slučaju pada je ekvivalentan izvlačenju kabla za napajanje iz fizičkog servera. Stanje diska je zabeleženo, ali sve što je bilo u memoriji je izgubljeno, a sve što je bilo u procesu slanja ka kontroleru skladištenja je naglo prekinuto.

Iako su moderne baze podataka dizajnirane da se oporave od neočekivanog gubitka napajanja ponovnim pokretanjem Write-Ahead dnevnika, oslanjanje na oporavak od pada kao primarnu strategiju rezervnih kopija je veoma opasno. Ako vaša baza podataka obuhvata više virtuelnih diskova (npr. datoteke podataka na Drive D: i WAL na Drive E:), hipervizor možda neće snimiti oba diska u istoj mikrosekundi. Ako se snimak WAL diska napravi čak i delić sekunde nakon snimka diska sa podacima, baza podataka ne može da uskladi redne brojeve prilikom vraćanja, što rezultira fatalnim oštećenjem.

Efekat „VM Stun“ na sisteme sa velikim brojem transakcija

Proces kreiranja snimka—i što je još važnije, proces konsolidacije snimka—izaziva fenomen poznat kao „VM Stun“ (zamrzavanje virtuelne mašine).

Da bi bezbedno prebacio I/O sa osnovnog diska na delta disk, hipervizor mora nakratko da pauzira (zamrzne) virtuelnu mašinu. Za slabo opterećen veb server, ovo zamrzavanje može trajati 10-50 milisekundi i proći neprimećeno. Međutim, za bazu podataka sa visokim protokom i masivnim I/O operacijama, konsolidacija velikog delta diska može zamrznuti virtuelnu mašinu na nekoliko sekundi.

Tokom zamrzavanja virtuelne mašine:
* Mrežne konekcije pucaju, uzrokujući vremenska ograničenja (timeouts) aplikacija.
* Klasteri visoke dostupnosti (kao što su SQL Server Always On, PostgreSQL Patroni ili MySQL Galera) propuštaju provere statusa (heartbeat checks).
* Klaster može pretpostaviti da je zamrznuti čvor mrtav, pokrećući nepotreban i ometajući prelazak na rezervni sistem (scenario split-brain).

Pocepane stranice i I/O neusklađenost

Mehanizmi baza podataka obično upisuju podatke u određenim veličinama stranica (npr. 8KB za PostgreSQL i SQL Server, 16KB za InnoDB). Međutim, operativni sistem i skladišni nizovi ispod njih obrađuju I/O u manjim blokovima (npr. 4KB ili 512 bajtova).

Ako hipervizor napravi snimak tačno dok baza podataka upisuje stranicu od 8KB, snimak može zabeležiti prvih 4KB novih podataka i poslednjih 4KB starih podataka. Ovo stvara pocepanu stranicu (torn page). Kada pokušate da vratite snimak, baza podataka će pročitati stranicu, neće proći validaciju kontrolne sume i označiće bazu podataka kao oštećenu.

Posledice u stvarnom svetu za specifične mehanizme baza podataka

Različiti mehanizmi baza podataka reaguju na snimke konzistentne u slučaju pada na različite načine, ali nijedan od njih se ne ponaša korektno u produkcionom okruženju.

  • PostgreSQL: PostgreSQL se u velikoj meri oslanja na pg_wal direktorijum. Ako snimak zabeleži direktorijum sa podacima ($PGDATA) i WAL van sinhronizacije, PostgreSQL se neće pokrenuti, izbacujući grešku PANIC: could not locate a valid checkpoint record.
  • MySQL/InnoDB: InnoDB koristi bafer za dvostruko upisivanje (doublewrite buffer) kako bi sprečio pocepane stranice, što nudi određenu zaštitu od stanja konzistentnih u slučaju pada. Međutim, ako su ibdata1 datoteka i ib_logfile zabeleženi van sinhronizacije, InnoDB mehanizam će se srušiti prilikom oporavka.
  • Microsoft SQL Server: SQL Server je veoma osetljiv na zamrzavanje I/O operacija. Bez pravilne VSS (Volume Shadow Copy Service) integracije, vraćanje SQL Servera iz standardnog snimka virtuelne mašine često će rezultirati sumnjivim bazama podataka i prekinutim lancima dnevnika, uništavajući vaše mogućnosti oporavka u određenom trenutku (Point-in-Time Recovery – PITR).

Najbolje prakse za bezbedno pravljenje rezervnih kopija virtuelizovanih baza podataka

Da biste zaštitili transakcione baze podataka, morate preći sa rezervnih kopija konzistentnih u slučaju pada na aplikaciono-konzistentne rezervne kopije. Ovo zahteva da mehanizam za pravljenje rezervnih kopija komunicira sa mehanizmom baze podataka, primoravajući ga da ispere memoriju na disk i nakratko pauzira I/O operacije dok se snimak pravi.

1. Iskoristite aplikaciono-svesno zamrzavanje (VSS i fsfreeze)

Za Windows (SQL Server):
Uvek se uverite da vaše rešenje za rezervne kopije koristi Microsoft Volume Shadow Copy Service (VSS). Kada se pokrene rezervna kopija svesna VSS-a, SQL Server VSS Writer zamrzava I/O baze podataka, ispira čekajuće transakcije na disk i osigurava da je snimak savršeno aplikaciono-konzistentan.

Za Linux (PostgreSQL / MySQL):
Linux nema izvorni ekvivalent VSS-u. Da biste postigli aplikacionu konzistentnost, morate koristiti skripte za pre-freeze i post-thaw u kombinaciji sa alatima za goste hipervizora (npr. VMware Tools).

Evo primera VMware pre-freeze-script za PostgreSQL 15+ koji bezbedno priprema bazu podataka za snimak:

#!/bin/bash
# /usr/sbin/pre-freeze-script
# Uverite se da je ova skripta izvršna (chmod +x)

# 1. Recite PostgreSQL-u da se pripremi za rezervnu kopiju
su - postgres -c "psql -c "SELECT pg_backup_start('vm_snapshot', true);""

# 2. Ispirite bafer sistema datoteka na disk
sync

# 3. Zamrznite sistem datoteka (pod pretpostavkom da su podaci na /var/lib/pgsql)
fsfreeze -f /var/lib/pgsql

I odgovarajuća post-thaw-script za nastavak operacija:

#!/bin/bash
# /usr/sbin/post-thaw-script

# 1. Odmrznite sistem datoteka
fsfreeze -u /var/lib/pgsql

# 2. Recite PostgreSQL-u da je rezervna kopija završena
su - postgres -c "psql -c "SELECT pg_backup_stop();""

2. Koristite izvorne uslužne programe za rezervne kopije baza podataka

Iako su aplikaciono-konzistentni snimci bolji od standardnih snimaka, oni i dalje nose rizik od zamrzavanja virtuelne mašine (VM stun). Najsigurniji pristup za rezervne kopije baza podataka je korišćenje izvornih, striming uslužnih programa za rezervne kopije koji rade nezavisno od hipervizora.

PostgreSQL (pg_basebackup):

pg_basebackup -h localhost -U replication_user -D /mnt/backups/pg_backup -Ft -z -P

MySQL/MariaDB (Percona XtraBackup / Mariabackup):
Ovi alati prave „vruće“, neblokirajuće rezervne kopije kopiranjem datoteka podataka i istovremenim praćenjem promena u redo dnevniku.

mariabackup --backup --target-dir=/mnt/backups/mysql_backup --user=root --password=SecurePass

SQL Server (T-SQL):

BACKUP DATABASE [ProductionDB] 
TO DISK = N'Z:BackupsProductionDB.bak' 
WITH NOFORMAT, NOINIT, NAME = N'ProductionDB-Full Backup', 
SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10;
GO

3. Implementirajte oporavak u određenom trenutku (PITR) putem arhiviranja dnevnika

Dnevni snimak ili potpuna rezervna kopija vas štiti samo do minuta kada je napravljena. Ako se vaša baza podataka sruši u 16:00, a vaš poslednji snimak je bio u 02:00, gubite 14 sati transakcionih podataka.

Da biste postigli pravu otpornost na nivou preduzeća, morate kombinovati potpune aplikaciono-konzistentne rezervne kopije sa kontinuiranim arhiviranjem dnevnika (pravljenje rezervnih kopija WAL, Redo dnevnika ili transakcionih dnevnika svakih nekoliko minuta). Ovo omogućava administratorima baza podataka da vrate bazu podataka na određeni minut ili čak određeni ID transakcije pre katastrofe.

Strategije rezervnih kopija za preduzeća sa CloudSave-om

Upravljanje prilagođenim pre-freeze skriptama, cron poslovima za izvorne dump-ove i slanjem dnevnika na desetine servera baza podataka je operativna noćna mora za DevOps timove. Ovde platforma poslovnog nivoa kao što je CloudSave postaje kritična.

CloudSave premošćuje jaz između virtuelizacije i arhitekture baza podataka. Umesto oslanjanja na slepe snimke hipervizora, CloudSave koristi aplikaciono-svesne agente koji se izvorno integrišu sa SQL Serverom, PostgreSQL-om, MySQL-om i Oracle-om.

Kada CloudSave pokrene rezervnu kopiju:
1. Komunicira direktno sa mehanizmom baze podataka putem izvornih API-ja (kao što je VSS za Windows ili izvorno WAL strimovanje za Linux).
2. Orkestrira ispiranje memorijskih bafera na disk bez izazivanja ometajućih zamrzavanja virtuelne mašine.
3. Bezbedno beleži datoteke podataka i automatski upravlja skraćivanjem transakcionih dnevnika.
4. Kontinuirano pravi rezervne kopije transakcionih dnevnika, omogućavajući granularni oporavak u određenom trenutku (PITR) sa nekoliko klikova.

Prebacivanjem složenosti aplikacione konzistentnosti na CloudSave, administratori baza podataka i sistemski administratori mogu garantovati integritet podataka bez žrtvovanja performansi ili dostupnosti svojih produkcionih klastera.

Zaključak

Snimci virtuelnih mašina su neverovatan alat za upravljanje infrastrukturom, ali su fundamentalno nekompatibilni sa ACID zahtevima transakcionih baza podataka. Oslanjanje na snimke hipervizora konzistentne u slučaju pada izlaže vašu organizaciju pocepanim stranicama, prekinutim lancima replikacije i katastrofalnom gubitku podataka.

Da biste zaštitili svoje kritične podatke, morate implementirati aplikaciono-svesno zamrzavanje, koristiti izvorne metodologije za pravljenje rezervnih kopija baza podataka i održavati kontinuirane arhive transakcionih dnevnika. Usvajanjem namenskih rešenja za rezervne kopije na nivou preduzeća, možete osigurati da vaše baze podataka ostanu visoko dostupne, potpuno oporavljive i potpuno bezbedne.

Категорије