Smanjite sigurnosne kopije za 99.5% pomoću hashgeta

hashget - besplatan je, otvorenog koda deduplikator je uslužni program sličan arhivatoru koji vam omogućuje značajno smanjenje veličine sigurnosnih kopija, kao i organiziranje inkrementalnih i diferencijalnih shema sigurnosnog kopiranja i više.

Ovo je pregledni članak koji opisuje značajke. Stvarna upotreba hashgeta (prilično jednostavna) opisana je u README projekt i wiki dokumentacija.

usporedba

Prema zakonu žanra, odmah ću započeti s intrigom - uspoređujući rezultate:

Uzorak podataka
veličina bez pakiranja
.tar.gz
hashget.tar.gz

WordPress-5.1.1
43 Mb
11 Mb (26%)
155 Kb ( 0.3% )

Linux kernel 5.0.4
934 Mb
161 Mb (20%)
4.7 Mb ( 0.5% )

Debian 9 (LAMP) LXC VM
724 Mb
165 Mb (23%)
4.1 Mb ( 0.5% )

Pozadina o tome kakva bi trebala biti idealna i učinkovita sigurnosna kopija

Svaki put kad sam napravio sigurnosnu kopiju svježe kreiranog virtualnog stroja, progonio me osjećaj da radim nešto pogrešno. Zašto dobivam pozamašnu sigurnosnu kopiju od sustava, gdje je moja neprocjenjiva, neprolazna kreativnost jednoredni index.html s tekstom “Hello world”?

Zašto postoji 16 MB /usr/sbin/mysqld u mojoj sigurnosnoj kopiji? Je li doista moguće da na ovom svijetu imam čast čuvati ovaj važan dosje, a ako ne uspijem, bit će izgubljen za čovječanstvo? Najvjerojatnije ne. Pohranjen je na vrlo pouzdanim debian poslužiteljima (čija se pouzdanost i vrijeme rada ne mogu usporediti s onim što ja mogu pružiti), kao i u sigurnosnim kopijama (njih milijune) drugih administratora. Trebamo li doista stvoriti 10+ 000. kopiju ove važne datoteke kako bismo poboljšali pouzdanost?

općenito hashget i rješava ovaj problem. Kada se pakira, stvara vrlo malu sigurnosnu kopiju. Prilikom raspakiranja - potpuno raspakiran sustav, slično onome što bi bilo da je tar -c / tar -x. (Drugim riječima, ovo je pakiranje bez gubitaka)

Kako funkcionira hashget

hashget ima koncepte Package i HashPackage, uz njihovu pomoć izvodi deduplikaciju.

Paket (plastična vrećica). Datoteka (obično .deb ili .tar.gz arhiva) koja se može sigurno preuzeti s interneta i iz koje se može dobiti jedna ili više datoteka.

HashPackage — mala JSON datoteka koja predstavlja paket, uključujući URL paketa i hash zbrojeve (sha256) datoteka iz njega. Na primjer, za paket mariadb-server-core od 5 megabajta, veličina hash paketa je samo 6 kilobajta. Otprilike tisuću puta manje.

Deduplikacija — stvaranje arhive bez dupliciranih datoteka (ako deduplikator zna gdje se izvorni paket može preuzeti, smanjuje duplikate iz arhive).

Ambalaža

Prilikom pakiranja skeniraju se sve datoteke iz direktorija koji se pakiraju, izračunavaju se njihovi hash zbrojevi, a ako se zbroj nađe u nekom od poznatih HashPackagea, spremaju se metapodaci o datoteci (ime, hash, prava pristupa itd.) u posebnoj datoteci .hashget-restore.json, koja će također biti uključena u arhivu.

U najjednostavnijem slučaju, samo pakiranje ne izgleda ništa kompliciranije od katrana:

hashget -zf /tmp/mybackup.tar.gz --pack /path/to/data

Raspakiravanje

Raspakiranje se vrši u dvije faze. Prvo uobičajeno tar raspakiranje:

tar -xf mybackup.tar.gz -C /path/to/data

zatim vratite s mreže:

hashget -u /path/to/data

Prilikom vraćanja, hashget čita datoteku .hashget-restore.json, preuzima potrebne pakete, raspakira ih i izdvaja potrebne datoteke, instalirajući ih na tražene staze, s potrebnim vlasnikom/grupom/dopuštenjima.

Teže stvari

Ovo što je gore opisano već je dovoljno za one koji "žele kao tar, ali spakirati svoj Debian u 4 megabajta." Pogledajmo kasnije složenije stvari.

Indeksiranje

Da hashget uopće nema niti jedan HashPackage, tada jednostavno ne bi mogao ništa deduplicirati.

Također možete izraditi HashPackage ručno (jednostavno: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my), ali postoji praktičniji način.

