Varnostno kopiranje in okrevanje po nesreči
To je trgovalna/finančna aplikacija: zbirka podatkov hrani trgovalne račune, profile kopiranja, izzive prop firm, verige revizij in Data Protection ključ obroč. Izguba pomeni izgubo denarja in prelom regulatornih/revizijskih obveznosti. Varnostno kopirajte jo in dokazite, da obnovitev deluje.
Cilji
| Metrika | Cilj | Pomen |
|---|---|---|
| RPO (max izguba podatkov) | ≤ 5 min | Uporabite točkovno-časovno okrevanje (continuous WAL), ne samo nočnih izvlečkov. |
| RTO (max downtime) | ≤ 1 h | Čas za obnovitev + ponovno usmeritev aplikacije na obnovljeno zbirko podatkov. |
| Hranjenje varnostnih kopij | ≥ 35 dni | Pokriva pozno odkrita popravljanja + mesečna revizijska okna. |
| Test obnovitve | mesečno | Nevarnostna varnostna kopia ni varnostna kopia. |
Kaj je treba varnostno kopirati
- Postgres zbirka podatkov — vsi app podatki (ena logična zbirka
appdb). - Data Protection ključ obroč — vztrajan v zbirki podatkov
(
PersistKeysToDbContext<DataContext>) in PFX-šifrirana prekApp:DataProtectionCertBase64. Gre z varnostno kopij zbirke podatkov, vendar cert za zaščito + njegovo geslo (App:DataProtectionCertPassword) so skrivnosti shranjene zunaj zbirke podatkov — varnostno kopirajte jih v upravljalcu skrivnosti. Brez certifikata ne morete dešifrirati skrivnosti (cTID gesla, Open API žetoni, skrivnosti vozlišč, AI ključ) po obnovitvi.
Upravljana Postgres (priporočeno)
Obe obliki IaC poti določata upravljano Postgres z vgrajeno PITR — omogočite in preverite hranjenje:
- Azure (
deploy/azure/main.bicep, Flexible Server): nastavitebackup.backupRetentionDays(≥ 35) ingeoRedundantBackupkjer skladnost zahteva. Obnovite z Point-in-time restore na nov strežnik, nato posodobite zbirka podatkov app connection string. - AWS (
deploy/aws, RDS Postgres, Terraform): nastavitebackup_retention_period(≥ 35) inbackup_window; ohranite avtomatizirane varnostne kopije + izbirno cross-region kopijo. Obnovite z RestoreDBInstanceToPointInTime, nato znova usmeritev app.
Upravljana PITR daje ≤ 5 min RPO brez sprememb aplikacije — aplikacija samo potrebuje nov connection string (in obstoječa strategija ponovnih poskusov izvajanja, glej scaling.md, tolerira cutover preglasitev).
Self-hosted Postgres
- Continuous archiving (PITR): omogočite WAL arhiviranje (
archive_mode=on,archive_commandv objektno shrambo) + periodičenpg_basebackup. Obnovitev = obnovitev osnove + replay WAL do ciljnega časa. To je kar zadene RPO cilj. - Logicni izvozi (sekundarni): nočni
pg_dump -Fc appdbv off-box shrambo za prenosljivost / delne obnovitve. Samo ni dovolj za RPO cilj. - Šifrirajte varnostne kopije pri miru; shranjujte izven gostitelja zbirke podatkov.
Test obnovitve (zaženite mesečno)
- Obnovite zadnjo varnostno kopijo (PITR v "zdaj − 10 min") v začasno zbirko podatkov, ne produkcijsko.
- Usmeritev app instanco za enkraten (ali psql sejo) nanjo.
- Preverite shemo:
dotnet ef migrations listkaže brez čakajočih migracij, app se zažene in postane/healthpripravljen. - Preverite verigo revizij je nedotaknjena in neprekinjena prek
IAuditTrailVerifier(verižicaAuditChainInterceptor) — zlomljena veriga po obnovitvi pomeni okvaro ali manipulacijo. - Potrdite dešifriranje skrivnosti deluje (npr. Open API avtorizacija dešifrirana) — dokazuje sta bili Data Protection cert + geslo pravilno obnovljena.
- Zabeležite rezultat testa (porabljen čas proti RTO) in uničite začasno zbirko podatkov.
Avtomatizirajte korake 1–4 v CI kjer okolje dovoljuje (obnovite sejano varnostno kopijo v Testcontainer,
zaženite dotnet ef migrations list + verifikacija verige revizij) tako da se regresija slabe-varnostne-kopije
ujame preden jo potrebujete.
Po realni obnovitvi
- Obnovite zbirko podatkov (PITR v tik pred incidentom).
- Poskrbite sta Data Protection cert + geslo enaka kot pred incidentom.
- Znova usmeritev app
appdbconnection string; zavrtite replike. - Startup teče migracije pod svetovalnim zaklepom (glej scaling.md) — varno z N replikami.
- Copy/prop-firm supervisorji pridobijo nazaj svoje lease in resync iz brokerja (cTrader je vir resnice), torej odprte pozicije konvergirajo avtomatsko — nič se ne zaupa iz zastarele lokalne države.
- Preverite verigo revizij + naključno preverite nedavne trgovalne podatke.