8 modulis · 8.1
Atsarginių kopijų planas Jūsų serveriui
8 modulis: Atsarginės kopijos ir stebėsena · Skaitymo laikas: 11 min.
Mokymosi tikslas: Po šios pamokos galėsite sudaryti atsarginių kopijų planą savo serveriui: ką saugote, kur, kaip dažnai ir kiek laiko, ir kaip įsitikinti, kad atkūrimas veikia.
Pagrindinės sąvokos: 3-2-1 taisyklė, momentinė kopija (snapshot), paslaugų teikėjo atsarginė kopija, nuosava atsarginė kopija už teikėjo ribų, RPO, RTO, duomenų bazės iškrova (mariadb-dump, pg_dump), konfigūracija kataloge /etc, Docker tomai (volumes), šifravimas, išpirkos reikalaujanti programa (ransomware), append-only, atkūrimo bandymas
Kodėl reikia plano, o ne "juk atsarginė kopija yra"?
Beveik kiekvienas, praradęs serverį, manė, kad atsarginė kopija yra. Tada paaiškėja, kad joje yra tik operacinė sistema, o ne duomenų bazė, arba ji laikoma tame pačiame serveryje, kurio nebėra, arba ją užšifravo ta pati išpirkos reikalaujanti programa, arba niekas nežino slaptažodžio. Atsarginė kopija ko nors verta tik tada, kai ją galima atkurti. Todėl pradedama nuo plano, o baigiama bandymu.
Planas atsako į penkis klausimus:
- Ką turi būti įmanoma atkurti?
- Kiek duomenų galite prarasti? (RPO)
- Kaip greitai viskas vėl turi veikti? (RTO)
- Kur laikomos kopijos ir kiek jų yra?
- Kaip žinote, kad tai veikia?
Ką turi būti įmanoma atkurti?
Serveris susideda iš sluoksnių. Ne kiekvienam sluoksniui reikia atsarginės kopijos:
| Sluoksnis | Pavyzdys | Atsarginė kopija? |
|---|---|---|
| Operacinė sistema ir paketai | Debian, nginx, PHP | Nebūtinai: galima įdiegti iš naujo. Tačiau verta turėti sąrašą: dpkg --get-selections |
| Konfigūracija | /etc (nginx, SSH, užkarda, systemd vienetai), Jūsų compose failai | Taip, maža ir nepakeičiama |
| Programos ir svetainės | /var/www, /opt/<app>, /srv | Taip, nebent jos gaunamos iš Git |
| Duomenys | duomenų bazės, įkelti failai, Docker tomai (/var/lib/docker/volumes) | Taip, svarbiausia |
| Paslaptys | slaptažodžiai, API raktai, pačios atsarginės kopijos raktas | Taip, bet atskirai ir užšifruota (žr. toliau) |
| Žurnalai, podėliai, laikinieji failai | /var/log, /var/cache, /tmp | Paprastai ne |
Ypač atkreipkite dėmesį į duomenų bazes. Veikianti duomenų bazė nuolat rašo. Jei kopijuosite veikiančios MariaDB ar PostgreSQL failus, galite gauti sugadintą kopiją. Todėl pirmiausia padarykite iškrovą (dump): nuoseklią momentinę būseną faile, kurią vėliau įtrauksite į atsarginę kopiją.
root@web1:~# mariadb-dump --single-transaction --all-databases | gzip > /var/backups/db/alles-$(date +%F).sql.gz
root@web1:~# sudo -u postgres pg_dumpall | gzip > /var/backups/db/pg-$(date +%F).sql.gz(mariadb-dump anksčiau vadinosi mysqldump; ši komanda dažniausiai vis dar veikia.) Jei duomenų bazė veikia konteineryje, tą patį darote su docker compose exec (pamoka 9.4).
RPO ir RTO: kiek galite prarasti?
Dvi profesinės praktikos sąvokos padeda priimti sprendimus:
- RPO (recovery point objective): kiek daugiausia laiko duomenų galite prarasti? Kasdienė atsarginė kopija 03:00 reiškia: jei serveris sugenda 22:00, prarandate beveik parą. Internetinei parduotuvei su užsakymais to per daug; tinklaraščiui, kuris keičiasi kartą per savaitę, visiškai tinka.
- RTO (recovery time objective): kiek laiko gali užtrukti, kol viskas vėl veiks? Visą paslaugų teikėjo atsarginę kopiją galima atkurti per kelias minutes; naujo serverio sukūrimas ir viso turinio atkūrimas rankiniu būdu gali užtrukti kelias valandas.
Užsirašykite juos savo serveriui. Jie lemia, kaip dažnai darote atsarginę kopiją ir kaip ją saugote.
Momentinė kopija, teikėjo atsarginė kopija, nuosava atsarginė kopija
VPS paprastai turi trijų rūšių apsaugos tinklą. Jie panašūs, bet apsaugo nuo skirtingų dalykų.
1. Momentinė kopija (snapshot). Viso virtualaus disko momentinė būsena, sukurta Jūsų paslaugų teikėjo valdymo skydelyje. Greitai sukuriama, greitai atkuriama. Idealiai tinka prieš pat atnaujinimą (pamoka 4.3). Tačiau daugumos teikėjų momentinė kopija laikoma toje pačioje saugykloje kaip ir Jūsų serveris. Jei ta saugykla sugenda arba prarandate paskyrą, dingsta ir momentinė kopija. Be to, momentinės kopijos ilgai nelaikoma: ji auga kartu su visais vėlesniais pakeitimais. Momentinė kopija nėra atsarginė kopija.
2. Paslaugų teikėjo atsarginė kopija. Daugelis teikėjų (kartais kaip papildoma parinktis) kasdien automatiškai daro viso Jūsų serverio kopiją kitoje saugykloje. Pavyzdžiui, WebOké daro kasdienę viso VPS atsarginę kopiją, kuri saugoma septynias dienas; kitų teikėjų sistema panaši, tik su savais terminais. Tai geras antrasis sluoksnis nuo sugedusios aparatinės įrangos ir nuo Jūsų pačių vakarykščių klaidų. Tačiau tai vis dar viena šalis: Jūsų paskyra, Jūsų mokėjimas, jų gedimas. Be to, atkuriama dažniausiai iš karto visas serveris.
3. Jūsų nuosava atsarginė kopija už teikėjo ribų. Jūsų duomenų kopija pas kitą šalį arba kitoje vietoje, kurią darote ir tvarkote Jūs patys (pamoka 8.2). Tai sluoksnis, kuris lieka, kai visa kita sugenda.
3-2-1 taisyklė
Įprasta nykščio taisyklė:
- 3 Jūsų duomenų kopijos (originalas ir dvi atsarginės kopijos);
- 2 skirtingų rūšių saugyklose ar sistemose;
- iš kurių 1 kitoje vietoje.
VPS atveju tai gali būti: duomenys serveryje, kasdienė teikėjo atsarginė kopija ir užšifruota nuosava atsarginė kopija su restic į kitos šalies saugyklą. Šiuolaikinis papildymas: bent vienos kopijos neturi galėti ištrinti tas, kas perima serverio kontrolę (neprisijungusi kopija arba append-only, pamoka 8.2). Išpirkos reikalaujanti programa serveryje aktyviai ieško atsarginių kopijų, kad jas taip pat užšifruotų arba ištrintų. Atsarginė kopija, kurią pats serveris gali ištrinti, nuo to neapsaugo.
Šifravimas ir atsarginės kopijos slaptažodis
Atsarginė kopija pas kitą šalį turi būti užšifruota: joje yra klientų duomenys, slaptažodžiai ir raktai. restic (pamoka 8.2) šifruoja pagal numatytuosius nustatymus. Tačiau taip atsiranda nauja rizika: Jūsų atsarginės kopijos slaptažodis. Jei jį pamiršite ar prarasite, atsarginė kopija bus nenaudojama. Tas pats nutiks, jei jis laikomas tik serveryje, kurį praradote.
Todėl slaptažodį laikykite ir už serverio ribų: slaptažodžių tvarkyklėje ir, jei norite, popieriuje seife. Tas pats galioja saugyklos, kurioje laikoma atsarginė kopija, prisijungimo duomenims.
Atkūrimo bandymas
Svarbiausia plano dalis. Atkūrimo bandymas reiškia: Jūs iš tikrųjų atkuriate atsarginę kopiją ten, kur ji nieko nesugadins, ir patikrinate, ar rezultatas veikia.
- Mažai ir dažnai: atkurkite vieną failą ar vieną katalogą į
/tmp/terugir palyginkite (diff). Pavyzdžiui, kas mėnesį. - Daug ir retkarčiais: iš atsarginės kopijos sukurkite visiškai naują bandomąjį serverį, importuokite duomenų bazę, paleiskite svetainę. Pavyzdžiui, kartą per metus arba po kiekvieno didelio pakeitimo. Tai kartu ir pratybos tam atvejui, kai iš tikrųjų kas nors nutiks (pamoka 10.3).
Užsirašykite, kiek laiko tai užtruko: tai ir yra Jūsų tikrasis RTO.
Saugojimo terminai
Saugokite ne tik paskutinę atsarginę kopiją. Jei tik po dviejų savaičių pastebėsite, kad failas sugadintas ar ištrintas, Jums prireiks prieš tris savaites darytos kopijos. Įprasta schema: septynios kasdienės, keturios savaitinės ir šešios mėnesinės versijos. restic tai sutvarko su forget (pamoka 8.2). Nepamirškite ir BDAR: asmens duomenų nesaugokite ilgiau nei būtina, net ir atsarginėse kopijose. Užfiksuokite savo saugojimo terminus.
Praktikoje
Naudokite teikėjo momentinę kopiją prieš pat rizikingus pakeitimus ir po to ją ištrinkite; palikite įjungtą kasdienę teikėjo atsarginę kopiją, jei ji yra; ir be to darykite nuosavą užšifruotą duomenų ir konfigūracijos atsarginę kopiją pas kitą šalį. WebOké VPS lange tai vadinama Snapshots ir Backups; kitų teikėjų pavadinimai ir terminai skiriasi, bet principas tas pats. Prieglobos planas arba valdoma paslauga dažnai turi kitokias sąlygas: pasitikrinkite, kas numatyta Jūsų atveju.
Santrauka
- Atsarginė kopija ko nors verta tik tada, kai atkūrimas veikia; pradėkite nuo plano ir baikite bandymu.
- Pirmiausia darykite duomenų ir konfigūracijos atsargines kopijas: duomenų bazes kaip iškrovą,
/etc, svetaines, Docker tomus, compose failus. - Nustatykite RPO (kiek galite prarasti) ir RTO (kaip greitai viskas turi veikti).
- Momentinė kopija (ta pati saugykla, trumpam), teikėjo atsarginė kopija (kita saugykla, ta pati šalis) ir nuosava atsarginė kopija už teikėjo ribų yra trys skirtingi sluoksniai; laikykitės 3-2-1 taisyklės ir turėkite bent vieną kopiją, kurios pats serveris negali ištrinti.
- Šifruokite, laikykite atsarginės kopijos slaptažodį už serverio ribų ir bandykite atkūrimą: mažai ir dažnai, daug ir retkarčiais.
Testas (quiz)
Užduotis
Užduotis O8.1: Jūsų atsarginių kopijų planas. Sudarykite savo serverio atsarginių kopijų planą viename puslapyje: ką turi būti įmanoma atkurti (pagal sluoksnius), Jūsų RPO ir RTO, kokias kopijas turite (momentinė, teikėjo, nuosava) ir kur, Jūsų saugojimo terminai, kur laikomas atsarginės kopijos slaptažodis ir kada darote atkūrimo bandymą. Užpildykite formą; pateikę pamatysite pavyzdinį planą, su kuriuo galėsite palyginti savąjį.
Užduotis O8.1: Jūsų atsarginių kopijų planas
Šią užduotį atliekate patys; niekas jos netikrina. Pažymėkite, ką atlikote, ir pažymėkite užduotį kaip atliktą.
Duomenų bazes saugokite kaip iškeltinę (dump), o ne kaip atskirus veikiančios duomenų bazės failus. Kasdien šifruotai (restic) pas kitą teikėją; momentinę kopiją (snapshot) darykite tik prieš ir po pakeitimų. 7 dienos, 4 savaitės ir 6 mėnesių versijos yra gera pradžia. Kas mėnesį nedidelis atkūrimas, kartą per metus visiškas atstatymas. Niekada neįrašykite tikro slaptažodžio.
Jūsų pažymėti varneliai ir pastabos lieka tik šioje naršyklėje; niekur jų nesiunčiame. Jei esate prisijungę, skiltyje Mano kursai išsaugome tik tai, kad užduotį atlikote.
Skaitykite daugiau
- VPS momentinės ir atsarginės kopijos
- Atsarginių kopijų strategija: 3-2-1 taisyklė Jūsų įmonei
- Kurse „Saugiai internete“: pamokos apie 3-2-1 taisyklę ir atsargines kopijas, kurios atlaiko išpirkos reikalaujančias programas.
- MariaDB, mariadb-dump: https://mariadb.com/docs/server/clients-and-utilities/backup-restore-and-import-clients/mariadb-dump
- PostgreSQL, Backup and Restore (SQL Dump): https://www.postgresql.org/docs/current/backup-dump.html
