Categories
Database Backup

**

Maamulayaasha Database-ka (DBAs) iyo injineerada DevOps ee maamula PostgreSQL ee wax-soo-saarka (production), gaarista Ujeeddada Barta Soo-kabashada (RPO) oo ku dhow eber waa waajibaad aasaasi ah. Xudunta u ah soo-kabashada musiibada ee PostgreSQL iyo Soo-kabashada Barta-Waqtiga (PITR) waa Qorista-Hore-ee-Log-ga (WAL). Iyadoo WAL ay xaqiijiso u hoggaansanaanta ACID iyadoo diiwaangelinaysa macaamil ganacsiyeedyada ka hor inta aan lagu qorin faylasha xogta, kaydinta (archiving) WAL waa habka ilaalisa diiwaannadan si loogu isticmaalo kaydinta muddada-dheer iyo nuqul-samaynta.

Si kastaba ha ahaatee, habaynta kaydinta WAL maaha hawl “hal mar la sameeyo oo la iloobo”. Habaynta khaldan, guuldarrooyinka aamusan, iyo faham-darrada dhinaca qaab-dhismeedka waxay u horseedi karaan luminta xogta oo baaxad leh, xaalado kala qaybsanaan maskaxeed (split-brain), ama joojin dhammaystiran oo ku timaada database-ka.

Hagahan dhammaystiran, waxaan ku baari doonnaa qaab-dhismeedka kaydinta WAL ee PostgreSQL, waxaan aqoonsan doonnaa dabinada ugu badan ee keena luminta xogta, waxaana qeexi doonnaa hababka ugu wanaagsan ee heerka wax-soo-saarka si loo hubiyo in database-kaagu uu ahaado mid adkeysi leh.

Fahamka Qaab-dhismeedka WAL ee PostgreSQL

Kahor inta aynaan u gelin dabinada, waa muhiim in la fahmo sida PostgreSQL u maamusho diiwaannada macaamil ganacsiyeedka.

PostgreSQL waxay ku qortaa dhammaan wax-ka-beddelka qaybaha WAL (oo caadi ahaan ah faylal 16MB ah) oo ku yaal tusaha pg_wal (oo hore loogu yaqaanay pg_xlog noocyadii ka hor 10). Macaamil kastaa waxaa loo diiwaangeliyaa si isku xigta, waxaana lagu calaamadeeyaa Lambarka Isku-xigxiga Log-ga (LSN).

Marka qaybta WAL ay buuxsanto, PostgreSQL waxay u beddeshaa mid cusub. Si looga hortago in tusaha pg_wal uu si aan xad lahayn u koro, PostgreSQL waxay dib u warshadaynaysaa ama ka saartaa qaybaha WAL ee duugoobay marka aan loo baahnayn soo-kabashada shilka ama nuqul-samaynta.

Kaydinta WAL waxay dhex gashaa habkan dib-u-warshadaynta. Marka archive_mode la hawlgeliyo, PostgreSQL waxay fulisaa archive_command uu isticmaaluhu qeexay (ama waxay isticmaashaa archive_library gudaha PostgreSQL 15+) si ay ugu nuqul-samayso qaybta WAL ee dhammaystiran meel ammaan ah oo labaad ka hor inta aan la tirtirin ama aan lagu dul-qorin.

Si loo sameeyo Soo-kabashada Barta-Waqtiga (PITR), waxaad u baahan tahay laba qaybood:
1. Kayd aasaasi ah (base backup) oo sax ah.
2. Silsilad aan go’nayn oo faylasha WAL ah oo la kaydiyay laga bilaabo wakhtiga kaydka aasaasiga ah ilaa wakhtiga soo-kabashada ee aad beegsanayso.

Haddii silsiladda WAL ay go’do, PITR-kaagu wuu fashilmayaa.

Habaynta Kaydinta WAL ee Wax-soo-saarka

Si aad u hawlgeliso kaydinta WAL, waa inaad wax ka beddeshaa faylkaaga postgresql.conf. Habayn aasaasi ah waxay u baahan tahay dejinta wal_level, hawlgelinta archive_mode, iyo qeexidda archive_command.

# postgresql.conf
wal_level = replica             # 'replica' ama 'logical' ayaa looga baahan yahay kaydinta
archive_mode = on               # Waxay hawlgelisaa habka kaydiyaha
archive_command = 'test ! -f /mnt/nfs/archive/%f && cp %p /mnt/nfs/archive/%f'
archive_timeout = 600           # Ku qasab beddelka WAL 10-kii daqiiqaba

Gudaha archive_command:
* %p waxay matalaysaa dariiqa buuxa ee faylka WAL ee la kaydinayo.
* %f waxay matalaysaa magaca faylka ee faylka WAL.

