Záloha & disaster recovery
Toto je obchodný/finančný app: databáza drží obchodné účty, kopírovať profily, prop-firm výzvy, audit reťazce, a Data Protection kľúčenka. Stratu to stratu peniaze a zlomenia regulačný/audit povinnosti. Zálohujte to a dokázať obnovenie funguje.
Ciele
| Metrika | Cieľ | Zmysel |
|---|---|---|
| RPO (max dáta strata) | ≤ 5 min | Používajte point-in-time recovery (nepretržité WAL), nie iba nočný výpisy. |
| RTO (max prestoj) | ≤ 1 h | Čas na obnovenie + re-point aplikáciu na obnovenú databázu. |
| Záloha retenčné | ≥ 35 dni | Pokrýva neskoro-objavené korupcia + mesiac audit okná. |
| Obnovenie cvičenie | mesiac | Neotestovaný zálohu nie je zálohu. |
Čo musí byť zálohovaný
- Postgres databáz — všetky app dáta (jeden logický databáz
appdb). - Data Protection kľúčenka — trvalé v databáz
(
PersistKeysToDbContext<DataContext>) a PFX-šifrované cezApp:DataProtectionCertBase64. To jazdí spolu v DB zálohu, ale chránit certifikát + Its heslo (App:DataProtectionCertPassword) sú tajomstvá uložené mimo DB — zálohujte ich v vašom tajomstvo manažér. Bez certifikát vy nemôžete dešifrovať tajomstvá (cTID hesló, Open API tokeny, uzol tajomstvo, AI kľúč) po obnovenie.
Spravovaný Postgres (odporúčaný)
Oba cloud IaC cesty zriaďujú spravovaný Postgres s vstavaným PITR — povoliť + overiť retenčné:
- Azure (
deploy/azure/main.bicep, Flexible Server): nastaviťbackup.backupRetentionDays(≥ 35) ageoRedundantBackup, kde compliance vyžaduje. Obnovenie s Point-in-time restore na nový server, potom aktualizácia appappdbconnection string. - AWS (
deploy/aws, RDS Postgres, Terraform): nastaviťbackup_retention_period(≥ 35) abackup_window; udržiavať automatizovaný zálohy + voliteľný cross-region kópie. Obnovenie s RestoreDBInstanceToPointInTime, potom repoint aplikáciu.
Spravovaný PITR dáva ≤ 5 min RPO bez app zmeny — aplikácia iba potreby nový connection string (a existujúce opakujú vykonávanie stratégia, vidieť scaling.md, toleruje cutover blip).
Self-hosted Postgres
- Nepretržité archiving (PITR): povoliť WAL archiving (
archive_mode=on,archive_commandna objekt úložisko) + periodickýpg_basebackup. Obnovenie = obnovenie základný zálohu + replay WAL na cieľ čas. Toto je, čo sa stretáva RPO cieľ. - Logické výpisy (sekundárny): nočný
pg_dump -Fc appdbna off-box úložisko na prenosnosť / čiastočný obnov. Nie dosť samotný na RPO cieľ. - Šifrujte zálohy v pokoji; úložisko mimo databáz hostiteľ.
Obnovenie cvičenie (spustiť mesiac)
- Obnovenie najnovšia zálohu (PITR na "teraz − 10 min") do a scratch databáz, nie výroby.
- Bod throwaway aplikáciu inštancia (alebo psql sedenie) na to.
- Overiť schéma:
dotnet ef migrations listukazuje žádny čakajúci migrácie, aplikácia začína a osáva/health-ready. - Overiť audit reťazec je intaktný a neprasknutý cez
IAuditTrailVerifier(tamper-evidentAuditChainInterceptorreťazec) — zlomený reťazec po obnovenie znamená korupcia alebo tampering. - Potvrdiť tajomstvo dešifrovanie funguje (napr. Open API autorizácia dešifruje) — dokazuje Data Protection certifikát + heslo boli obnovené správne.
- Záznam cvičenie výsledok (čas prevzatý vs RTO) a zničiť scratch databázu.
Automatizovať kroky 1–4 v CI, kde prostredie umožňuje (obnovenie osemené zálohu do Testcontainer,
spustiť dotnet ef migrations list + audit-chain overiť) takže zlomený-zálohu regressie je chytený
pred vami potreba to.
Po reálny obnovenie
- Obnovenie DB (PITR na len pred incident).
- Zabezpečiť Data Protection certifikát + heslo sú rovnaký než pred incident.
- Repoint aplikácia
appdbconnection string; roll repliky. - Startup beží migrácie pod poradný zámka (vidieť scaling.md) — bezpečný s N repliky.
- Kopírovať/prop-firm supervisorov reclaim ich leases a resync z makléř (cTrader je zdroj pravdy), takže otvorené pozície reconverge automaticky — nič je dôveryhodný z zastaraný miestny stav.
- Overiť audit reťazec + spot-kontrola nedávny obchodný dáta.