Znížte zálohovanie o 99.5 % pomocou hashgetu

hashget - je to zadarmo, open source deduplikátor je nástroj podobný archivátoru, ktorý vám umožňuje výrazne znížiť veľkosť záloh, ako aj organizovať schémy prírastkových a rozdielových záloh a ďalšie.

Toto je prehľadný článok, ktorý popisuje funkcie. Samotné použitie hashgetu (celkom jednoduché) je popísané v README projekt a wiki dokumentácia.

Сравнение

Podľa zákona žánru začnem hneď s intrigami - porovnávaním výsledkov:

Vzorka údajov
rozbalená veľkosť
.tar.gz
hashget.tar.gz

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

Linuxové jadro 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% )

Pozadie o tom, aká by mala byť ideálna a efektívna záloha

Vždy, keď som si robil zálohu čerstvo vytvoreného virtuálneho stroja, prenasledoval ma pocit, že robím niečo zle. Prečo dostávam mohutnú zálohu zo systému, kde mojou neoceniteľnou, nehynúcou kreativitou je jednoriadkový index.html s textom „Ahoj svet“?

Prečo je v mojej zálohe 16 MB /usr/sbin/mysqld? Je naozaj možné, že v tomto svete mám tú česť uchovávať tento dôležitý spis a ak zlyhám, ľudstvo ho stratí? S najväčšou pravdepodobnosťou nie. Je uložený na vysoko spoľahlivých serveroch debianu (ktorých spoľahlivosť a dostupnosť nemožno porovnať s tým, čo môžem poskytnúť), ako aj v zálohách (ich milióny) iných správcov. Naozaj potrebujeme vytvoriť 10 000 000+ 1. kópiu tohto dôležitého súboru, aby sme zvýšili spoľahlivosť?

Vo všeobecnosti hashget a rieši tento problém. Po zbalení vytvorí veľmi malú zálohu. Pri rozbaľovaní - úplne rozbalený systém, podobný tomu, čo by bolo, keby tar -c / tar -x. (Inými slovami, toto je bezstratové balenie)

Ako funguje hashget

hashget má koncepty Package a HashPackage, s ich pomocou vykonáva deduplikáciu.

Balíček (plastový sáčok). Súbor (zvyčajne archív .deb alebo .tar.gz), ktorý možno bezpečne stiahnuť z internetu a z ktorého možno získať jeden alebo viac súborov.

HashPackage — malý súbor JSON predstavujúci balík vrátane adresy URL balíka a súčtu hash (sha256) súborov z neho. Napríklad pre 5 megabajtový balík mariadb-server-core je veľkosť hashpackage iba 6 kilobajtov. Asi tisíckrát menej.

Deduplikácia — vytvorenie archívu bez duplicitných súborov (ak deduplikátor vie, kde je možné stiahnuť pôvodný balík, zníži počet duplikátov z archívu).

Balenie

Pri balení sa skenujú všetky súbory z baleného adresára, vypočítajú sa ich hash sumy a ak sa suma nájde v niektorom zo známych HashPackage, tak sa uložia metadáta o súbore (názov, hash, prístupové práva atď.). v špeciálnom súbore .hashget-restore.json, ktorý bude tiež súčasťou archívu.

V najjednoduchšom prípade samotný obal nevyzerá komplikovanejšie ako decht:

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

Vybalenie

Rozbalenie prebieha v dvoch fázach. Najprv zvyčajné vybalenie dechtu:

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

potom obnovte zo siete:

hashget -u /path/to/data

Pri obnove si hashget prečíta súbor .hashget-restore.json, stiahne potrebné balíčky, rozbalí ich a rozbalí potrebné súbory, nainštaluje ich do požadovaných ciest s požadovaným vlastníkom/skupinou/oprávneniami.

Ťažšie veci

To, čo je popísané vyššie, už stačí pre tých, ktorí to „chcú ako tar, ale zbaliť môj Debian do 4 megabajtov“. Pozrime sa na zložitejšie veci neskôr.

Indexovanie

Ak by hashget nemal vôbec jediný HashPackage, potom by jednoducho nemohol nič deduplikovať.

HashPackage môžete vytvoriť aj manuálne (jednoducho: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my), ale existuje pohodlnejší spôsob.

Na získanie potrebného hashpackage je tu fáza indexovanie (automaticky sa vykoná príkazom --pack) A heuristiky. Pri indexovaní hashget „podáva“ každý nájdený súbor všetkým dostupným heuristikám, ktoré sa oň zaujímajú. Heuristika potom môže indexovať ľubovoľný balík a vytvoriť HashPackage.

