Palvelimen varmuuskopiointi ja palautustesti
Kun otan palvelimen hoitooni, kysyn ensimmäiseksi: ”Onko varmuuskopiot olemassa?” Vastaus on lähes aina ”on”. Seuraavaan kysymykseen — ”Milloin viimeksi palautitte niistä jotain?” — vastataan yleensä hiljaisuudella.
Juuri tässä varmuuskopiointi tavallisesti on rikki. Ei siksi, ettei kopioita tehtäisi, vaan siksi, ettei kukaan tiedä, saako niistä oikeasti mitään takaisin.
Lyhyt vastaus: varmuuskopio on olemassa vasta, kun siitä on onnistuneesti palautettu jotain. Pidä vähintään kolme kopiota kahdella eri tallennusvälineellä, joista yksi on poissa palvelimelta ja hyökkääjän ulottumattomissa. Varmuuskopioi tietokanta tietokannan omalla työkalulla, ei tiedostokopiona. Ja testaa palautusta säännöllisesti — ei vasta sitten, kun jotain on jo kadonnut.
Miksi ”varmuuskopiot on” ei usein pidä paikkaansa
Tyypillisiä tilanteita:
- Varmuuskopioskripti lakkasi toimimasta kuukausia sitten — esimerkiksi salasanan vaihdon tai täyttyneen levyn jälkeen — eikä kukaan huomannut, koska virheilmoitus ei mennyt kenellekään.
- Tietokanta kopioitiin tiedostoina sen ollessa käynnissä. Kopio on olemassa, mutta se on otettu kesken kirjoitusta, eikä tietokanta välttämättä käynnisty siitä.
- Varmuuskopio on samalla palvelimella. Kun levy hajoaa tai kiristyshaittaohjelma salaa palvelimen, kopio katoaa alkuperäisen mukana.
- Kopio on olemassa, mutta palautusohjetta ei ole. Palautus kestää tunnin sijaan kaksi päivää, koska kukaan ei muista, mikä versio, missä kansiossa ja missä järjestyksessä.
3-2-1-sääntö selkokielellä
- 3 kopiota datasta (alkuperäinen + kaksi varmuuskopiota),
- 2 eri tallennusvälineellä tai järjestelmässä,
- 1 kopio muualla — toisessa konesalissa tai toisella palveluntarjoajalla.
Nykyään lisään yhden vaatimuksen: vähintään yhden kopion on oltava muuttumaton tai muuten suojattu hyökkääjältä. Kiristyshaittaohjelma etsii tarkoituksella myös varmuuskopiot. Jos palvelimella on varmuuskopiotallennukseen sekä kirjoitus- että poistooikeus, hyökkääjä voi tuhota myös kopiot. Siksi palvelin lähettää kopiot ulos, mutta ei voi itse poistaa niitä.
Mitä varmuuskopioida — ja mitä ei
Varmuuskopioi:
- Tietokannat (PostgreSQL, MySQL/MariaDB) kunnollisella vedoksella tai menetelmällä, joka antaa yhtenäisen tilan. Ei käynnissä olevan tietokannan tiedostojen sokeaa kopiota.
- Sovelluksen tiedostot, joita käyttäjät luovat: lataukset, dokumentit, kuvat.
- Asetukset: verkkopalvelimen (Nginx, Apache2) konfiguraatio, sovelluksen asetustiedostot, ajastetut tehtävät, Dockerin compose-tiedostot ja ympäristömuuttujat.
- Varmenteet ja avaimet — salattuina.
Älä tuhlaa tilaa:
- käyttöjärjestelmän tiedostoihin, jotka voi asentaa uudelleen;
- välimuisteihin ja väliaikaisiin tiedostoihin;
- Docker-levykuviin, jotka voi hakea uudelleen rekisteristä (varmuuskopioi datavolyymit, ei kontteja).
Jos palvelin on hyvin dokumentoitu, järjestelmän rakentaminen alusta on usein nopeampaa kuin koko levykuvan palauttaminen. Varmuuskopioi siis ennen kaikkea se, mitä ei voi luoda uudelleen.
Kauanko kopioita säilytetään
Yksi eilinen kopio ei auta, jos virhe syntyi viikko sitten ja on jo päätynyt jokaiseen kopioon. Tyypillinen kierto voi olla esimerkiksi: päivittäiset kopiot kahdeksi viikoksi, viikoittaiset pariksi kuukaudeksi, kuukausittaiset vuodeksi. Oikea rytmi riippuu siitä, kuinka nopeasti datasi muuttuu ja mitä kirjanpito tai sopimukset vaativat.
Varmuuskopioiden on oltava salattuja — varsinkin, jos ne ovat jonkun muun infrastruktuurissa. Salausavain on kuitenkin säilytettävä muualla kuin palvelimella: jos avain katoaa palvelimen mukana, salattu kopio on hyödytön.
Palautustesti: kaksi kysymystä, joihin tarvitaan vastaus
Ennen kuin mitään tapahtuu, kannattaa sopia kahdesta luvusta:
- Kuinka paljon dataa saa menettää? Jos varmuuskopioit kerran vuorokaudessa, pahimmassa tapauksessa menetät kokonaisen päivän työn. Jos se on liikaa, tarvitaan tiheämpi varmuuskopiointi.
- Kuinka kauan järjestelmä saa olla alhaalla? Pitääkö palautuksen mahtua tuntiin, vai saako se kestää päivän?
Palautustesti kertoo, ovatko nämä luvut oikeasti saavutettavissa. Rutiinini on yksinkertainen:
- Valitsen satunnaisen varmuuskopion — en aina tuoreinta.
- Palautan sen erilliseen testiympäristöön, en tuotantopalvelimelle.
- Tarkistan, että tietokanta käynnistyy, sovellus aukeaa ja viimeisimmät tiedot ovat mukana.
- Mittaan, kauanko se kesti, ja kirjaan ylös kaiken, mikä ei mennyt ohjeen mukaan.
Ja yksi automaattinen suoja: varmuuskopioinnille tarvitaan hälytys, jos kopio jää tekemättä tai on epäilyttävän pieni. Hiljainen virhe on varmuuskopioinnin kallein virhe.
Varmuuskopiointi ja palautustestit kuuluvat palvelinylläpitooni — mitä muuta ylläpitosopimukseen kuuluu, kerron artikkelissa Linux-palvelimen ylläpito: mitä sopimus sisältää. Jos olet siirtymässä uudelle palvelimelle, tuore palautustesti on myös paras tarkistus ennen kuin päivität vanhan Ubuntu-palvelimen.
Usein kysytyt kysymykset
Eikö palveluntarjoajan varmuuskopio riitä?
Se on hyvä lisäkerros, mutta harvoin riittävä yksinään. Säilytysaika on usein lyhyt, palauttaa voi vain koko palvelimen kerralla, ja kopio on saman palveluntarjoajan luona. Jos ongelma on palveluntarjoajassa tai tilissä, molemmat kopiot ovat yhtä aikaa saavuttamattomissa.
Kuinka usein palautusta pitäisi testata?
Vähintään pari kertaa vuodessa ja aina isomman muutoksen jälkeen: uusi palvelin, uusi tietokantaversio, muutettu varmuuskopioskripti. Kriittisissä järjestelmissä useammin.
Onko RAID varmuuskopio?
Ei. RAID suojaa yhden levyn hajoamiselta, mutta poistettu tiedosto tai kiristyshaittaohjelman salaama data poistuu tai salautuu kaikilla levyillä kerralla.
Varmuuskopioidaanko Dockerissa toimiva sovellus eri tavalla?
Periaate on sama: varmuuskopioi data ja asetukset, ei konttia. Kontissa toimiva tietokanta varmuuskopioidaan edelleen kunnollisella tietokantavedoksella, ei volyymin raakakopiona sen ollessa käynnissä.
Onko varmuuskopiosi oikeasti tarkistettu?
Jos et tiedä varmasti, milloin palvelimesi varmuuskopiosta viimeksi palautettiin jotain, kirjoita minulle. Käyn läpi, mitä varmuuskopioidaan, minne ja kuinka kauan niitä säilytetään, ja teen ensimmäisen palautustestin yhdessä kanssasi. Lisää palvelinylläpidostani löydät sivulta Linux-palvelinten ylläpito.
