Categories
Database Backup

**

Datu-baseen administratoreentzat (DBA) eta ekoizpen-inguruneetan PostgreSQL kudeatzen duten DevOps ingeniarientzat, ia zero den Berreskuratze Puntuaren Helburua (RPO) lortzea lehentasunezko agindua da. PostgreSQL-ren hondamendiak berreskuratzeko eta Denbora-puntuaren araberako Berreskuratze (PITR) gaitasunen muinean Write-Ahead Logging (WAL) dago. WAL-ek ACID betetzea bermatzen duen arren, transakzioak datu-fitxategietan idatzi aurretik erregistratuz, WAL artxibatzea da erregistro horiek epe luzerako babeskopietarako eta erreplikaziorako gordetzen dituen mekanismoa.

Hala ere, WAL artxibatzea konfiguratzea ez da “konfiguratu eta ahaztu” motako eragiketa bat. Konfigurazio okerrek, isileko hutsegiteek eta arkitekturaren inguruko gaizki-ulertuek datuen galera katastrofikoa, “split-brain” eszenatokiak edo datu-basearen erabateko etenaldiak eragin ditzakete.

Gida integral honetan, PostgreSQL WAL artxibatzearen arkitektura aztertuko dugu, datuen galera eragiten duten ohiko akatsak identifikatuko ditugu eta zure datu-basea erresiliente mantentzeko ekoizpen-mailako jardunbide egokiak zehaztuko ditugu.

PostgreSQL WAL Arkitektura ulertzea

Akatsak aztertu aurretik, funtsezkoa da PostgreSQL-k transakzio-erregistroak nola kudeatzen dituen ulertzea.

PostgreSQL-k aldaketa guztiak pg_wal direktorioan (10. bertsioaren aurretik pg_xlog zena) kokatutako WAL segmentuetan (lehenespenez 16MB-ko fitxategiak) idazten ditu. Transakzio bakoitza sekuentzialki erregistratzen da, Log Sequence Number (LSN) baten bidez markatuta.

WAL segmentu bat betetzen denean, PostgreSQL beste batera aldatzen da. pg_wal direktorioa infinituki haztea saihesteko, PostgreSQL-k WAL segmentu zaharrak birziklatu edo ezabatzen ditu, istripuen berreskurapenerako edo erreplikaziorako beharrezkoak ez direnean.

WAL Artxibatzeak birziklatze-prozesu hau eten egiten du. archive_mode gaituta dagoenean, PostgreSQL-k erabiltzaileak definitutako archive_command bat exekutatzen du (edo archive_library bat erabiltzen du PostgreSQL 15+ bertsioetan) amaitutako WAL segmentua kokapen seguru eta sekundario batera kopiatzeko, ezabatu edo gainidatzi aurretik.

Denbora-puntuaren araberako Berreskuratze (PITR) bat egiteko, bi osagai behar dituzu:
1. Oinarrizko babeskopia baliodun bat.
2. Oinarrizko babeskopiaren unetik berreskurapen-denborara arteko artxibatutako WAL fitxategien kate etenik gabea.

WAL katea hausten bada, zure PITR-ak huts egingo du.

WAL Artxibatzea Ekoizpenerako Konfiguratzea

WAL artxibatzea gaitzeko, zure postgresql.conf fitxategia aldatu behar duzu. Oinarrizko konfigurazio batek wal_level ezartzea, archive_mode gaitzea eta archive_command definitzea eskatzen du.

# postgresql.conf
wal_level = replica             # 'replica' edo 'logical' beharrezkoa da artxibatzeko
archive_mode = on               # Artxibatzaile prozesua gaitzen du
archive_command = 'test ! -f /mnt/nfs/archive/%f && cp %p /mnt/nfs/archive/%f'
archive_timeout = 600           # Behartu WAL aldaketa bat 10 minuturo

archive_command-ean:
* %p artxibatu beharreko WAL fitxategiaren bide osoa adierazten du.
* %f WAL fitxategiaren izena adierazten du.

