Kā veidot servera rezerves kopijas pēc 3-2-1 principa
Šī pamācība parāda, kā izveidot servera rezerves kopiju sistēmu, kas iztur reālas avārijas: mirušu disku, izspiedējvīrusu, izdzēstu datubāzi, incidentu datu centrā. Tā ir domāta ikvienam, kas uztur Linux VPS vai dedikētu serveri ar tipisku web steku, un viss zemāk aprakstītais izmanto standarta rīkus: rsync, cron, mysqldump, pg_dump. Mērķis nav tikai tas, lai kopijas būtu, mērķis ir spēt no tām atjaunoties arī spiediena apstākļos.
Ko 3-2-1 princips īsti nozīmē
Glabā 3 datu kopijas uz 2 dažādām sistēmām, un 1 kopija atrodas citā lokācijā. Dzīvie dati uz servera skaitās pirmā kopija. Otra kopija citā mapē uz tā paša diska nav rezerves kopija, tā nomirst kopā ar disku. Kopija uz atsevišķas mašīnas pasargā tevi no dzelžu atteices. Ārējā kopija pasargā no visa, kas skar visu lokāciju uzreiz: ugunsgrēka, plūdiem, uzlauzta konta, izspiedējvīrusa, kas nošifrē visu, ko serveris spēj aizsniegt.
Praktiskais minimums vienam serverim: dzīvie dati, ik nakti nosūtīta kopija uz rezerves kopiju serveri un šifrēta kopija citā fiziskā vietā vai pie cita pakalpojumu sniedzēja. Ar to 3-2-1 jau ir izpildīts bez jebkādas komerciālas programmatūras.
Ko kopēt: datus, konfigurācijas un dumpus, ne obligāti visu disku
Pilni diska attēli standarta Linux serverim reti atmaksājas. Operētājsistēmu var pārinstalēt dažās minūtēs, tāpēc kopē to, kas patiešām ir unikāls:
- Aplikāciju dati: /var/www, /home, augšupielāžu mapes.
- Konfigurācija: /etc, ieskaitot web serveri, PHP, pastu, cron uzdevumus, TLS sertifikātus un atslēgas.
- Datubāzu dumpi, ko izveido pati datubāze (nākamā sadaļa).
- Pašrakstītie skripti /usr/local/bin vai /opt un pakotņu saraksts.
Saglabā pakotņu sarakstu, lai vari ātri uzbūvēt tādu pašu vidi:
dpkg --get-selections > /var/backups/packages.txt
Bieža kļūda: kopēt /var/lib/mysql failu pa failam, kamēr datubāze darbojas. Šāda kopija ir nekonsistenta un pēc atjaunošanas bieži vispār nestartē. Datubāzes kopē ar dumpu rīkiem, nevis ar cp.
rsync uz otru lokāciju ar cron
rsync pārsūta tikai izmaiņas, tāpēc ikvakara palaišanas ir lētas pat lieliem failu kokiem. Sūti pa SSH ar atsevišķu atslēgu, kas mērķa serverī var pieslēgties tikai kā backup lietotājs. Minimāls skripts:
#!/bin/sh set -eu DEST="backup@backup1.example.net:/backups/web01" rsync -az --delete /etc/ "$DEST/etc/" rsync -az --delete /var/www/ "$DEST/www/" rsync -az /var/backups/db/ "$DEST/db/"
Karogs -a saglabā tiesības, īpašniekus un laika zīmogus, -z saspiež pārsūtīšanas laikā, un --delete padara mērķi par precīzu spoguli. Saproti, ko --delete nozīmē: ja failus uz servera izdzēš vai nošifrē, nākamā palaišana atspoguļos arī šo postījumu. Tieši tāpēc mērķim jāglabā sava vēsture (skati sadaļu par uzglabāšanu zemāk), nevis viens vienīgs spogulis.
Ieplāno palaišanu ar cron, pēc datubāzes dumpa uzdevuma:
20 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Ik pa laikam ieskaties logā vai, vēl labāk, saņem brīdinājumu pie kļūdas koda. Rezerves kopiju uzdevums, kas klusi krīt jau 3 mēnešus, ir bieža atrade incidenta izmeklēšanas laikā.
Datubāzu dumpi ar mysqldump un pg_dump
MySQL vai MariaDB ar InnoDB tabulām:
mysqldump --single-transaction --quick --routines --triggers \ --all-databases | gzip > /var/backups/db/mysql-$(date +%F).sql.gz
--single-transaction izveido konsistentu dumpu bez tabulu bloķēšanas, tāpēc aplikācija dumpa laikā turpina strādāt.
PostgreSQL gadījumā vari dumpēt visu uzreiz:
sudo -u postgres pg_dumpall --clean | gzip > /var/backups/db/pgsql-$(date +%F).sql.gz
vai vienu datubāzi custom formātā, kas ļauj selektīvi atjaunot atsevišķas tabulas:
sudo -u postgres pg_dump -Fc shopdb > /var/backups/db/shopdb-$(date +%F).dump
Palaid dumpus 15 līdz 30 minūtes pirms rsync uzdevuma, lai katrā ārējā kopijā būtu svaigs dumps.
Uzglabāšanas periods un šifrēšana ārējām kopijām
Ar vienu vakardienas kopiju nepietiek. Datu bojājumus bieži pamana pēc dienām vai nedēļām, un tad tev vajag kopiju no laika pirms bojājuma. Saprātīgs noklusējums: glabā 7 dienas, 4 nedēļu un 6 mēnešu kopijas. Uz rezerves kopiju servera vecos dumpus dzēs ar find:
find /backups/web01/db -name "*.sql.gz" -mtime +14 -delete
Viss, kas pamet tavā kontrolē esošu dzelzi, ir jāšifrē. age ir vienkāršākais mūsdienīgais variants:
age -r age1examplepublickey0000000000 -o mysql-2026-07-21.sql.gz.age mysql-2026-07-21.sql.gz
Tikpat labi der gpg ar atslēgu pāri. Privāto atslēgu glabā ārpus servera: ja uzbrucējs pārņem serveri, viņam nedrīkst līdzi tikt arī iespēja lasīt tavus ārējos arhīvus. Un vismaz vienreiz pārbaudi atšifrēšanu, jo šifrēta kopija ar pazaudētu atslēgu arī nav rezerves kopija.
Testē atjaunošanu reizi ceturksnī un pret momentuzņēmumiem izturies kā pret bonusu
Netestēta rezerves kopija ir cerība, nevis plāns. Reizi ceturksnī izdari īstu atjaunošanas treniņu: izveido tīru testa serveri, atjauno konfigurācijas un datus, ielādē datubāzes dumpu un atver aplikāciju pret testa instanci. Pārbaudi rindu skaitu galvenajās tabulās un pāris zināmus ierakstus. Nomēri, cik ilgs ir viss treniņš: šis skaitlis ir tavs reālais atjaunošanās laiks, un pirmajā reizē tas parasti ir 2 līdz 3 reizes sliktāks, nekā gaidīts.
gunzip -t mysql-2026-07-21.sql.gz gunzip -c mysql-2026-07-21.sql.gz | mysql
Pakalpojumu sniedzēja momentuzņēmumi (snapshot) ir ērti, lai atgrieztos pirms riskanta atjauninājuma, bet tie nav rezerves kopiju stratēģija. Momentuzņēmums dzīvo uz tās pašas infrastruktūras, tajā pašā lokācijā un zem tā paša konta kā pats serveris. Ja kontu uzlauž, glabātuve atsakās vai datu centrā notiek nopietns incidents, momentuzņēmums pazūd kopā ar oriģinālajiem datiem. Momentuzņēmumi neizpilda ne "2 dažādas sistēmas", ne "1 kopija citā lokācijā" daļu no 3-2-1. Izmanto tos kā papildu ērtības slāni virs īstām rezerves kopijām, nekad to vietā.
Ārējo kopiju var atrisināt lēti. Neliels VPS citā datu centrā nekā tavs galvenais serveris ir pilnīgi labs rsync mērķis ar dažiem simtiem gigabaitu vietas. Un ja gribi, lai rezerves kopiju dzelzis pieder tev, savu iekārtu vari novietot ar serveru izvietošanu mūsu Tier 3+ datu centrā Rīgā un iegūt otru lokāciju uz neatkarīgas infrastruktūras. Lai kuru mērķi izvēlies, noteikumi paliek tie paši: 3 kopijas, 2 sistēmas, 1 ārpus lokācijas un atjaunošanas treniņš katru ceturksni.
Turpini lasīt
Gatavs sākt?
Palaid dažās minūtēs vai aprunājies ar inženieri par piemērotāko risinājumu.