KĂ€rpige varukoopiad 99,5% hashgetiga

hashget on tasuta, avatud lÀhtekoodiga dedupleerija on arhiivijat meenutav utiliit, mis vÔimaldab oluliselt vÀhendada varukoopiate suurust ning korraldada inkrementaalsete ja diferentseeritud varukoopiate skeeme ja muud.

See on ĂŒlevaateartikkel funktsioonide kirjeldamiseks. Hashget'i kasutamine (ka ĂŒsna lihtne) on kirjeldatud nĂ€iteks, mis kuvatakse armatuurlaudade peal koos Prometheuse pĂ€ringutega, mis tĂ€idavad armatuure. projekti ja wiki-dokumendis.

VÔrdlus

Ćœanri seadusena alustan kohe intriigiga — tulemuste vĂ”rdlemisega:

Andmeproov
lahti pakkimise suurus
.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% )

Eellugu, milline peab olema ideaalne ja tÔhus varukoopia

Iga kord, kui olen teinud varukoopia vĂ€rskelt loodud virtuaalmasinast, ei andnud mulle rahu tunne, et ma teen midagi valesti. Miks on mul sĂŒsteemist, kus minu hindamatust surematust loomingust on ainult ĂŒhekordne index.html tekstiga "Tere maailm", massiivne varukoopia?

Miks on minu varukoopas 16-megabaidine /usr/sbin/mysqld? Kas tĂ”esti just mulle on usaldatud selle olulise faili hoidmine, ja kui ma ei tule sellega toime - siis see kaob inimkonnale? TĂ”enĂ€oliselt mitte. See on salvestatud usaldusvÀÀrsetesse debiani serveritesse (mille usaldusvÀÀrsus ja töökindlus ei ole vĂ”rreldav sellega, mida mina suudan pakkuda), ning ka teiste administraatorite varukoopiate (miljonite) hulka. Kas tĂ”esti peame looma selle olulise faili 10 000 000 + 1’da koopia, et suurendada usaldusvÀÀrsust?

Üldiselt hashget lahendab selle probleemi. Pakendamisel - see loob vĂ€ga vĂ€ikese varukoopia. Lahtipakkimisel - tĂ€ielikult lahti pakitud sĂŒsteemi, mis on sarnane sellele, mis oleks tar -c / tar -x. (TeisisĂ”nu, tegemist on kaotamatult pakkimisega)

Kuidas hashget töötab

Hashget'il on mÔisted Package ja HashPackage, millega see teostab dedupleerimist.

Package (pakett). Fail (tavaliselt .deb vĂ”i .tar.gz arhiiv), mille saab usaldusvÀÀrselt veebist alla laadida ja mille pĂ”hjal saab ĂŒhe vĂ”i rohkem faili.

HashPackage on vÀike JSON-fail, mis esindab Package'i, sealhulgas sisaldab paketi URL-i ja failide hashsumme (sha256) sellest. NÀiteks mariadb-server-core paketi suurus on 5 megabaidi ja hashpackage suurus kokku vaid 6 kilobaiti. Umbes tuhat korda vÀiksem.

Dedupleerimine on arhiivi loomine ilma dubleeritud failideta (kui dedupleerija teab, kust originaalpaketti alla laadida, vÀhendab see arhiivis dubletteid).

Pakendamine

Pakkimisel vaadatakse ĂŒle kĂ”ik failid pakitavas kataloogis, arvutatakse nende hash-summad ja kui summa leitakse mĂ”nest tuntud HashPackage'ist, salvestatakse faili metaandmed (nimi, hash, Ă”igused jne) eraldi faili .hashget-restore.json, mis lisatakse samuti arhiivi.

Pakkimine iseenesest nÀeb kÔige lihtsamal juhul vÀlja nii nagu tar:

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

Lahtipakkimine

Pakkimise taastamine toimub kahes etapis. Esiteks toimub tavaline tar'i pakkimine:

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

seejÀrel taastamine vÔrgust:

hashget -u /path/to/data

Taastamise kÀigus loeb hashget faili .hashget-restore.json, laadib vajalikud paketid alla, pakib need lahti ja ekstraheerib vajalikud failid, paigaldades need Ôigetele radadele soovitud omanik/gruppe/Ôigustega.

Rohkem keerulisi asju

See, mis eespool kirjas, on juba piisavalt hea neile, kes ĂŒtlevad: "tahan nagu tar, aga et pakiks mu Debiani 4 megabaidiga". Edasi vaatame keerulisemaid asju.

Indekseerimine

Kui hashget'il pole olnud ĂŒhtegi HashPackage'it, ei suudaks ta midagi deduplication'ida.

HashPackage'i saab luua ka kÀsitsi (lihtsalt: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my), kuid on olemas mugavam tee.

Selleks, et saada vajalikud hashpackage'id, on etapp indekseerimine (see toimub automaatselt kÀsu juures --pack) ja heuristikas. Indekseerimise kÀigus "toidab" hashget iga leitud faili kÔigile olemasolevatele heuristikatele, mis teda huvitavad. Heuristikad vÔivad seejÀrel indeksida mÔne paketi, et luua HashPackage.