Goiko konfigurazioa erraza dirudien arren, enpresa-inguruneetan shell komando sinpleetan oinarritzeak arrisku handiak dakartza.

WAL Artxibatzearen Ohiko Akatsak

1. Akatsa: archive_command-en “Isileko Arrakasta”

PostgreSQL archive_command-en irteera-kodearen mende dago erabat. Komandoak 0 itzultzen badu, PostgreSQL-k WAL fitxategia seguru artxibatuta dagoela suposatzen du eta jatorrizko fitxategia birziklatzeari ekiten dio.

Akats ohiko bat datuak biltegiratze iraunkorrera segurtasunez hustu ez arren 0 itzultzen duen komando bat erabiltzea da. Adibidez, cp komando sinple batek arrakasta itzul dezake datuak helburuko zerbitzariko OS orrialde-cache-ra iritsi bezain laster. Helburuko zerbitzariak energia galtzen badu cache-a diskora hustu aurretik, WAL fitxategia galdu egingo da, baina PostgreSQL-k bere kopia lokala ezabatu du jada.

Arriskua: WAL katea hautsita egotea eta PITR egiteko ezintasuna, hondamendiak berreskuratzeko eszenatoki batean bakarrik deskubritzen dena.

Arintzea: Ziurtatu zure artxibatze-scriptak idazketa sinkronikoak behartzen dituela. Shell komando estandarrak erabiltzen badituzu, erabili datuak husten direla bermatzen duten tresnak, edo transferentziaren ondoren fitxategiaren tamaina eta checksum-a egiaztatzen duen wrapper script bat idatzi.

2. Akatsa: pg_wal Partizioaren Agortzea (WAL Bloat)

archive_command-ak huts egiten badu (zero ez den irteera-kode bat itzultzen badu)—sareko etenaldiak, baimen okerrak edo helburuko disko betea direla eta—PostgreSQL-k WAL fitxategia pg_wal direktorioan mantenduko du eta komandoa behin eta berriz saiatuko da.

Honek datuen galera saihesten duen arren (artxibatu gabeko WAL-ak ez ezabatuz), erabilgarritasun-arrisku larria dakar. pg_wal direktorioa %100 betetzen den partizio batean badago, PostgreSQL-k PANIC bat igorriko du eta kraskatu egingo da. Datu-basea ez da berriro abiatuko lekua garbitu arte.

Arriskua: Datu-basearen erabateko geldialdia pg_wal partizio betea dela eta.

Arintzea:
1. Jarri beti pg_wal disko-partizio dedikatu batean.
2. Ezartu pg_wal direktorioaren tamainaren monitorizazio zorrotza.
3. Monitorizatu pg_stat_archiver ikuspegia huts egiten duten artxibatze-komandoak berehala detektatzeko.

3. Akatsa: Oinarrizko Babeskopia Osatugabeak

Oinarrizko babeskopia bat ez da baliagarria babeskopia-prozesuan zehar sortutako WAL fitxategirik gabe. Fitxategi-sistemaren mailako snapshot bat egiten baduzu edo pg_basebackup erabiltzen baduzu WAL-ak streaming bidez bidali gabe (-X stream), ziurtatu behar duzu babeskopiaren hasiera eta amaieraren artean sortutako WAL fitxategiak behar bezala artxibatzen direla.

Zure artxibatzailea atzeratuta badago edo huts egiten badu, eta WAL fitxategi zehatz horiek galtzen badira, oinarrizko babeskopia ezin da egoera koherente batera eraman.

Arriskua: Oinarrizko babeskopia hondatuak edo berreskura ezinak.

Arintzea: Erabili pg_basebackup -X stream beharrezko WAL fitxategiak babeskopiaren karga erabilgarrian bertan sartzeko, edo oinarrizko babeskopien eta WAL segmentuen arteko mendekotasuna automatikoki kudeatzen duten enpresa-mailako babeskopia-soluzioak erabili.

4. Denbora-lerroaren Nahasmena eta “Split-Brain” Eszenatokiak