Napríklad heuristika Debianu miluje súbor /var/lib/dpkg/status a zisťuje nainštalované balíky debianu, a ak nie sú indexované (nie je pre ne vytvorený žiadny HashPackage), stiahne ich a indexuje. Výsledkom je veľmi pekný efekt - hashget vždy efektívne deduplikuje OS Debian, aj keď majú najnovšie balíčky.

Súbory tipov

Ak vaša sieť používa niektoré z vašich proprietárnych balíkov alebo verejný balík, ktorý nie je zahrnutý v heuristike hashget, môžete doň pridať jednoduchý súbor s pokynmi hashget-hint.json takto:

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

Ďalej, pri každom vytvorení archívu bude balík indexovaný (ak predtým nebol) a súbory balíka budú z archívu deduplikované. Nie je potrebné žiadne programovanie, všetko sa dá urobiť z vim a uložiť do každej zálohy. Upozorňujeme, že vďaka prístupu hash sum, ak sa niektoré súbory z balíka zmenia lokálne (napríklad sa zmení konfiguračný súbor), zmenené súbory sa uložia do archívu „tak, ako sú“ a nebudú skrátené.

Ak sa niektoré z vašich vlastných balíkov pravidelne aktualizujú, ale zmeny nie sú príliš veľké, môžete naznačiť iba hlavné verzie. Napríklad vo verzii 1.0 urobili nápovedu smerujúcu na mypackage-1.0.tar.gz a tá bude úplne deduplikovaná, potom vydali verziu 1.1, ktorá je trochu iná, ale nápoveda nebola aktualizovaná. Je to v poriadku. Odstránia sa iba súbory, ktoré zodpovedajú verzii 1.0 (je možné ju obnoviť).

Heuristika, ktorá spracováva súbor s nápovedou, je dobrým príkladom na pochopenie vnútorného mechanizmu fungovania heuristiky. Spracováva iba súbory hashget-hint.json (alebo .hashget-hint.json s bodkou) a všetky ostatné ignoruje. Z tohto súboru určí, ktorá adresa URL balíka sa má indexovať, a indexuje ju hashget (ak tak ešte neurobil)

HashServer

Vykonať úplnú indexáciu pri vytváraní záloh by bolo dosť náročné na prácu. Ak to chcete urobiť, musíte si stiahnuť každý balík, rozbaliť ho a indexovať. Preto hashget používa schému s HashServer. Keď sa zistí nainštalovaný balík Debian, ak sa nenachádza v lokálnom HashPackage, najprv sa pokúsime jednoducho stiahnuť HashPackage z hash servera. A iba ak to nefunguje, hashget sám stiahne a zahašuje balík (a nahrá ho na hashserver, aby ho hashserver v budúcnosti poskytol).

HashServer je voliteľný prvok schémy, nie je kritický, slúži výhradne na zrýchlenie a zníženie zaťaženia úložísk. Ľahko deaktivovateľné (voliteľné --hashserver bez parametrov). Okrem toho môžete ľahko vytvorte si vlastný hashserver.

Prírastkové a rozdielové zálohy, plánované zastarávanie

hashget veľmi uľahčuje vytvorenie diagramu prírastkové a rozdielové zálohy. Prečo neindexujeme samotnú zálohu (so všetkými našimi jedinečnými súbormi)? Jeden tím --submit a hotovo! Ďalšia záloha, ktorú vytvorí hashget, nebude obsahovať súbory z tohto archívu.

Toto ale nie je veľmi dobrý prístup, pretože sa môže ukázať, že pri obnove budeme musieť stiahnuť všetky zálohy hashgetov v celej histórii (ak každá obsahuje aspoň jeden jedinečný súbor). Existuje na to mechanizmus plánované zastarávanie záloh. Pri indexovaní môžete určiť dátum vypršania platnosti HashPackage --expires 2019-06-01, a po tomto dátume (od 00:00) sa nebude používať. Samotný archív nie je možné po tomto dátume vymazať (hoci hashget môže pohodlne zobraziť adresy URL všetkých záloh, ktoré sú/budú momentálne alebo k akémukoľvek dátumu zhnité).

Ak napríklad vytvoríme plnú zálohu 1. a indexujeme ju s životnosťou do konca mesiaca, dostaneme schému rozdielovej zálohy.

Ak indexujeme nové zálohy rovnakým spôsobom, bude existovať schéma prírastkových záloh.

Na rozdiel od tradičných schém vám hashget umožňuje použiť viacero základných zdrojov. Záloha sa zredukuje zmenšením súborov z predchádzajúcich záloh (ak existujú), ako aj verejných súborov (čo je možné stiahnuť).

Ak z nejakého dôvodu nedôverujeme spoľahlivosti zdrojov Debianu (https://snapshot.debian.org/) alebo používa inú distribúciu, môžeme jednoducho raz urobiť úplnú zálohu všetkých balíkov a potom sa na to spoľahnúť (zakázaním heuristiky). Teraz, ak sa ukáže, že všetky servery našich distribúcií sú pre nás nedostupné (na internete so suvenírmi alebo počas zombie apokalypsy), ale naše zálohy sú v poriadku, môžeme sa zotaviť z akejkoľvek krátkej rozdielovej zálohy, ktorá sa spolieha iba na naše predchádzajúce zálohy. .

Hashget sa spolieha iba na dôveryhodné zdroje obnovy podľa VÁŠHO uváženia. Použijú sa tie, ktoré považujete za spoľahlivé.

FilePool a ľadovec

mechanizmus FilePool vám umožňuje neustále nekontaktovať externé servery kvôli sťahovaniu balíkov, ale používať balíky z lokálneho adresára alebo podnikového servera, napríklad:

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

alebo

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

Ak chcete vytvoriť fond v lokálnom adresári, stačí vytvoriť adresár a hodiť do neho súbory, hashget sám nájde to, čo potrebuje, pomocou hash. Ak chcete sprístupniť fond cez HTTP, musíte špeciálnym spôsobom vytvoriť symbolické odkazy, a to pomocou jedného príkazu (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool). Samotný HTTP FilePool sú statické súbory, takže ho môže obslúžiť každý jednoduchý webový server, zaťaženie servera je takmer nulové.

Vďaka FilePool môžete využívať nielen zdroje http(s) ako základné zdroje, ale aj napríklad,Amazonský ľadovec.

Po nahratí zálohy na ľadovec získame jeho Upload ID a použijeme ho ako URL. Napríklad:

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

Teraz budú nové (rozdielové) zálohy založené na tejto zálohe a budú kratšie. Po rozbalení zálohy tar tar vidíme, na aké zdroje sa spolieha:

hashget --info /tmp/unpacked/ list

a pomocou shell skriptu stiahnite všetky tieto súbory z Glacier do fondu a spustite zvyčajnú obnovu: hashget -u /tmp/unpacked —pool /tmp/pool

Stojí hra za sviečku?

V tom najjednoduchšom prípade jednoducho zaplatíte menej za zálohy (ak si ich za peniaze uložíte niekde do cloudu). Možno oveľa, oveľa menej.

Ale to nie je to jediné. Kvantita sa mení na kvalitu. Môžete to použiť na získanie vysokokvalitnej inovácie vašej schémy zálohovania. Napríklad, keďže naše zálohy sú teraz kratšie, môžeme robiť nie mesačné, ale denné zálohy. Skladujte ich nie šesť mesiacov, ako predtým, ale 5 rokov. Predtým ste ho ukladali do pomalého, ale lacného „studeného“ úložiska (Glacier), teraz ho môžete uložiť do horúceho úložiska, odkiaľ si vždy rýchlo stiahnete zálohu a obnovíte ju za pár minút, nie za deň.

Môžete zvýšiť spoľahlivosť záložného úložiska. Ak ich momentálne uložíme do jedného úložiska, tak znížením objemu záloh ich budeme môcť uložiť na 2-3 úložiskách a bezbolestne prežiť, ak sa jeden z nich poškodí.

Ako vyskúšať a začať používať?

Prejdite na stránku gitlab https://gitlab.com/yaroslaff/hashget, nainštalujte jedným príkazom (pip3 install hashget[plugins]) a stačí si prečítať a spustiť rýchly štart. Myslím, že vykonanie všetkých jednoduchých vecí bude trvať 10-15 minút. Potom sa môžete pokúsiť skomprimovať svoje virtuálne počítače, v prípade potreby vytvoriť súbory s nápovedou, aby bola kompresia silnejšia, pohrať sa s fondmi, lokálnou hašovacou databázou a hašovacím serverom, ak máte záujem, a nasledujúci deň zistiť, aká je veľkosť prírastkovej zálohy bude na vrchole včerajšieho.

Zdroj: hab.com

Pridať komentár