Da biste dobili potreban hashpackage, postoji faza indeksiranje (automatski se izvršava s naredbom --pack) I heuristika. Prilikom indeksiranja, hashget "feed" svaku pronađenu datoteku svim dostupnim heuristikama koje su za nju zainteresirane. Heuristika zatim može indeksirati bilo koji paket kako bi stvorila HashPackage.

Na primjer, Debianova heuristika voli datoteku /var/lib/dpkg/status i otkriva instalirane debian pakete, a ako nisu indeksirani (za njih nije kreiran HashPackage), preuzima ih i indeksira. Rezultat je vrlo lijep učinak - hashget će uvijek učinkovito deduplicirati Debian OS, čak i ako imaju najnovije pakete.

Datoteke sa savjetima

Ako vaša mreža koristi neke od vaših vlasničkih paketa ili javni paket koji nije uključen u heuristiku hashgeta, možete joj dodati jednostavnu datoteku savjeta hashget-hint.json ovako:

{
    "project": "wordpress.org",
    "url": "https://ru.wordpress.org/wordpress-5.1.1-ru_RU.zip"
}

Zatim, svaki put kada se kreira arhiva, paket će biti indeksiran (ako već nije bio), a datoteke paketa će biti deduplicirane iz arhive. Nije potrebno programiranje, sve se može napraviti iz vima i spremiti u svaku sigurnosnu kopiju. Imajte na umu da zahvaljujući pristupu hash zbroja, ako se neke datoteke iz paketa promijene lokalno (na primjer, promijeni se konfiguracijska datoteka), tada će promijenjene datoteke biti spremljene u arhivu "kakve jesu" i neće biti skraćene.

Ako se neki od vaših vlastitih paketa povremeno ažuriraju, ali promjene nisu jako velike, možete nagovijestiti samo glavne verzije. Na primjer, u verziji 1.0 napravili su hint koji pokazuje na mypackage-1.0.tar.gz, i bit će potpuno dedupliciran, zatim su objavili verziju 1.1, koja je malo drugačija, ali hint nije ažuriran. U redu je. Dedupliciraju se samo datoteke koje odgovaraju (mogu se vratiti) na verziju 1.0.

Heuristika koja obrađuje datoteku savjeta dobar je primjer za razumijevanje unutarnjeg mehanizma funkcioniranja heuristike. Obrađuje samo datoteke hashget-hint.json (ili .hashget-hint.json s točkom) i zanemaruje sve ostale. Iz ove datoteke određuje koji URL paketa treba indeksirati, a hashget ga indeksira (ako to već nije učinio)

HashServer

Bilo bi prilično naporno izvršiti potpuno indeksiranje prilikom izrade sigurnosnih kopija. Da biste to učinili, morate preuzeti svaki paket, raspakirati ga i indeksirati. Stoga hashget koristi shemu sa HashServer. Kada se otkrije instalirani Debian paket, ako nije pronađen u lokalnom HashPackageu, prvo se pokušava jednostavno preuzeti HashPackage s hash poslužitelja. I tek ako to ne uspije, hashget sam preuzima i hashira paket (i postavlja ga na hashserver, tako da ga hashserver pruža u budućnosti).

HashServer je izborni element sheme, nije kritičan, služi isključivo za ubrzavanje i smanjenje opterećenja repozitorija. Lako se onesposobljava (opcionalno --hashserver bez parametara). Osim toga, možete lako napravite vlastiti hashserver.

Inkrementalne i diferencijalne sigurnosne kopije, planirano zastarijevanje

hashget čini vrlo lakim izradu dijagrama inkrementalne i diferencijalne sigurnosne kopije. Zašto ne indeksiramo samu našu sigurnosnu kopiju (sa svim našim jedinstvenim datotekama)? Jedna ekipa --submit i gotovi ste! Sljedeća sigurnosna kopija koju hashget stvori neće uključivati ​​datoteke iz ove arhive.

Ali ovo nije baš dobar pristup, jer se može ispostaviti da ćemo prilikom vraćanja morati povući sve sigurnosne kopije hashgeta u cijeloj povijesti (ako svaka sadrži barem jednu jedinstvenu datoteku). Za to postoji mehanizam planirano zastarijevanje sigurnosnih kopija. Prilikom indeksiranja možete odrediti datum isteka HashPackagea --expires 2019-06-01, a nakon ovog datuma (od 00:00 sati), neće se koristiti. Sama arhiva se ne može izbrisati nakon tog datuma (iako hashget može zgodno prikazati URL-ove svih sigurnosnih kopija koje su/će biti pokvarene u ovom trenutku ili bilo kojeg datuma).

Na primjer, ako 1. napravimo punu sigurnosnu kopiju i indeksiramo je s vijekom trajanja do kraja mjeseca, dobit ćemo shemu diferencijalne sigurnosne kopije.

