Categories
Database Backup

**

Ar gyfer Gweinyddwyr Cronfeydd Data (DBAs) a pheirianwyr DevOps sy’n rheoli PostgreSQL mewn cynhyrchiad, mae cyflawni Amcan Pwynt Adfer (RPO) sy’n agos at sero yn brif orchymyn. Wrth wraidd galluoedd adfer ar ôl trychineb ac Adferiad Pwynt-mewn-Amser (PITR) PostgreSQL mae Cofnodi Ysgrifennu-Ymlaen (WAL). Er bod WAL yn sicrhau cydymffurfiaeth ACID trwy gofnodi trafodion cyn iddynt gael eu hysgrifennu i’r ffeiliau data, archifo WAL yw’r mecanwaith sy’n cadw’r cofnodion hyn ar gyfer copi wrth gefn a dyblygu hirdymor.

Fodd bynnag, nid yw ffurfweddu archifo WAL yn weithred o fath “gosod a diystyru”. Gall camffurfweddiadau, methiannau tawel, a chamddealltwriaeth bensaernïol arwain at golli data trychinebus, senarios ymennydd hollt, neu doriadau cronfa ddata llwyr.

Yn y canllaw cynhwysfawr hwn, byddwn yn archwilio pensaernïaeth archifo WAL PostgreSQL, yn nodi’r peryglon mwyaf cyffredin sy’n arwain at golli data, ac yn amlinellu arferion gorau graddfa gynhyrchu i sicrhau bod eich cronfa ddata yn parhau i fod yn wydn.

Deall Pensaernïaeth WAL PostgreSQL

Cyn plymio i’r peryglon, mae’n hanfodol deall sut mae PostgreSQL yn trin cofnodion trafodion.

Mae PostgreSQL yn ysgrifennu’r holl addasiadau i segmentau WAL (sy’n ddiofyn i ffeiliau 16MB) wedi’u lleoli yn y cyfeiriadur pg_wal (a elwid gynt yn pg_xlog mewn fersiynau cyn 10). Mae pob trafodiad yn cael ei gofnodi’n ddilyniannol, wedi’i farcio gan Rif Dilyniant Cofnod (LSN).

Pan fydd segment WAL yn llenwi, mae PostgreSQL yn newid i un newydd. Er mwyn atal y cyfeiriadur pg_wal rhag tyfu’n ddiderfyn, mae PostgreSQL yn ailgylchu neu’n tynnu hen segmentau WAL unwaith nad oes eu hangen mwyach ar gyfer adferiad damwain neu ddyblygu.

Mae Archifo WAL yn rhyng-gipio’r broses ailgylchu hon. Pan fo archive_mode wedi’i alluogi, mae PostgreSQL yn gweithredu archive_command a ddiffiniwyd gan y defnyddiwr (neu’n defnyddio archive_library yn PostgreSQL 15+) i gopïo’r segment WAL wedi’i gwblhau i leoliad diogel, eilaidd cyn iddo gael ei ddileu neu ei drosysgrifennu.

I berfformio Adferiad Pwynt-mewn-Amser (PITR), mae angen dau gydran arnoch:
1. Copi wrth gefn sylfaenol dilys.
2. Cadwyn ddi-dor o ffeiliau WAL wedi’u harchifo o amser y copi wrth gefn sylfaenol hyd at eich amser adfer targed.

Os yw’r gadwyn WAL honno wedi torri, mae eich PITR yn methu.

Ffurfweddu Archifo WAL ar gyfer Cynhyrchiad

I alluogi archifo WAL, rhaid i chi addasu eich ffeil postgresql.conf. Mae ffurfweddiad sylfaenol yn gofyn am osod y wal_level, galluogi archive_mode, a diffinio’r archive_command.

# postgresql.conf
wal_level = replica             # mae angen 'replica' neu 'logical' ar gyfer archifo
archive_mode = on               # Yn galluogi'r broses archifydd
archive_command = 'test ! -f /mnt/nfs/archive/%f && cp %p /mnt/nfs/archive/%f'
archive_timeout = 600           # Gorfodi newid WAL bob 10 munud

Yn yr archive_command:
* Mae %p yn cynrychioli’r llwybr llawn i’r ffeil WAL i’w harchifo.
* Mae %f yn cynrychioli enw ffeil y ffeil WAL.

