...

Automatizēt dublēšanu, izmantojot rsync - datu drošība administratoriem

Es automatizēju savu rsync dublējumslai izvairītos no kļūdām un nodrošinātu paredzamu atgūšanu. Ar skaidru Cron darbvietasSSH transports un inkrementālie palaide, es efektīvi aizsargāju tīmekļa serverus, datubāzes un konfigurācijas.

Centrālie punkti

  • AutomatizācijaLaikā kontrolēti darbi samazina kļūdu un pūļu daudzumu.
  • EfektivitāteDelta pārsūtīšana ietaupa joslas platumu un atmiņu.
  • DrošībaSSH, atslēgu pārvaldība un mērķi ārpus vietnes.
  • StratēģijaGFS saglabāšana un skaidri RPO/RTO mērķi.
  • PārredzamībaReģistrēšana, uzraudzība un atjaunošanas testi.

Kāpēc es automatizēju dublējumu veidošanu

Es konsekventi nodrošinu produktīvas sistēmas, jo viena kļūme var apturēt veselu projektu darbību, un es. Pieejamība vēlas garantēt. Plānotais dublējums, kas tiek veikts plkst. 02:00, aizstāj manuālu darbu, kurā ir iespējamas kļūdas, un nodrošina tīrus datu statusus. Es definēju skaidrus mērķus katram serverim: Cik liels datu zudums ir pieļaujams (RPO) un cik ātri ir jāatjauno dati (RTO). Šie mērķi ietekmē grafiku, glabāšanas mērķi un opcijas, lai es varētu droši nodrošināt darbību. Īpaši tīmekļa serveriem līdz aprēķināmam minimumam samazinu riskus, kas saistīti ar aparatūras defektiem, izpirkuma maksu vai nejaušu dzēšanu.

īsi paskaidrots rsync: Funkcionalitāte un stiprās puses

rsync tikai pārsūta izmaiņas, izmanto efektīvu Delta pārcelšana un izvairīties no nevajadzīgām kopijām. Tas ievērojami samazina izpildes laiku, tīkla slodzi un IO mērķa sistēmā. Es strādāju arhīva režīmā (-a), lai atļaujas, laiki, īpašnieki un simatiskās saites paliktu nemainīgas. Es atjauninu spoguļattēlus ar -delete, bet pievēršu uzmanību paredzētajam lietojumam un apvienoju to ar atsevišķiem direktorijiem versiju veidošanai. Es izmantoju SSH transportēšanai, tiešos ceļus vietējiem darbiem un, ja nepieciešams, pievienoju saspiešanu (-z) un joslas platuma ierobežojumu (-bwlimit).

Automatizācija ar Cron: soli pa solim

Es sāku ar vienkāršu skriptu, jo skaidrs Pamatlīnijas var paplašināt vēlāk. Vispirms es instalēju rsync, ja tā nav, un izveidoju drošu darba direktoriju žurnāliem un statusam. Tad es uzrakstu skriptu ar avotiem, mērķi un saprātīgām opcijām, tostarp izņēmumiem. Cronjob darbojas katru dienu vai ik stundu atkarībā no RPO un raksta žurnālu failus novērtēšanai un brīdināšanai. Pirms pirmās produktīvās palaišanas tiek veikta sausā palaišana (-n), kas novērš nevēlamus dzēsumus.

# instalēšana (Debian/Ubuntu)
sudo apt-get install rsync

# minimālā vietēja palaišana
rsync -a /data/www/ /backup/www/

# Attālais spogulis, izmantojot SSH ar dzēšanu
rsync -a --delete -e "ssh -i /root/.ssh/backup_key" /data/www/ backup@backuphost:/srv/backups/www/

# Cron: katru dienu plkst. 02:00.
0 2 * * * * * /usr/local/bin/rsync-backup.sh >> /var/log/rsync-backup.log 2>&1

Droša SSH dublēšanas iestatīšana