NĂ€iteks, debian'i heuristika armastab faili /var/lib/dpkg/status ja tuvastab paigaldatud debian pakette ning kui neid ei ole indekseeritud (nende jaoks ei ole loodud HashPackage't), laadib ta need alla ja indekseerib. Tulemuseks on vĂ€ga meeldiv efekt — hashget deduplication'i tĂ”husus debiani OS-idel, isegi kui nende peal on kĂ”ige uuemad paketid.

Viidatud failid (hint'id)

Kui teie vÔrgus kasutatakse mingit teie enda patenteeritud paketti vÔi avalikku paketti, mis ei kuulu hashget'i heuristikasse, saate lisada sellesse lihtsa hint-faili hashget-hint.json jÀrgmise nÀidisena:

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

Edasi, iga kord, kui arhiivi luuakse, indekseeritakse pakett (kui see pole varem tehtud) ja paketi failid eemaldatakse arhiivist. Ei ole vajalik programmeerimine, kÔik saab teha vim'i abil ja sÀÀsta igas varukoopia. Pange tÀhele, et tÀnu hash-skeemile, kui mÔni paketi fail on lokaalselt muudetud (nÀiteks konfiguratsioonifail on muudetud), salvestatakse muudetud failid arhiivi "nagu on", neid ei vÀhendata.

Kui teie enda pakett uuendatakse regulaarsete vahega, kuid muudatused pole vÀga suured, saate anda vihje ainult pÔhiversioonide jaoks. NÀiteks versioonis 1.0 tehti vihje, mis nÀitab mypackage-1.0.tar.gz, ning see indekseeritakse tÀielikult. Siis anti vÀlja versioon 1.1, mis on veidi erinev, ja vihjet ei uuendatud. Ei ole hullu. Eemaldatakse ainult failid, mis kattuvad (mida saab taastada) versiooniga 1.0.

Viitamine, mis töötleb vihje-faili, on hea nÀide sisemise töö mehhanismist. See töötleb ainult failid hashget-hint.json (vÔi .hashget-hint.json punktiga) ja ignoreerib kÔike muud. Selle faili jÀrgi mÀÀrab ta, milline paketi URL peab olema indekseeritud, ja hashget indekseerib selle (kui see pole varem tehtud).

HashServer

Arhiivide loomisel oleks ĂŒsna töömahukas tĂ€ielikult indekseerimist teostada. Selleks peaks alla tĂ”mbama iga paketi, lahtipakkima, indekseerima. SeetĂ”ttu kasutab hashget skeemi koos HashServer. Kui leitud on olemasolev debian'i pakett, kui seda ei leita kohalikest HashPackage'dest, ĂŒritatakse esmalt lihtsalt alla laadida HashPackage hash-serverist. Ja alles siis, kui see ei Ă”nnestu, laadib hashget paketi alla ja hashib selle (ning laadib selle hashserverisse, et tulevikus hashserver seda edastaks).

HashServer ei ole skeemi kohustuslik element, see ei ole kriitiline, vaid teenib vaid kiirendamise ja koormuse vÀhendamise eesmÀrki hoidlatele. Kergesti deaktiveeritav (valiku abil --hashserver ilma parameetriteta). Lisaks saab hÔlpsasti luua omaenda hashserveri.

Inkrementaalne ja diferentseeritud varukoopiad, planeeritud aegumine

hashget kergendab vĂ€ga hĂ”lpsasti skeemi inkrementaalsete ja diferentseeritud varukoopiate. Miks mitte indekseerida oma varukoopia (koos meie ainulaadsete failidega)? Üks kĂ€sk --submit Ja kĂ”ik on valmis! JĂ€rgmine varukoopia, mille hashget loob, ei sisalda selle arhiivi faile.

Kuid see ei ole vĂ€ga hea lĂ€henemine, sest vĂ”ib juhtuda, et taastamisel peame lĂ€bi vaatama kĂ”ik hashget varukoopiad kogu ajaloo vĂ€ltel (kui igas neist on vĂ€hemalt ĂŒks ainulaadne fail). Selle jaoks on olemas mehhanism plaanitud varukoopiate vananemiseks. Indekseerimisel saab mÀÀrata HashPackage'i vananemise kuupĂ€eva --expires 2019-06-01, ja selle kuupĂ€eva saabudes (kell 00:00) ei kasutata seda enam. TĂ”eliselt arhiivimist pĂ€rast seda kuupĂ€eva pole vaja (kuigi hashget vĂ”ib mugavalt nĂ€idata URL-e kĂ”igile varukoopiatele, mis on meil kehtetu/dalev kas olnud vĂ”i mis lĂ€hevad kehtetuks igal kuupĂ€eval).

NĂ€iteks, kui esimesel pĂ€eval teha tĂ€isvarukoopia ja indekseerida see eluajaga kuu lĂ”puni — saame diferentsiaalsete varukoopiate skeemi.

Kui indekseerime ka uusi varukoopiaid — siis on tegemist inkrementaalsete varukoopiate skeemiga.

Erinevalt traditsioonilistest skeemidest vÔimaldab hashget kasutada mitmeid pÔhiallikate allikaid. Varukoopia vÀhendatakse ka eelnevate varukoopiate (kui neid on) failide vÀhendamise tÔttu ja avalike failide (need, mida saab alla laadida) tÔttu.

Kui mingil pĂ”hjusel ei usalda me debiani ressursside usaldusvÀÀrsust (https://snapshot.debian.org/) vĂ”i kasutame teist distributsiooni, saame lihtsalt ĂŒhe korra teha tĂ€isvarukoopia koos kĂ”igi pakettidega ja toimetada vaid selle pealt (deaktiveerides heuristiku). NĂŒĂŒd, kui kĂ”ik meie distributsioonide serverid osutuvad meile kĂ€ttesaamatuks (suveniiride Internetis vĂ”i zombiapokalĂŒpsises), kuid meie varukoopiad on korras — saame taastuda igast lĂŒhikesest diff-varukoopiast, tuginedes ainult meie varasematele varukoopiatele.

Hashget toetub ainult teie valikul usaldusvÀÀrsetele taastamisallikatele. Milliseid te usaldusvÀÀrseteks peate — need ka kasutatakse.

FilePool ja Glacier

Mehhanism FilePool kÔrvaldab vajaduse pidevalt vÀlistele serveritele pöörduda, et alla laadida pakette, ning vÔimaldab kasutada pakette kohalikust kataloogist vÔi ettevÔtte serverist, nÀiteks:

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

vÔi

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

Kohalikus kataloogis poodi loomiseks on piisav lihtsalt katalooge luua ja sinna faile visata, hashget leiab ise vajalikud failid seotud hash'ide kaudu. HTTP kaudu kergesti kĂ€tte saadava poori loomiseks peab loomisel spetsiaalselt sĂŒmboolseid linke seadistama, selleks piisab ĂŒhest kĂ€sklusest (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool). HTTP FilePool on staatilised failid, seega vĂ”ib seda teenindada ĂŒkskĂ”ik milline lihtne veebiserver, serveri koormus on peaaegu olematu.

FilePooli tÔttu saab kasutada baassaidena mitte ainult http(s) ressursse, vaid ka, nÀiteks, Amazon Glacierit.

PĂ€rast varukoopia ĂŒleslaadimist glaciaresse saame Upload ID ja kasutame seda URL-ina. NĂ€iteks:

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

NĂŒĂŒd tuginevad uued (diferentsiaal) varukoopiad sellele varukoopiale ja need on lĂŒhemad. PĂ€rast tar'i lahtipakkimist saame vaadata, millele see tugineb:

hashget --info /tmp/unpacked/ list

ja lihtsalt shell-skripti abil alla laadida need failid glaciersist poodi ja kÀivitada tavaline taastamine: hashget -u /tmp/unpacked --pool /tmp/pool

Kas see on seda vÀÀrt?

Lihtsas olukorras maksate lihtsalt vÀhem varukoopiate eest (kui salvestate neid kuskile pilves, mis maksab). VÔib-olla isegi palju vÀhem.

Aga see pole veel kĂ”ik. Hulka muudete kvaliteediks. Saate seda kasutada, et saavutada kvaliteetne varukoopiate uuendus. NĂ€iteks, kuna varukoopiad on nĂŒĂŒd lĂŒhemad - saate teha mitte igakuist varukoopiat, vaid igapĂ€evast. Hoida neid mitte kuue kuu, vaid viie aasta jooksul. Varem hoiti aeglasemas, kuid odavas "kĂŒlmas" salvestuses (Glacier), nĂŒĂŒd saate hoida kuumas, kust varukoopiaid saab alati kiiresti alla laadida ja taastuda minutitega, mitte pĂ€eva.

Saate suurendada varukoopiate sĂ€ilitamise usaldusvÀÀrsust. Kui praegu hoiame neid ĂŒhes salvestuses, siis lĂŒhendades varukoopiate mahtu - saame hoida 2-3 salvestuses ja taluda ilma probleemideta, kui ĂŒks neist kahjustub.

Kuidas proovida ja alustada kasutamist?

KĂŒlastage GitLabi lehte https://gitlab.com/yaroslaff/hashget, installige see ĂŒhe kĂ€sklusega (pip3 install hashget[plugins]) ja lihtsalt loeme ja jĂ€rgime quick-start'i. Arvan, et kĂ”ik lihtsad asjad, mida teha — vĂ”tavad 10-15 minutit. Siis saab proovida oma virtuaalmasinaid tihendada, teha vajadusel hint-faile, et nĂ”rgem tihendamine ei toimuks, mĂ€ngida basseinide, kohaliku hash'i andmebaasi ja hash-serveriga, kui see huvi pakub, ja jĂ€rgmisel pĂ€eval vaadata, kui suur on inkrementaalse varukoopia suurus eelmise pĂ€eva peale.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster