Skip to content

Latest commit

 

History

History
125 lines (78 loc) · 6.57 KB

Restoring Guide Lines.md

File metadata and controls

125 lines (78 loc) · 6.57 KB

Za uspešno restavriranje incrementalnega MongoDB backupa je potrebni naslednji 6 večjih korakov:

  1. Obnova celotne baze iz Google Cloud disk-snapshota
  2. Identifikacija zadnjega timestampa pred odpovedjo – Poišči timestamp v local.oplog.rs, ki je najbližji času odpovedi.
  3. Obnova incrementalnih backupov v vmesno tabelo – Incrementalni backupi se restavrirajo v vmesno bazo local_restore.oplog.rs. Ta vmesna baza je namenjena pripravi podatkov za nadaljnji proces. Po restavriranju so v tej tabeli shranjeni tako potrebni kot tudi podvojeni zapisi (tisti, ki se že nahajajo v local.oplog.rs). Namen vmesne baze je, da omogoči prečiščevanje podatkov, kjer se izbrišejo vsi zapisi, ki niso potrebni, in ohranijo samo manjkajoči podatki za dokončno obnovo.
  4. Odstranitev podvojenih zapisov – Iz vmesne baze local_restore.oplog.rs odstrani vse zapise, ki se prekrivajo z obstoječimi zapisi v local.oplog.rs. To zagotavlja, da v končni obnovi ne pride do konfliktov ali podvajanja podatkov.
  5. Izvoz oplog.rs iz local_restore.oplog.rs datotečni sistem
  6. Uvoz v predhodnem koraku izvoženih podatkov local.oplog.rs z uporabo --oplogReplay switcha

Bodi pozorn, da imaš v terminalski seji pravilno nastavljene spremenljivke, in da kažejo na pravo instaco:

username=
password=
mongohost=..internal
mongo_auth_options="--authenticationDatabase admin"

prav tako pa bodi POZOREN da imaš v skripti restoreOplogFromIncrementalBackup.sh prave vrednosti, ki pravtako kažejo na oravo bazo/instanco.

Inkrementalni backupi so locirani v folderu /mongo-oplog-dump/data/, ki je ločen disk na google cloud-u in je pripret na VM. Arhiviranje se izvaja na 5 minutnem intervalu. in je nastavljeno preko cron-a.


Podrobni koraki


1. Obnova celotne baze iz Google Cloud disk-snapshota

Restavriraj snapshot in ga pripni k instanci .



2. Identifikacija zadnjega timestampa pred odpovedjo

Zadnji timestemp je zapis ts v bazi local.oplog.rs . Vrednost zgleda: Timestamp({ t: 1736947493, i: 1 }). kjer je številčna vrednost 1736947493 čas od leta 1970 v milisekundah. in i iteracija znotraj timestampa.

oplog.rs je živa baza in tudi ko miruje, se v njo dogajajo dodajajo zapisi. Po restavriraju diska iz snapshota z Google Clouda in zagonu se v oplog.rs začenjo takoj dodajati novi zapisi. Zato zadnji zapis (TIMESTEMP) v bazi oplog.rs ni "pravi" zadnji zapis.

Pravi zadnji zapis TIMSTEMPA je tisti, ki je najbljižji času odpovedi ali času od katerega želiš naprej restavrirati.

Ponavadi se išče večji skok TIMESTEMPA kar nakazuje, da je bilo v vmesnem času mirovanje (recimo odpoved) in restore.

Na primer: če restavrirmo mongo iz snepshota in je od časa zadnjega backupa (snepshota) do restora minilo nekaj ur se išče poskok v timestampu nekaj ur.

na primer:
TS: 1726217553
TS: 1726217555
TS: 1726217557 (zadnji zapis TS: ki, je bil v snapshotu, pred odpovedjo) *
TS: 1726221157 (nadaljevanje oploga po restoru) *

med prvo in drugo * je izrazit poskok v času (TIMESTEMPU), in se recimo ujema z časom odpovedi. potem je 1726217557 pravi TIMESTEMP



3. Obnova incrementalnih backupov v vmesno tabelo