In kasta oo habaynta kor ku xusan ay u muuqato mid toos ah, ku tiirsanaanta amarrada qolofka (shell commands) ee fudud ee jawiga shirkadaha waxay keenaysaa khataro waaweyn.

Dabinada Guud ee Kaydinta WAL

Dabin 1: “Guusha Aamusan” ee archive_command

PostgreSQL waxay gebi ahaanba ku tiirsan tahay koodka bixitaanka (exit code) ee archive_command. Haddii amarku soo celiyo 0, PostgreSQL waxay u qaadataa in faylka WAL si ammaan ah loo kaydiyay waxayna sii wadaa dib-u-warshadaynta faylkii asalka ahaa.

Khalad caadi ah waa isticmaalka amar soo celinaya 0 xitaa haddii xogta aan si ammaan ah loogu shubin kaydinta joogtada ah. Tusaale ahaan, amar cp oo fudud ayaa laga yaabaa inuu soo celiyo guul isla marka xogtu gaarto kaydka bogga OS-ka ee server-ka loo socdo. Haddii server-ka loo socdo uu korontadu ka go’do ka hor inta aan kaydka lagu shubin disk-ga, faylka WAL wuu lumayaa, laakiin PostgreSQL waxay horey u tirtirtay nuqulkeedii maxalliga ahaa.

Khatarta: Silsilad WAL oo go’an iyo awood la’aan lagu sameeyo PITR, taas oo la ogaado oo kaliya inta lagu jiro xaalad soo-kabashada musiibada.

Xalka: Hubi in qoraalkaaga kaydinta uu xoojiyo qorista isku-xiran (synchronous writes). Haddii aad isticmaalayso amarrada qolofka ee caadiga ah, isticmaal qalab dammaanad qaadaya in xogta la shubay, ama qor qoraal duub ah (wrapper script) oo xaqiijinaya cabbirka faylka iyo checksum-ka ka dib wareejinta.

Dabin 2: Daalka Qaybta pg_wal (WAL Bloat)

Haddii archive_command uu fashilmo (soo celiyo kood aan eber ahayn)—sababo la xiriira go’itaanka shabakadda, rukhsadaha khaldan, ama disk-ga loo socdo oo buuxsamay—PostgreSQL waxay ku hayn doontaa faylka WAL tusaha pg_wal waxayna dib u tijaabin doontaa amarka si aan xad lahayn.

In kasta oo tani ay ka hortagayso luminta xogta iyadoo aan la tirtirin WAL-yada aan la kaydin, waxay keenaysaa khatar weyn oo dhinaca helitaanka ah. Haddii tusaha pg_wal uu ku yaal qayb disk ah oo buuxsamaysa ilaa 100%, PostgreSQL waxay soo saari doontaa PANIC wayna burburi doontaa. Database-ku dib uma bilaaban doono ilaa meel bannaan laga nadiifiyo.

Khatarta: Hoos-u-dhac dhammaystiran oo ku yimaada database-ka sababo la xiriira qaybta pg_wal oo buuxsantay.

Xalka:
1. Had iyo jeer dhig pg_wal qayb disk ah oo u gooni ah.
2. Hirgeli kormeer adag oo ku saabsan cabbirka tusaha pg_wal.
3. Kormeero aragtida pg_stat_archiver si aad isla markiiba u ogaato amarrada kaydinta ee fashilmaya.

Dabin 3: Kayd Aasaasi ah oo aan Dhammaystirnayn

Kayd aasaasi ah (base backup) wax faa’iido ah ma leh iyada oo aan lahayn faylasha WAL ee la sameeyay intii lagu jiray habka kaydinta. Haddii aad qaadato sawir-qaadis heer fayl-nidaam ah ama aad isticmaasho pg_basebackup adigoon qulqulin (streaming) WAL-yada (-X stream), waa inaad hubisaa in faylasha WAL ee la sameeyay inta u dhaxaysa bilowga iyo dhammaadka kaydinta si guul leh loo kaydiyay.

Haddii kaydiyahaagu uu dib u dhacayo ama uu fashilmayo, oo faylashaas WAL ee gaarka ah ay lumaan, kaydka aasaasiga ah laguma keeni karo xaalad isku mid ah.

Khatarta: Kayd aasaasi ah oo musuqmaasuqay ama aan la soo celin karin.

Xalka: Isticmaal pg_basebackup -X stream si aad ugu darto faylasha WAL ee lagama maarmaanka ah gudaha xogta kaydka lafteeda, ama isticmaal xalalka kaydinta ee shirkadaha kuwaas oo si toos ah u maamula ku-tiirsanaanta u dhaxaysa kaydka aasaasiga ah iyo qaybaha WAL.