Es izmantoju SSH atslēgas ar ierobežotām tiesībām, jo Galvenā pārvaldība samazina uzbrukuma virsmu. Mērķa sistēmā es ierobežoju komandas, izmantojot autorizētos_atslēgas, un izmantoju atsevišķu dublējuma lietotāju. Fail2ban, ugunsmūra noteikumi un ierobežojošas SSH opcijas (piemēram, PasswordAuthentication no) palielina drošību. Uzglabāju resursdatora atslēgu, lai "cilvēks pa vidu" nebūtu nekādu iespēju. Ja meklējat strukturētu sākumu, varat atrast izmēģinātas un pārbaudītas idejas vietnē Automatizēt dublējumu veidošanu.

Pievilkšana, nevis piespiešana: drošības ieguvumi praksē

Ja iespējams, es atstāju Rezerves kopijas servera rullis tā vietā, lai darbinātu ražošanas serveri. Tādējādi ražošanas sistēmas paliek bez izejošajām atslēgām, un kompromitēts tīmekļa serveris nevar izdzēst ārējās dublējuma kopijas. Mērķī es ierobežoju atslēgu authorised_keys ar ierobežojošām opcijām un piespiedu komandu.

# Piemērs authorised_keys rezerves kopijas mērķa ierīcē
from="10.0.0.0.10",no-agent-forwarding,no-pty,no-port-forwarding,no-X11-forwarding,command="/usr/local/bin/rsync-serve-backups"
/home/backup/.ssh/authorised_keys

Izsauktais skripts atļauj tikai rsync servera izsaukumus un nosaka ceļa ierobežojumus. Tas ir veids, kā es sasniedzu Minimālo tiesību principsneapgrūtinot darbību.

Versiju veidošana un glabāšana ar cietajām saitēm

Vairākiem stendiem es veidoju ikdienas, iknedēļas un ikmēneša mapes ar -link-dest, jo Hardlinks Ietaupiet atmiņu un vienkāršojiet atjaunošanu. Katra paaudze attiecas uz identiskiem, nemainītiem failiem no iepriekšējās dublējumkopijas; jauni vai mainīti faili tiek fiziski saglabāti jaunajā mapē. Tas ļauj sasniegt daudzus atjaunošanas punktus ar mērenām atmiņas prasībām. Es dzēšu vecās paaudzes ar vienkāršu rotācijas skriptu, neriskējot ar datu konsekvenci. Fiksēts grafiks (piemēram, 7 dienas, 4 nedēļas, 6 mēneši) nodrošina skaidru un pārskatāmu glabāšanas plānošanu.

Kontroles resursi: Joslas platums, CPU un I/O

Es ierobežoju datu caurlaides spēju ar -bwlimit, lai Produktīvā slodze saglabājas stabils, un lietotāji nepiedzīvo nekādus zaudējumus. Es izmantoju nice un ionice, lai piešķirtu prioritāti dublēšanas procesiem. Es ieslēdzu saspiešanu (-z) lēnos tīklos un atstāju to izslēgtu ātrajos vietējos datu nesējos. Lieliem failiem izvēlos -partial, lai varētu turpināt atcelt pārsūtīšanu. Vietējiem spoguļattēliem bieži izmantoju -whole-file, jo delta algoritmam tur nav priekšrocību.

Konsistenti datu stāvokļi: momentuzņēmumi un datubāzes

Lai saglabātu konsekventu rezerves kopiju veidošanu, neskatoties uz atvērtiem failiem, es izmantoju Snapshots vai lietojumprogrammas āķi. Failu sistēmas, piemēram, LVM, ZFS vai Btrfs, nodrošina ātrus momentuzņēmumus, ko es izmantoju kā avotu rsync. Tas ļauj man loģiski iesaldēt datu stāvokli, ilgstoši nebloķējot pakalpojumus.

# piemērs: LVM momentuzņēmums kā konsekvents avots
lvcreate -L 10G -s -n data_snap /dev/vg0/data
mount /dev/vg0/data_snap /mnt/data_snap
rsync -a --delete /mnt/data_snap/www/ backup@host:/srv/backups/www/
umount /mnt/data_snap
lvremove -f /dev/vg0/data_snap