Standby zerbitzari bat primario izatera igotzen denean, PostgreSQL-k “Timeline ID”-a (WAL fitxategiaren izenaren lehen zatia, adibidez, 0000000200000001000000A4) gehitzen du. Honek primario berriak primario zaharraren WAL historia gainidaztea eragozten du.

Hala ere, primario zaharra ustekabean abiarazten bada behar bezala isolatu gabe (“split-brain” eszenatokia), WAL fitxategiak artxibatze-kokapen berera bidaltzen saia daiteke, denbora-lerro zaharra erabiliz. Zure archive_command-ak fitxategiak itsu-itsuan gainidazten baditu, zure artxibo-biltegia hondatu dezakezu.

Arriskua: Gainidatzitako WAL fitxategiak, hondatutako artxiboak eta berreskura ezinak diren datu-baseak.

Arintzea: Zure archive_command-ak inoiz ez du existitzen den fitxategi bat gainidatzi behar. Oinarrizko konfigurazioan ikusi dugun bezala, test ! -f /mnt/nfs/archive/%f erabili dugu fitxategia jada existitzen bada esplizituki huts egiteko.

Datuen Galera Arriskuak Arintzea: Ekoizpen-Jardunbide Egokiak

Zure PostgreSQL artxibatze-estrategia sendotzeko, ezarri jardunbide egoki hauek.

1. Monitorizatu Artxibatzaile Prozesua Berezko Moduan

PostgreSQL-k pg_stat_archiver ikuspegi integratua eskaintzen du, zure artxibatze-prozesuaren arrakasta eta hutsegiteak jarraitzeko. Ikuspegi hau zure behatze-pilan (adibidez, Prometheus, Datadog edo Zabbix) integratu beharko zenuke.

SELECT 
    archived_count,
    last_archived_wal,
    last_archived_time,
    failed_count,
    last_failed_wal,
    last_failed_time,
    stats_reset
FROM pg_stat_archiver;

Konfiguratu beharreko alerta-atalaseak:
* Alerta eman failed_count handitzen bada.
* Alerta eman now() eta last_archived_time arteko denbora-aldeak zure RPO atalasea gainditzen badu (adibidez, 15 minutu), kontuan hartuta trafiko baxuko datu-baseek atzerapenak izan ditzaketela archive_timeout ezarrita ez badago.

2. Aprobetxatu archive_timeout

Idazketa-bolumen baxuko datu-baseetan, 16MB-ko WAL fitxategi bat betetzeko orduak pasa daitezke. Bete arte, ez da artxibatzen. Zerbitzaria kraskatzen bada eta disko lokala galtzen bada, orduetako transakzioak galtzen dituzu.

archive_timeout = 600 (10 minutu) ezartzeak PostgreSQL behartzen du WAL fitxategi berri batera aldatzera eta unekoa artxibatzera, beteta ez egon arren. Honek bermatzen du zure RPO-ak ez dituela 10 minutuak gainditzen, neurri batean betetako WAL fitxategiengatik biltegiratze-erabilera zertxobait handiagoaren kostuarekin.

3. Aldatu archive_library-ra (PostgreSQL 15+)

Historikoki, archive_command-ek shell prozesu berri bat sortzen zuen WAL fitxategi bakoitzeko. Minutuko ehunka WAL fitxategi sortzen dituzten inguruneetan, shell prozesuak sortzearen gainkargak errendimendu-oztopo bihurtzen da.

PostgreSQL 15-ek archive_library parametroa aurkeztu zuen, WAL artxibatzea dinamikoki kargatutako C moduluen bidez kudeatzea ahalbidetuz. Honek shell-forking gainkarga ezabatzen du eta artxibatze-mekanismo askoz sendoagoa eta errendimendu handiagokoa eskaintzen du. PostgreSQL 15 edo berriagoa erabiltzen ari bazara, bilatu artxibo-modulu pertsonalizatuak onartzen dituzten babeskopia-tresnak.

4. Probatu Aldian-aldian Denbora-puntuaren araberako Berreskuratzea