Er bod y ffurfweddiad uchod yn ymddangos yn syml, mae dibynnu ar orchmynion cragen syml mewn amgylcheddau menter yn cyflwyno risgiau sylweddol.

Peryglon Cyffredin mewn Archifo WAL

Perygl 1: “Llwyddiant Tawel” archive_command

Mae PostgreSQL yn dibynnu’n llwyr ar god ymadael yr archive_command. Os yw’r gorchymyn yn dychwelyd 0, mae PostgreSQL yn tybio bod y ffeil WAL wedi’i harchifo’n ddiogel ac yn bwrw ymlaen i ailgylchu’r ffeil wreiddiol.

Camgymeriad cyffredin yw defnyddio gorchymyn sy’n dychwelyd 0 hyd yn oed os nad yw’r data wedi’i fflysio’n ddiogel i storfa barhaus. Er enghraifft, gall gorchymyn cp syml ddychwelyd llwyddiant cyn gynted ag y bydd y data yn taro storfa tudalen OS ar y gweinydd cyrchfan. Os bydd y gweinydd cyrchfan yn colli pŵer cyn i’r storfa gael ei fflysio i’r ddisg, mae’r ffeil WAL yn cael ei cholli, ond mae PostgreSQL eisoes wedi dileu ei gopi lleol.

Y Risg: Cadwyn WAL wedi torri ac anallu i berfformio PITR, a ddarganfuwyd dim ond yn ystod senario adfer ar ôl trychineb.

Y Lliniaru: Sicrhewch fod eich sgript archifo yn gorfodi ysgrifeniadau cydamserol. Os ydych yn defnyddio gorchmynion cragen safonol, defnyddiwch offer sy’n gwarantu bod data’n cael ei fflysio, neu ysgrifennwch sgript lapio sy’n gwirio maint y ffeil a’r siecswm ar ôl trosglwyddo.

Perygl 2: Disbyddu Rhaniad pg_wal (Chwydd WAL)

Os bydd yr archive_command yn methu (yn dychwelyd cod ymadael nad yw’n sero)—oherwydd toriadau rhwydwaith, caniatâd anghywir, neu ddisg cyrchfan llawn—bydd PostgreSQL yn cadw’r ffeil WAL yn y cyfeiriadur pg_wal ac yn ailgeisio’r gorchymyn am gyfnod amhenodol.

Er bod hyn yn atal colli data trwy beidio â dileu WALs heb eu harchifo, mae’n cyflwyno risg ddifrifol i argaeledd. Os yw’r cyfeiriadur pg_wal yn byw ar raniad sy’n llenwi hyd at 100%, bydd PostgreSQL yn cyhoeddi PANIC ac yn chwalu. Ni fydd y gronfa ddata yn cychwyn eto nes bod lle wedi’i glirio.

Y Risg: Amser segur cronfa ddata llwyr oherwydd rhaniad pg_wal llawn.

Y Lliniaru:
1. Rhowch pg_wal ar raniad disg pwrpasol bob amser.
2. Gweithredwch fonitro ymosodol ar faint y cyfeiriadur pg_wal.
3. Monitro’r farn pg_stat_archiver i ganfod gorchmynion archifo sy’n methu ar unwaith.

Perygl 3: Copïau Wrth Gefn Sylfaenol Anghyflawn

Mae copi wrth gefn sylfaenol yn ddiwerth heb y ffeiliau WAL a gynhyrchir yn ystod y broses copi wrth gefn. Os ydych chi’n cymryd ciplun ar lefel system ffeiliau neu’n defnyddio pg_basebackup heb ffrydio’r WALs (-X stream), rhaid i chi sicrhau bod y ffeiliau WAL a gynhyrchir rhwng dechrau a diwedd y copi wrth gefn yn cael eu harchifo’n llwyddiannus.

Os yw’ch archifydd yn llusgo neu’n methu, ac os collir y ffeiliau WAL penodol hynny, ni ellir dod â’r copi wrth gefn sylfaenol i gyflwr cyson.

Y Risg: Copïau wrth gefn sylfaenol wedi’u llygru neu na ellir eu hadfer.