Vietnei Datu bāzes Es nodalu loģiku un failus. Es dubloju MySQL/MariaDB, izmantojot dump vai Percona/Xtra risinājumus, PostgreSQL ar pg_dump vai bāzes dublēšanu. Svarīga ir secība: vispirms izveidojiet konsekventu dump, pēc tam pārsūtiet dump ceļu, izmantojot rsync. Tas novērš puspierakstītus failus dublējumkopijā.

Tipiski kļūdu avoti un kā no tiem izvairīties

Visbiežāk sastopamais klupšanas akmens ir slīpsvītra ceļa beigās, tāpēc es pārbaudīju. Ceļa informācija dubultā: /src/ vs. /src. Es testēju izslēgšanu ar -dry-run un -itemise-changes, lai redzētu ietekmi. Es pareizi citēju šablonus ar atstarpēm un glabāju izslēgšanas failu repozitorijā. Pirms -delete pārbaudu stiprinājumus, jo neuzmontēts mērķis var izraisīt nevēlamu dzēšanu. Visbeidzot, es reģistrēju atgriešanās kodus un aktivizēju trauksmes signālus, lai kļūdas varētu redzēt nekavējoties.

Rezerves kopēšanas stratēģija: GFS un atjaunošanas mērķi

Vispirms iestatīju RPO/RTO, jo skaidrs Mērķi vadīties pēc katra lēmuma par biežumu, glabāšanas vietu un saglabāšanu. Parastā shēma ir GFS: ikdienas diferenciālā, iknedēļas pilna vai apvienota, izmantojot cietās saites, ikmēneša ilgtermiņa. Uzglabāšanas periodu ietekmē atbilstības prasības, tāpēc es nodalu īstermiņa operatīvos datus no ilgtermiņa arhīviem. Kritiski svarīgām sistēmām papildus vietējām kopijām es plānoju arī dublējumus ārpus uzņēmuma. Šāda kombinācija aizsargā pret vietnes darbības traucējumiem un nodrošina gan ātru, gan attālinātu atjaunošanu.

Cron vai systemd-timer: Uzticama plānošana

Cron ir vienkāršs un uzticams. Uzņēmējiem, kas laiku pa laikam aizmiguši vai restartējušies, es arī izmantoju systemd-timer ar atkarībām un izlaistu palaišanu. Tādējādi tiek nodrošināts, ka pēc atkārtotas palaišanas neizdodas neviena darbība un ka secība ir pareiza (piemēram, pēc tīkla atjaunošanas).

# /etc/systemd/system/rsync-backup.service
[Vienība]
Apraksts=Rsync Backup
After=network-online.target
Vēlas=network-online.target

[Service]
Tips=oneshot
ExecStart=/usr/local/bin/rsync-backup.sh
Nice=10
IOSchedulingClass=best-effort
IOSchedulingPriority=7

# /etc/systemd/system/rsync-backup.timer
[Vienība]
Apraksts=Dienas Rsync dublēšanas taimeris

[Timer]
OnCalendar=02:00
Persistent=true

[Install]
WantedBy=timers.target

Tabula: Svarīgas rsync opcijas ikdienā

Es izmantoju dažus, bet efektīvus Iespējasko dokumentēju katram darbam un versijai repozitorijā. Arhīva režīms veido pamatu un samazina konfigurācijas kļūdas. Es uzturu spoguļattēlus tīrus ar -delete, bet izmantoju to tikai ar pareizu mērķa pārbaudi. Versionēšanai es apvienoju -link-dest ar rotācijas plānu. Nākamajā tabulā parādīti svarīgākie slēdži un to izmantošana.

Iespēja Mērķis Piezīme
-a Arhivēšanas režīms Uzņemas tiesības, laikus, īpašumtiesības uz Konsekvence
-z Kompresija Noderīgs WAN, bieži tiek izlaists lokāli.
-dzēst Noņem noņemtos mantotos failus Izmantojiet tikai ar spoguļiem, pirms tam veiciet sauso braucienu
-bwlimit=KBPS Droseles joslas platums Aizsargā Produktīvas sistēmas no slodzes maksimumiem
-link-dest=DIR Versionēšana, izmantojot cietās saites Ekonomiskas paaudzes ar atsevišķām mapēm
-e "ssh ..." Droša transportēšana Atslēgas, uzņēmēja atslēgas, ierobežojoši lietotāji
-n / -dry-run Testa veikšana bez izmaiņām parāda iepriekš plānotās darbības

