Smanjite sigurnosne kopije za 99.5% pomoću hashget-a

hashget - besplatno je, otvorenog koda deduplicator je uslužni program sličan arhivatoru koji vam omogućava da značajno smanjite veličinu sigurnosnih kopija, kao i organizirate inkrementalne i diferencijalne sheme sigurnosnog kopiranja i još mnogo toga.

Ovo je pregledni članak koji opisuje karakteristike. Stvarna upotreba hashget-a (prilično jednostavna) je opisana u README projekat i wiki dokumentacija.

Upoređivanje

Prema zakonu žanra, odmah ću početi s intrigom - poređenjem rezultata:

Uzorak podataka
raspakovana veličina
.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 idealna i efikasna sigurnosna kopija trebala biti

Svaki put kada sam napravio rezervnu kopiju sveže kreirane virtuelne mašine, proganjao me je osećaj da radim nešto pogrešno. Zašto dobijam ogromnu rezervnu kopiju od sistema, gde je moja neprocenjiva, neprolazna kreativnost index.html u jednom redu sa tekstom “Zdravo svete”?

Zašto postoji 16 MB /usr/sbin/mysqld u mojoj rezervnoj kopiji? Da li je zaista moguće da na ovom svetu imam čast da čuvam ovaj važan dosije, a ako ne uspem, biće izgubljen za čovečanstvo? Najvjerovatnije ne. Pohranjen je na vrlo pouzdanim debian serverima (čija se pouzdanost i vrijeme neprekidnog rada ne mogu usporediti s onim što mogu pružiti), kao iu sigurnosnim kopijama (milijuni njih) drugih administratora. Da li zaista treba da kreiramo 10+ 000. kopije ove važne datoteke da bismo poboljšali pouzdanost?

Generalno hashget i rješava ovaj problem. Kada se spakuje, stvara vrlo malu rezervnu kopiju. Prilikom raspakivanja - potpuno raspakovan sistem, sličan onome što bi bio da tar -c / tar -x. (Drugim riječima, ovo je pakovanje bez gubitaka)

Kako funkcioniše hashget

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

paket (plasticna kesa). Datoteka (obično .deb ili .tar.gz arhiva) koja se može bezbedno preuzeti sa 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 sume (sha256) datoteka iz njega. Na primjer, za paket mariadb-server-core od 5 megabajta, veličina hash paketa je samo 6 kilobajta. Otprilike hiljadu puta manje.

Deduplikacija — kreiranje arhive bez duplikata (ako deduplikator zna gdje se originalni paket može preuzeti, smanjuje duplikate iz arhive).

Pakovanje

Prilikom pakiranja, skeniraju se svi fajlovi iz direktorija koji se pakuje, izračunavaju se njihovi hash sumi, a ako se ta suma nađe u nekom od poznatih HashPackagesa, tada se pohranjuju metapodaci o datoteci (ime, hash, prava pristupa, itd.) u posebnoj datoteci .hashget-restore.json, koja će takođe biti uključena u arhivu.

U najjednostavnijem slučaju, sama ambalaža ne izgleda ništa kompliciranije od katrana:

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

Raspakivanje

Raspakivanje se vrši u dve faze. Prvo uobičajeno raspakivanje katrana:

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

zatim vratite sa mreže:

hashget -u /path/to/data

Prilikom vraćanja, hashget čita datoteku .hashget-restore.json, preuzima potrebne pakete, raspakuje ih i izdvaja potrebne datoteke, instalirajući ih na tražene putanje, sa potrebnim vlasnikom/grupom/dozvolom.

Teže stvari

Ono što je gore opisano već je dovoljno za one koji “žele kao tar, ali da moj Debian spakuju u 4 megabajta”. Pogledajmo složenije stvari kasnije.

Indeksiranje

Ako hashget uopće nije imao niti jedan HashPackage, onda jednostavno ne bi mogao ništa deduplicirati.

HashPackage možete kreirati i ručno (jednostavno: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my), ali postoji pogodniji način.

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

Na primjer, Debian 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.

Hint fajlovi

Ako vaša mreža koristi neke od vaših vlasničkih paketa ili javni paket koji nije uključen u hashget heuristiku, možete joj dodati jednostavnu datoteku nagoveštaja hashget-hint.json na sljedeći način:

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

Zatim, svaki put kada se arhiva kreira, paket će biti indeksiran (ako ranije nije bio), a datoteke paketa će biti uklonjene iz arhive. Nije potrebno programiranje, sve se može uraditi iz vim-a i sačuvati u svakoj rezervnoj kopiji. Imajte na umu da zahvaljujući pristupu hash zbroja, ako se neke datoteke iz paketa promijene lokalno (na primjer, promijeni se konfiguracijski fajl), tada će promijenjene datoteke biti sačuvane u arhivi „kao što jesu“ i neće biti skraćene.

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

Heuristika koja obrađuje datoteku nagoveštaja je dobar primer za razumevanje internog mehanizma kako heuristika funkcioniše. Obrađuje samo datoteke hashget-hint.json (ili .hashget-hint.json sa tač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 radno intenzivno izvršiti potpuno indeksiranje prilikom kreiranja rezervnih kopija. Da biste to učinili, morate preuzeti svaki paket, raspakirati ga i indeksirati. Stoga hashget koristi šemu 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 samo ako ovo ne uspije, hashget sam preuzima i hešira paket (i postavlja ga na hashserver, tako da ga taj hashserver pruža u budućnosti).

HashServer je opcioni element šeme, nije kritičan, služi isključivo za ubrzavanje i smanjenje opterećenja na spremištima. Lako se onemogućava (opcionalno --hashserver bez parametara). Osim toga, možete lako napravite svoj vlastiti hashserver.

Inkrementalne i diferencijalne sigurnosne kopije, planirano zastarjelo

hashget olakšava izradu dijagrama inkrementalne i diferencijalne sigurnosne kopije. Zašto ne indeksiramo našu sigurnosnu kopiju (sa svim našim jedinstvenim datotekama)? Jedan tim --submit i gotovi ste! Sljedeća sigurnosna kopija koju hashget kreira 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 hashget-a u cijeloj historiji (ako svaka sadrži barem jednu jedinstvenu datoteku). Za to postoji mehanizam planirano zastarijevanje rezervnih kopija. Prilikom indeksiranja možete odrediti datum isteka HashPackagea --expires 2019-06-01, a nakon ovog datuma (od 00:00) neće se koristiti. Sama arhiva se ne može izbrisati nakon ovog datuma (iako hashget može prikladno prikazati URL-ove svih rezervnih kopija koje su/će biti pokvarene u ovom trenutku ili bilo kojeg datuma).

Na primjer, ako napravimo potpunu sigurnosnu kopiju 1. i indeksiramo je sa životnim vijekom do kraja mjeseca, dobićemo diferencijalnu šemu sigurnosne kopije.

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

Za razliku od tradicionalnih shema, hashget vam omogućava korištenje više osnovnih izvora. Sigurnosna kopija će se smanjiti i smanjenjem datoteka iz prethodnih rezervnih kopija (ako ih ima) 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 serveri naših distribucija nedostupni (na suvenirskom Internetu ili tokom zombi apokalipse), ali su naše sigurnosne kopije u redu, možemo se oporaviti od bilo koje kratke diff sigurnosne kopije koja se oslanja samo na naše ranije sigurnosne kopije .

Hashget se oslanja samo na pouzdane izvore za oporavak prema VAŠEM nahođenju. Biće korišteni oni koje smatrate pouzdanim.

FilePool i Glacier

Mehanizam FilePool omogućava vam da ne kontaktirate stalno vanjske servere za preuzimanje paketa, već koristite pakete iz lokalnog direktorija ili korporativnog servera, na primjer:

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

ili

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

Da biste napravili bazen u lokalnom direktoriju, trebate samo kreirati direktorij i baciti datoteke u njega, hashget će sam pronaći ono što mu je potrebno koristeći hashove. Da bi bazen bio dostupan preko HTTP-a, potrebno je kreirati simbolične veze na poseban način; to se radi jednom naredbom (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool). HTTP FilePool je sam po sebi statičan fajl, tako da ga može poslužiti bilo koji jednostavan web server, opterećenje na serveru je skoro nulo.

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

Nakon upload-ovanja sigurnosne kopije na glečer, dobijamo njegov Upload ID 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 nove (diferencijalne) sigurnosne kopije biti bazirane na ovoj sigurnosnoj kopiji i bit će kraće. Nakon što tar raspakira diffbackup, možemo vidjeti na koje resurse se oslanja:

hashget --info /tmp/unpacked/ list

i samo upotrijebite shell skriptu da preuzmete sve ove datoteke iz Glaciera u bazen i pokrenite uobičajeni oporavak: hashget -u /tmp/unpacked —pool /tmp/pool

Je li igra vrijedna svijeće?

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

Ali to nije jedina stvar. Količina se pretvara u kvalitet. Ovo možete koristiti da dobijete visokokvalitetnu nadogradnju vaše šeme sigurnosne kopije. Na primjer, pošto su naše sigurnosne kopije sada kraće, možemo praviti ne mjesečne, već dnevne. Čuvajte ih ne šest mjeseci, kao prije, već 5 godina. Ranije ste ga pohranjivali u sporo, ali jeftino “hladno” skladište (Glacier), sada ga možete pohraniti u vruću pohranu, odakle uvijek možete brzo preuzeti rezervnu kopiju i vratiti je za nekoliko minuta, a ne za jedan dan.

Možete povećati pouzdanost skladištenja rezervnih kopija. Ako ih trenutno skladištimo u jednom skladištu, onda ćemo smanjenjem količine rezervnih kopija moći da ih pohranimo u 2-3 skladišta i bezbolno preživjeti ako se jedan od njih ošteti.

Kako pokušati i početi koristiti?

Idite na stranicu gitlaba https://gitlab.com/yaroslaff/hashget, instalirajte jednom komandom (pip3 install hashget[plugins]) i samo pročitajte i izvršite brzi početak. Mislim da će trebati 10-15 minuta da uradite sve jednostavne stvari. Zatim možete pokušati komprimirati svoje virtuelne mašine, napraviti fajlove nagoveštaja ako je potrebno da pojačate kompresiju, poigrajte se sa skupovima, lokalnom hash bazom podataka i hash serverom ako ste zainteresovani, a sledećeg dana vidite kolika je veličina inkrementalne rezervne kopije će biti iznad jučerašnjeg.

izvor: www.habr.com

Dodajte komentar