Dabin 4: Jahwareerka Jadwalka iyo Xaaladaha Kala-qaybsanaanta Maskaxeed

Marka server-ka standby-ga loo dallacsiiyo inuu noqdo mid aasaasi ah (primary), PostgreSQL waxay kordhisaa “Timeline ID” (qaybta hore ee magaca faylka WAL, tusaale ahaan, 0000000200000001000000A4). Tani waxay ka hortagtaa in aasaasiga cusub uu ku dul-qoro taariikhda WAL ee aasaasigii hore.

Si kastaba ha ahaatee, haddii aasaasigii hore si shil ah loo bilaabo iyada oo aan si habboon loo xirin (xaalad kala-qaybsanaan maskaxeed), waxaa laga yaabaa inay isku daydo inay ku riixdo faylasha WAL meel isku mid ah oo kayd ah iyadoo la isticmaalayo jadwalkii hore. Haddii archive_command-kaagu uu si indho la’aan ah ugu dul-qoro faylasha, waxaad musuqmaasuqi kartaa kaydkaaga kaydinta.

Khatarta: Faylasha WAL oo la dul-qoray, kaydka oo musuqmaasuqay, iyo database-yo aan la soo celin karin.

Xalka: archive_command-kaagu waa inuusan marnaba dul-qorin fayl jira. Ogow habayntii aasaasiga ahayd ee hore, waxaan u isticmaalnay test ! -f /mnt/nfs/archive/%f si aan si cad ugu fashilino haddii faylku uu horey u jiray.

Yaraynta Khataraha Luminta Xogta: Hababka Ugu Wanaagsan ee Wax-soo-saarka

Si aad u adkaysato istaraatiijiyaddaada kaydinta PostgreSQL, hirgeli hababkan ugu wanaagsan.

1. Kormeero Habka Kaydiyaha si Dabiici ah

PostgreSQL waxay bixisaa aragti ku dhex jirta, pg_stat_archiver, kaas oo raadraaca guusha iyo fashilka habkaaga kaydinta. Waa inaad ku dhex dartaa aragtidan xirmooyinkaaga kormeerka (tusaale, Prometheus, Datadog, ama Zabbix).

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

Heerarka digniinta ee la habaynayo:
* Digniin haddii failed_count uu kordho.
* Digniin haddii farqiga wakhtiga u dhaxeeya now() iyo last_archived_time uu dhaafo heerkaaga RPO (tusaale, 15 daqiiqo), adigoo maskaxda ku haya in database-yada taraafikada yar ay si dabiici ah u yeelan karaan dib u dhac ilaa archive_timeout la dejiyo.

2. Ka faa’iidayso archive_timeout

Database-yada leh mugga qorista yar, faylka WAL ee 16MB ah waxaa laga yaabaa inay saacado ku qaadato inuu buuxsamo. Ilaa uu ka buuxsamayo, lama kaydinayo. Haddii server-ku burburo oo disk-ga maxalliga ah uu lumo, waxaad luminaysaa saacado macaamil ganacsiyeed ah.

Dejinta archive_timeout = 600 (10 daqiiqo) waxay ku qasbaysaa PostgreSQL inay u beddesho fayl WAL cusub oo ay kaydiso kan hadda jira, xitaa haddii uusan buuxin. Tani waxay dammaanad qaadaysaa in RPO-gaagu uusan dhaafin 10 daqiiqo, iyadoo kharashka isticmaalka kaydinta uu xoogaa kordhayo sababo la xiriira faylasha WAL ee qayb ahaan buuxsamay.

3. U gudub archive_library (PostgreSQL 15+)

Taariikh ahaan, archive_command waxay dhalin jirtay hab qolof cusub (shell process) fayl kasta oo WAL ah. Jawiyada wax-soo-saarka sare leh ee dhalinaya boqollaal faylasha WAL daqiiqaddii, culayska dhalinta hababka qolofka wuxuu noqdaa caqabad waxqabad.

PostgreSQL 15 waxay soo bandhigtay cabbirka archive_library, taas oo u oggolaanaysa kaydinta WAL inay maamulaan qaybaha C ee si firfircoon loo raray. Tani waxay meesha ka saaraysaa culayska qolof-dhalinta waxayna bixisaa hab kaydin oo aad u adag oo waxqabadkiisu sarreeyo. Haddii aad ku jirto PostgreSQL 15 ama ka sareeya, raadi qalabka kaydinta ee taageera qaybaha kaydinta ee gaarka ah.

4. Si joogto ah u tijaabi Soo-kabashada Barta-Waqtiga