Ako indeksiramo nove sigurnosne kopije na isti način, postojat će shema inkrementalnih sigurnosnih kopija.

Za razliku od tradicionalnih shema, hashget vam omogućuje korištenje višestrukih temeljnih izvora. Sigurnosna kopija će se smanjiti smanjenjem datoteka iz prethodnih sigurnosnih kopija (ako postoje) i javnih datoteka (ono što se može preuzeti).

Ako iz nekog razloga ne vjerujemo u pouzdanost Debian resursa (https://snapshot.debian.org/) ili koristi drugu distribuciju, možemo jednostavno jednom napraviti punu sigurnosnu kopiju sa svim paketima, a zatim se osloniti na nju (onemogućavanjem heuristike). Sada, ako se ispostavi da su nam svi poslužitelji naše distribucije nedostupni (na suvenirskom internetu ili tijekom zombi apokalipse), ali su naše sigurnosne kopije u redu, možemo se oporaviti iz bilo koje kratke diff sigurnosne kopije koja se oslanja samo na naše ranije sigurnosne kopije .

Hashget se oslanja samo na pouzdane izvore oporavka prema VAŠEM nahođenju. Koristit će se oni koje smatrate pouzdanima.

FilePool i Glacier

mehanizam FilePool omogućuje vam da ne kontaktirate stalno vanjske poslužitelje za preuzimanje paketa, već koristite pakete iz lokalnog imenika ili korporativnog poslužitelja, na primjer:

$ hashget -u . --pool /tmp/pool

ili

$ hashget -u . --pool http://myhashdb.example.com/

Da biste napravili skup u lokalnom direktoriju, trebate samo stvoriti direktorij i ubaciti datoteke u njega, hashget će sam pronaći ono što treba koristeći hashove. Kako biste bazenu omogućili pristup putem HTTP-a, trebate kreirati simboličke veze na poseban način; to se radi jednom naredbom (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool). Sam HTTP FilePool su statične datoteke, tako da ga može poslužiti bilo koji jednostavni web poslužitelj, opterećenje poslužitelja je gotovo nula.

Zahvaljujući FilePoolu, možete koristiti ne samo http(s) resurse kao osnovne resurse, već i na primjer,Amazonski ledenjak.

Nakon učitavanja sigurnosne kopije na ledenjak, dobivamo ID za učitavanje i koristimo ga kao URL. Na primjer:

hashget --submit Glacier_Upload_ID --file /tmp/my-glacier-backup.tar.gz --project glacier --hashserver --expires 2019-09-01

Sada će se nove (diferencijalne) sigurnosne kopije temeljiti na ovoj sigurnosnoj kopiji i bit će kraće. Nakon što tar raspakira diffbackup, možemo vidjeti na koje se resurse oslanja:

hashget --info /tmp/unpacked/ list

i samo upotrijebite shell skriptu za preuzimanje svih ovih datoteka s Glaciera u skup i pokrenite uobičajeni oporavak: hashget -u /tmp/unpacked —pool /tmp/pool

Je li igra vrijedna svijeće?

U najjednostavnijem slučaju sigurnosne kopije ćete jednostavno platiti manje (ako ih za novac pohranite negdje u oblak). Možda puno, puno manje.

Ali to nije jedino. Kvantiteta prelazi u kvalitetu. Ovo možete koristiti za visokokvalitetnu nadogradnju svoje sigurnosne sheme. Na primjer, budući da su naše sigurnosne kopije sada kraće, ne možemo raditi mjesečne sigurnosne kopije, već dnevne. Čuvajte ih ne šest mjeseci, kao prije, već 5 godina. Prije ste ga pohranili u sporo, ali jeftino "hladno" skladište (Glacier), sada ga možete pohraniti u vruće skladište, odakle uvijek možete brzo preuzeti sigurnosnu kopiju i vratiti je u nekoliko minuta, a ne u jednom danu.

Možete povećati pouzdanost sigurnosne pohrane. Ako ih trenutno čuvamo u jednom skladištu, onda ćemo ih smanjenjem količine backupa moći skladištiti u 2-3 skladišta i bezbolno preživjeti ako se jedno od njih ošteti.

Kako isprobati i početi koristiti?

Idite na stranicu gitlaba https://gitlab.com/yaroslaff/hashget, instalirajte jednom naredbom (pip3 install hashget[plugins]) i samo pročitajte i izvršite brzi početak. Mislim da će trebati 10-15 minuta za sve jednostavne stvari. Zatim možete pokušati komprimirati svoje virtualne strojeve, napraviti datoteke nagovještaja ako je potrebno da kompresija bude jača, poigrati se s bazenima, lokalnom hash bazom podataka i hash serverom ako ste zainteresirani, a sljedeći dan vidjeti koja je veličina inkrementalne sigurnosne kopije bit će na vrhu jučerašnjeg.

Izvor: www.habr.com

Dodajte komentar