Kaj naredi skripta restoreOplogFromIncrementalBackup.sh? Inkrementalni backupi so v časovnem zaporedju shranjeni na disk vsak v sojo mapo. V času pisanja je časovni okvir izvoza 5 minut. Skripta v trenutnem direktoriju inkrementalnih backupov poišče vse folder-je med zapisom vnešenega/izbranega timestampa(LAST_TIMESTAMP) do zadnjega narejenega incrementalnega backupa in le te restavrira v vmesno novo bazo local_restore.oplog.rs.

!!!POMEMBNO PRED IZVAJANJE SKRIPT PREVERI, DA SO SPREMENLJIVKE MONGOHOST IN USERNAME IN PASSWORD PRAVILNI!!!

TIMESTEMP iz prejšnjega koraka (2) se nastavi v skripti restoreOplogFromIncrementalBackup.sh na način, da ga nastaviš za vrednost spremenljivke LAST_TIMESTAMP.

Skripta restoreOplogFromIncrementalBackup.sh se mora nahajati v folderju, kjer so inkamentalni backup-i V času pisanja je bilo to /mongo-oplog-dump/data/

zagon skripte:

./restoreOplogFromIncrementalBackup.sh



4. Odstranitev podvojenih zapisov

Ker smo v prejšnjem koraku izvedli restore v vmesno bazo local_restore.oplog.rs in ta lahko vsebuje tudi zapise, ki se prekrivajo z zapisi v local.oplog.rs je potrebno izbrisati podvojene zapise iz local_restore.oplog.rs.

Zakaj pridemo do podvojenih zapisov?

Full backup snapshot se lahko izvede v intervalu, ko se je zgodil tudi incremental backup. Tako je del vsebine že v backupu/restavrirani bazi in v inkrementalnem backupu. Zato je potrebno podvojene zapise v restavriranem backupu izbrisati. Pomemba podatka TIMESTEMP in IERATION.

Če v local.oplog.rs "pravi" zadnji zapis 1736947493 in ITERATION 7 potem je potrebno iz local_restore.oplog.rs izbrisati vse zapise ki so manjši ali eneki 1736947493 in 7

Ukazi za ki prikaže koliko dokumnetov bi bilo potrebno izbrisati (Uporabi prevae vrednosti _TIMESTEMP_ in _ITERATION_):

mongosh mongodb://${username}:${password}@${mongohost} ${mongo_auth_options} --quiet --eval 'printjson(db.getSiblingDB("local_restore").oplog.rs.find({ ts: { $lte: Timestamp({ t: _TIMESTEMP_, i: _ITERATION_ }) } }).count())'

Izvedi brisanje:

mongosh mongodb://${username}:${password}@${mongohost} ${mongo_auth_options} --quiet --eval 'db.getSiblingDB("local_restore").oplog.rs.deleteMany({ ts: { $lte: Timestamp({ t: _TIMESTEMP_, i: _ITERATION_ }) } })'



5. Izvoz oplog.rs iz local_restore.oplog.rs datotečni sistem

V prejšnjem koraku smo pripravili natančno manjkajoči del oploga.rs. Zdaj ga moramo restavrirati nazaj v bazo local.oplog.rs.

Spodnji ukaz nam bo izvozil local_restore.oplog.rs v folder restore_data_from_specific_iteration_on/, ki ga bomo kasneje restavrirali v bazo local.oplog.rs.

Ukaz: sudo mongodump mongodb://${username}:${password}@${mongohost} ${mongo_auth_options} --db local_restore --collection oplog.rs --out restore_data_from_specific_iteration_on/

Ko so podatki izvoženi preimenujemo folder local_restore v local

sudo mv restore_data_from_specific_iteration_on/local_restore restore_data_from_specific_iteration_on/local



6. Uvoz v predhodnem koraku izvoženih podatkov local.oplog.rs z uporabo --oplogReplay switcha

Izvoženi podatki v mapi restore_data_from_specific_iteration_on/local so pripravljeni za uvoz v bazo local.oplog.rs

ukaz za uvoz: mongorestore mongodb://${username}:${password}@${mongohost} ${mongo_auth_options} --oplogReplay restore_data_from_specific_iteration_on/