Testa atjaunošana: Atjaunošanas vingrinājumi

Es regulāri testēju atjaunošanu, jo dublējums bez atjaunošanas ir tikai Izskats ir. Paraugiem es atjaunoju atsevišķus failus un veselas tīmekļa vietnes sagatavošanas vidē. Datubāzes dubloju atsevišķi, izmantojot datu izgāztuves, un importēju tās izmēģinājuma režīmā, lai pārbaudītu konsekvenci. Pārbaudes summas man palīdz apstiprināt integritāti un atpazīt klusās bitu kļūdas. Pēc katra testa pielāgoju dokumentāciju, skriptus un atskaņošanas grāmatas, lai nākamais ārkārtas gadījums noritētu ātrāk.

Metāla un sistēmas rezerves kopijas: īpašas funkcijas

Sistēmas vai tukša metāla dublējumkopiju veidošanai es paplašinu rsync opcijas, lai. ACL, xattrs un cietās saites ņemt līdzi. Linux operētājsistēmā sevi ir pierādījuši -aAXH un -numeric-ids. Es izslēdzu tādas pseidofailu sistēmas kā /proc, /sys, /run, /dev/pts un atsevišķi veidoju boot un konfigurācijas failu rezerves kopijas.

# Ar sistēmu saistīta dublējuma izveide (piemērs)
rsync -aAXH --numeric-ids \
  --exclude={"/proc/*","/sys/*","/run/*","/dev/pts/*","/tmp/*"} \
  / root@backup:/srv/backups/hostA/current/

# Atjaunošana (vienkāršota, no dzīvā datu nesēja)
rsync -aAXH --numeric-ids /srv/backups/hostA/current/ /mnt/target/
chroot /mnt/target update-initramfs -u
grub-install /dev/sda && update-grub

Es plānoju vairāk laika šādiem atjaunošanas, dokumentēt secību un saglabāt bootloader soļus pie rokas. Tas ievērojami samazina stresu avārijas gadījumā.

Plesk integrācija: gudri apvienojot paneļa darba vietas

Es apvienoju Plesk uzdevumus ar rsync, lai Paneļa dublējumi un ārvietas kopijas darbojas kopā. Pēc dublēšanas āķi nekavējoties pārnes svaigas dublējuma kopijas uz ārējo krātuvi. Grafiki sakrīt ar tehniskās apkopes logiem, lai izvietošana un dublējumi netraucētu cits citam. Žurnālu rotācija panelī un mērķa sistēmā novērš žurnālu direktoriju palielināšanos. Labs sākumpunkts ir šāds Plesk labākā prakse koncentrējoties uz atkārtojamiem procesiem.

cPanel integrācija: Homedirs un datubāzes

Pēc tam es velku cPanel dublējumus uz ārējo hostu, izmantojot rsync, lai Aizsardzība ārpus uzņēmuma paliek bez papildu slodzes. Katalogu struktūra atvieglo atsevišķu kontu selektīvu atjaunošanu. Lieliem tālākpārdevēju iestatījumiem es plānoju diferenciālo darbību nakts laikā un pilnas kopijas nedēļas nogalē. Kombinācijā ar kvotām un rotāciju es nodrošinu pārredzamu datu glabāšanas prasību ievērošanu. Praktisks papildinājums ir piezīmes par cPanel rezerves kopijas stabilām ikdienas darbībām.

Mērogmaiņa un struktūra: tīra daudzu darbvietu pārvaldība

Kad vide aug, es centralizēti strukturēju avotus un izslēgtos avotus. Izmantojot -faili no Es nododu sarakstus, kurus es versiju repo. Šādā veidā es mainu ierakstus, neskarot skriptus un saglabājot konsekventas atrašanās vietas.