Probatu gabeko babeskopia bat ez da babeskopia bat; desio bat da. Zure WAL artxibatzea behar bezala funtzionatzen duela, zure WAL katea etenik gabea dela eta zure oinarrizko babeskopiak koherenteak direla egiaztatzeko modu bakarra PITR proba automatizatuak aldian-aldian egitea da.

Abiarazi aldi baterako instantzia bat, leheneratu oinarrizko babeskopia, konfiguratu restore_command zure artxibotik ateratzeko eta berreskuratu denbora-zigilu zehatz batera. Egiaztatu datu-basea egoera koherente batera iristen dela eta konexioetarako irekitzen dela.

Enpresa-mailako Babeskopia eta Berreskuratzea CloudSave-rekin

archive_command-erako shell script pertsonalizatuak kudeatzea, WAL desduplikazioa maneiatzea eta transakzio-erregistroetarako kanpoko biltegiratze segurua bermatzea IT taldeentzako zama operatibo bihur daiteke azkar.

Hemen eskaintzen du CloudSave-k balio handia enpresa-mailako PostgreSQL inguruneetarako. CloudSave zuzenean integratzen da PostgreSQL-ren jatorrizko babeskopia eta WAL artxibatze APIekin, goian eztabaidatutako akatsak ezabatzeko.

Bash script hauskorrak idatzi beharrean, CloudSave-k integrazio sendoa eskaintzen du:
* Bidalketa Bermatzen du: Shell komando estandarrak ordezkatzen ditu kanpoko edo hodeiko biltegiratze seguruetara egiaztatutako transferentziekin.
* WAL Bloat Saihesten du: pg_wal direktorioa aktiboki monitorizatzen du eta administratzaileei abisatzen die partizioa agortu baino askoz lehenago.
* PITR Automatizatzen du: Denbora-puntuaren araberako Berreskuratzea interfaze intuitibo baten bidez errazten du. Berreskuratu nahi duzun minutu zehatza hautatzen duzu, eta CloudSave-k automatikoki berreskuratzen du oinarrizko babeskopia zuzena eta egoera horretara iristeko beharrezkoak diren WAL fitxategien sekuentzia zehatza igortzen du.
* Denbora-lerroak Kudeatzen ditu: PostgreSQL denbora-lerroen historiak modu adimentsuan kudeatzen ditu, failover-ek eta “split-brain” eszenatokiek zure babeskopia-biltegia ez hondatzea bermatuz.

WAL kudeaketaren lan astuna CloudSave-ri delegatuz, DBA-ek kontsulten optimizazioan eta datu-basearen errendimenduan zentratu daitezke, jakinda beren RPO eta RTO SLA-ak enpresa-mailako plataforma batek babesten dituela.

Ondorioa

PostgreSQL WAL artxibatzea datu-baseen hondamendiak berreskuratzeko bizkarrezurra da. Fitxategi bat direktorio batetik bestera kopiatzearen kontzeptua erraza dirudien arren, muturreko kasuek—isileko hutsegiteak, diskoaren agortzea eta denbora-lerroen dibergentzia—arrisku larriak dakartzate datuen osotasunerako.

pg_wal-en arkitektura ulertuz, archive_command konfigurazio suntsitzaileak zorrotz saihestuz, pg_stat_archiver monitorizatuz eta CloudSave bezalako enpresa-mailako babeskopia-plataformak aprobetxatuz, PostgreSQL azpiegitura erresiliente bat eraiki dezakezu, hardware-hutsegiteak, giza akatsak eta etenaldi katastrofikoak gainditzeko gai dena, konprometitutako transakzio bakar bat galdu gabe.

Ezagutu datuen galera eragiten duten PostgreSQL WAL artxibatzearen ohiko akatsak. Ikasi DBA adituen jardunbide egokiak, konfigurazio-aholkuak eta enpresa-mailako datu-baseetarako Denbora-puntuaren araberako Berreskuratze (PITR) fidagarria nola bermatu.

Kategoriak