Y Lliniaru: Defnyddiwch pg_basebackup -X stream i gynnwys y ffeiliau WAL angenrheidiol o fewn y llwyth tâl copi wrth gefn ei hun, neu defnyddiwch atebion copi wrth gefn menter sy’n rheoli’r ddibyniaeth rhwng copïau wrth gefn sylfaenol a segmentau WAL yn awtomatig.

Perygl 4: Dryswch Llinell Amser a Senarios Ymennydd Hollt

Pan gaiff gweinydd wrth gefn ei ddyrchafu i fod yn brif weinydd, mae PostgreSQL yn cynyddu’r “ID Llinell Amser” (rhan gyntaf enw ffeil WAL, e.e., 0000000200000001000000A4). Mae hyn yn atal y prif weinydd newydd rhag trosysgrifennu hanes WAL y prif weinydd hen.

Fodd bynnag, os caiff y prif weinydd hen ei gychwyn ar ddamwain heb gael ei ffensio’n iawn (senario ymennydd hollt), gall geisio gwthio ffeiliau WAL i’r un lleoliad archifo gan ddefnyddio’r llinell amser hen. Os yw’ch archive_command yn trosysgrifennu ffeiliau yn ddall, gallech lygru eich ystorfa archifo.

Y Risg: Ffeiliau WAL wedi’u trosysgrifennu, archifau wedi’u llygru, a chronfeydd data na ellir eu hadfer.

Y Lliniaru: Rhaid i’ch archive_command byth drosysgrifennu ffeil sy’n bodoli eisoes. Sylwch yn y ffurfweddiad sylfaenol yn gynharach, fe wnaethom ddefnyddio test ! -f /mnt/nfs/archive/%f i fethu’n benodol os yw’r ffeil yn bodoli eisoes.

Lliniaru Risgiau Colli Data: Arferion Gorau Cynhyrchu

I gryfhau eich strategaeth archifo PostgreSQL, gweithredwch yr arferion gorau canlynol.

1. Monitro’r Broses Archifydd yn Frodorol

Mae PostgreSQL yn darparu barn adeiledig, pg_stat_archiver, sy’n olrhain llwyddiant a methiant eich proses archifo. Dylech integreiddio’r farn hon i’ch stac arsylwi (e.e., Prometheus, Datadog, neu Zabbix).

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

Trothwyon rhybuddio i’w ffurfweddu:
* Rhybuddio os yw failed_count yn cynyddu.
* Rhybuddio os yw’r gwahaniaeth amser rhwng now() a last_archived_time yn fwy na’ch trothwy RPO (e.e., 15 munud), gan gofio y gall cronfeydd data traffig isel gael oedi’n naturiol oni bai bod archive_timeout wedi’i osod.

2. Defnyddio archive_timeout

Mewn cronfeydd data â chyfaint ysgrifennu isel, gall ffeil WAL 16MB gymryd oriau i lenwi. Tan iddo lenwi, nid yw’n cael ei archifo. Os bydd y gweinydd yn chwalu a’r ddisg leol yn cael ei cholli, rydych chi’n colli oriau o drafodion.

Mae gosod archive_timeout = 600 (10 munud) yn gorfodi PostgreSQL i newid i ffeil WAL newydd ac archifo’r un cyfredol, hyd yn oed os nad yw’n llawn. Mae hyn yn gwarantu nad yw’ch RPO yn fwy na 10 munud, ar gost defnydd storio ychydig yn uwch oherwydd ffeiliau WAL sydd wedi’u llenwi’n rhannol.

3. Trosglwyddo i archive_library (PostgreSQL 15+)

Yn hanesyddol, roedd archive_command yn silio proses gragen newydd ar gyfer pob ffeil WAL unigol. Mewn amgylcheddau trwybwn uchel sy’n cynhyrchu cannoedd o ffeiliau WAL y funud, mae gorbenion silio prosesau cragen yn dod yn dagfa berfformiad.

Cyflwynodd PostgreSQL 15 y paramedr archive_library, sy’n caniatáu i archifo WAL gael ei drin gan fodiwlau C wedi’u llwytho’n ddeinamig. Mae hyn yn dileu’r gorbenion silio-cragen ac yn darparu mecanwaith archifo llawer mwy cadarn a pherfformiad uchel. Os ydych chi ar PostgreSQL 15 neu uwch, edrychwch am offer copi wrth gefn sy’n cefnogi modiwlau archifo personol.

4. Profi Adferiad Pwynt-mewn-Amser yn Rheolaidd

Nid yw copi wrth gefn heb ei brofi yn gopi wrth gefn; dymuniad ydyw. Yr unig ffordd i wirio bod eich archifo WAL yn gweithredu’n gywir, bod eich cadwyn WAL yn ddi-dor, a bod eich copïau wrth gefn sylfaenol yn gyson, yw perfformio profion PITR awtomataidd, arferol.

Cychwynnwch enghraifft dros dro, adferwch y copi wrth gefn sylfaenol, ffurfweddwch restore_command i dynnu o’ch archif, ac adferwch i stamp amser penodol. Gwiriwch fod y gronfa ddata yn cyrraedd cyflwr cyson ac yn agor ar gyfer cysylltiadau.

Copi Wrth Gefn ac Adferiad Menter gyda CloudSave

Gall rheoli sgriptiau cragen personol ar gyfer archive_command, trin dad-ddyblygu WAL, a sicrhau storfa ddiogel, oddi ar y safle ar gyfer cofnodion trafodion ddod yn faich gweithredol i dimau TG yn gyflym.

Dyma lle mae CloudSave yn darparu gwerth sylweddol ar gyfer amgylcheddau PostgreSQL menter. Mae CloudSave yn integreiddio’n uniongyrchol ag APIs copi wrth gefn ac archifo WAL brodorol PostgreSQL i ddileu’r peryglon llaw a drafodwyd uchod.

Yn lle ysgrifennu sgriptiau bash brau, mae CloudSave yn darparu integreiddiad cadarn, seiliedig ar asiant neu heb asiant sydd:
* Yn Gwarantu Cyflwyno: Yn disodli gorchmynion cragen safonol gyda throsglwyddiadau wedi’u dilysu gan siecswm i storfa ddiogel oddi ar y safle neu yn y cwmwl.
* Yn Atal Chwydd WAL: Yn monitro’r cyfeiriadur pg_wal yn weithredol ac yn rhybuddio gweinyddwyr ymhell cyn i ddisbyddu rhaniad ddigwydd.
* Yn Awtomeiddio PITR: Yn symleiddio Adferiad Pwynt-mewn-Amser trwy ryngwyneb greddfol. Rydych chi’n dewis yr union funud rydych chi am adfer iddo, ac mae CloudSave yn adalw’r copi wrth gefn sylfaenol cywir yn awtomatig ac yn ffrydio’r union ddilyniant o ffeiliau WAL sydd eu hangen i gyrraedd y cyflwr hwnnw.
* Yn Trin Llinellau Amser: Yn rheoli hanesion llinell amser PostgreSQL yn ddeallus, gan sicrhau nad yw methiannau a senarios ymennydd hollt yn llygru eich ystorfa copi wrth gefn.

Trwy ddadlwytho’r gwaith trwm o reoli WAL i CloudSave, gall DBAs ganolbwyntio ar optimeiddio ymholiadau a pherfformiad cronfa ddata, gan wybod bod eu SLAs RPO ac RTO wedi’u diogelu gan blatfform graddfa menter.

Casgliad

Archifo WAL PostgreSQL yw asgwrn cefn adferiad ar ôl trychineb cronfa ddata. Er bod y cysyniad o gopïo ffeil o un cyfeiriadur i’r llall yn ymddangos yn syml, mae’r achosion ymylol—methiannau tawel, disbyddu disg, a dargyfeirio llinell amser—yn peri risgiau difrifol i gyfanrwydd data.

Trwy ddeall pensaernïaeth pg_wal, osgoi ffurfweddiadau archive_command dinistriol yn llym, monitro pg_stat_archiver, a defnyddio platfformau copi wrth gefn menter fel CloudSave, gallwch adeiladu seilwaith PostgreSQL gwydn sy’n gallu goroesi methiannau caledwedd, camgymeriadau dynol, a thoriadau trychinebus heb golli un trafodiad wedi’i ymrwymo.

Darganfyddwch beryglon cyffredin archifo WAL PostgreSQL sy’n arwain at golli data. Dysgwch arferion gorau DBA arbenigol, awgrymiadau ffurfweddu, a sut i sicrhau Adferiad Pwynt-mewn-Amser (PITR) dibynadwy ar gyfer cronfeydd data menter.