# faili - no piemēra
/etc/backup/www.list
/data/www/
/etc/nginx/
/var/www/html/

rsync -a --delete --files-from=/etc/backup/www.list / backup@host:/srv/backups/www/

Es izvairos no pārklāšanās, skaidri nodalot ceļu atbildību (piemēram, Webroot atsevišķi no žurnāliem). Lielu kopu gadījumā es apzināti plānoju paralēlismu - drīzāk dažas, savlaicīgi veiktas darbības, nevis desmitiem konkurējošu procesu.

Darbības noturība: bloķēšana, atkārtojumi, laika ierobežojumi.

Lai izvairītos no pārklāšanās, es izmantoju . vai bloķēšanas failus. Es pārtveru tīkla problēmas ar Retries un -partial. Ar -timeout es tīri izbeidzu karājas savienojumus un izsaucu trauksmi.

# /usr/local/bin/rsync-backup.sh (fragments)
#!/usr/bin/env bash
set -euo pipefail

exec 9> /var/lock/rsync-backup.lock
flock -n 9 || { echo "Backup already running"; exit 1; }

LOG=/var/log/rsync-backup.log
SRC=/data/www/
DST=backup@backuphost:/srv/backups/www/

for i in {1..3}; do
  if rsync -a --delete --partial --timeout=600 -e "ssh -i /root/.ssh/backup_key" "$SRC" "$DST"; then
    echo "OK"; exit 0
  fi
  echo "Retry $i" | tee -a "$LOG"
  sleep 60
done
echo "Error after retries" >> "$LOG"; exit 1

Iespējas īpašiem gadījumiem: ACL, xattrs, reti un atomicitāte

Es pielāgoju rsync atkarībā no datu veida. Tīmekļa un sistēmas ceļiem es veidoju dublējumkopiju ACL un xattrs ar -A -X. Lieliem, reti izmantotiem failiem (virtuālo mašīnu tēli, datubāzes) var izmantot -sparse. Ar -delay-updates un -delete-delay Es samazinu starpstāvokļus un panākšu kvaziatomisku atjaunināšanu mērķī. Attiecībā uz sensitīviem datiem es izvairos no -inplace, lai kļūdaini pārnesumi nepārrakstītu pēdējo labo kopiju.

# Plašu metadatu piemērs
rsync -aAXH --sparse --delete-delay --delay-updates SRC/ DST/

Ja man ir nepieciešami absolūti atomizēti direktoriji (piemēram, lai tos varētu izmantot kā pieturvietas), es sinhronizēju ar pagaidu mērķi un palaist pēc tam izmantojiet mv, lai pārslēgtos uz Live direktoriju.

Drošas dzēšanas ierobežojumi un ticamības pārbaudes

Lai novērstu nepareizas konfigurācijas izraisītas katastrofas, es iestatīju. -max-delete nekā aizsargbarjeras. Pirms palaišanas es pārbaudu arī stiprinājumus, brīvo atmiņu un inodes. Man ir reģistrēta pēdējā veiksmīgā dublējums un brīdinājums par novirzēm (ekstrēmiem dzēšanas vai modificēšanas rādītājiem).

# Aizsardzība pret masveida dzēšanu
rsync -a --delete --max-delete=5000 SRC/ DST/

# Ticamības pārbaude (vienkārša)
df -h /srv/backups
df -i /srv/backups

Īss kopsavilkums: Lūk, kā es rīkojos

Vispirms definēju RPO/RTO, jo ir skaidrs. Prioritātes vadīties pēc katras tehniskās izvēles. Pēc tam es uzrakstu vienkāršotu skriptu, testēju ar -dry-run un reģistrēju katru izpildi. Izmantojot SSH atslēgas, joslas platuma ierobežojumus un versiju veidošanu, es efektīvi un izsekojami veidoju rezerves kopijas. Vietējās kopijas papildina ārējie galamērķi, un regulāri atjaunošanas vingrinājumi apstiprina to piemērotību. Tādējādi mana rsync dublējums ir uzticams, ātrs un vienmēr gatavs lietošanai.

Pašreizējie raksti