Kayd aan la tijaabin maaha kayd; waa rabitaan. Habka kaliya ee lagu xaqiijin karo in kaydintaada WAL ay si sax ah u shaqaynayso, in silsiladdaada WAL ay tahay mid aan go’nayn, iyo in kaydkaaga aasaasiga ah uu yahay mid isku mid ah, waa in la sameeyo tijaabooyin PITR oo joogto ah oo toos ah.

Bilow tusaale ku-meel-gaar ah, soo celi kaydka aasaasiga ah, habee restore_command si aad uga soo jiidato kaydkaaga, oo dib u soo celi wakhti gaar ah. Xaqiiji in database-ku gaaro xaalad isku mid ah oo uu u furmo xiriirada.

Kaydinta iyo Soo-kabashada Shirkadaha oo leh CloudSave

Maamulidda qoraallada qolofka ee gaarka ah ee archive_command, maaraynta WAL deduplication, iyo hubinta kaydinta ammaan ah, meel ka baxsan goobta ee diiwaannada macaamil ganacsiyeedka waxay si dhakhso ah u noqon kartaa culays hawleed oo saaran kooxaha IT-ga.

Tani waa meesha CloudSave ay ka bixiso qiimo weyn oo loogu talagalay jawiyada PostgreSQL ee shirkadaha. CloudSave waxay si toos ah ula midoobaysaa API-yada kaydinta iyo kaydinta WAL ee PostgreSQL si ay meesha uga saarto dabinada gacanta ee kor lagu soo hadal qaaday.

Halkii aad ka qori lahayd qoraallo bash oo jilicsan, CloudSave waxay bixisaa is-dhexgal adag, oo ku salaysan wakiil ama aan wakiil lahayn oo:
* Dammaanad qaadaya Gaarsiinta: Waxay ku beddeshaa amarrada qolofka caadiga ah wareejin la xaqiijiyay, oo la hubiyay checksum-ka oo loo dirayo kaydinta ammaan ah ee goobta ka baxsan ama daruuraha.
* Ka hortagaya WAL Bloat: Si firfircoon u kormeera tusaha pg_wal oo u digaya maamulayaasha muddo dheer ka hor inta aanay dhicin daalka qaybta.
* Toos u maamula PITR: Waxay fududaysaa Soo-kabashada Barta-Waqtiga iyada oo loo marayo interface dareen leh. Waxaad dooranaysaa daqiiqadda saxda ah ee aad rabto inaad dib u soo ceshato, CloudSave-na waxay si toos ah u soo ceshanaysaa kaydka aasaasiga ah ee saxda ah waxayna qulqulinaysaa taxanaha saxda ah ee faylasha WAL ee looga baahan yahay si loo gaaro xaaladdaas.
* Maamula Jadwalka: Si caqli leh u maamula taariikhaha jadwalka PostgreSQL, iyadoo la hubinayo in failovers iyo xaaladaha kala-qaybsanaanta maskaxeed aysan musuqmaasuqin kaydkaaga kaydinta.

Iyadoo culayska maamulka WAL loo wareejinayo CloudSave, DBAs waxay diiradda saari karaan hagaajinta su’aalaha iyo waxqabadka database-ka, iyagoo og in RPO iyo RTO SLAs ay ilaalinayaan madal heer shirkadeed ah.

Gabagabo

Kaydinta WAL ee PostgreSQL waa laf-dhabarta soo-kabashada musiibada ee database-ka. In kasta oo fikradda ah in fayl laga guuriyo hal tuse loona guuriyo mid kale ay u muuqato mid fudud, kiisaska cidhifka ah—guuldarrooyinka aamusan, daalka disk-ga, iyo kala duwanaanshaha jadwalka—waxay khatar weyn ku yihiin daacadnimada xogta.

Adigoo fahmaya qaab-dhismeedka pg_wal, si adag uga fogaanaya habaynta archive_command ee waxyeellada leh, kormeeraya pg_stat_archiver, iyo ka faa’iidaysiga madal-yada kaydinta ee shirkadaha sida CloudSave, waxaad dhisi kartaa kaabayaal PostgreSQL oo adkeysi leh oo awood u leh inay ka badbaadaan guuldarrooyinka qalabka, khaladaadka bini’aadamka, iyo musiibooyinka waaweyn iyada oo aan la lumin hal macaamil ganacsiyeed oo la sameeyay.

Soo hel dabinada caadiga ah ee kaydinta WAL ee PostgreSQL ee keena luminta xogta. Baro hababka ugu wanaagsan ee DBA-ga khabiirka ah, talooyinka habaynta, iyo sida loo hubiyo Soo-kabashada Barta-Waqtiga (PITR) ee la isku halayn karo ee database-yada shirkadaha.