Si t’i reduktoni backup-et me 99.5% me hashget

hashget — Ă«shtĂ« njĂ« mjet falas me burim tĂ« hapur deduplication — njĂ« mjet i ngjashĂ«m me njĂ« arkivues, i cili lejon tĂ« reduktojĂ« ndjeshĂ«m madhĂ«sinĂ« e backup-eve, si dhe tĂ« organizojĂ« skema tĂ« backup-it incremental dhe diferencial dhe jo vetĂ«m.

Ky është një artikull përmbledhës për të përshkruar mundësitë. Përdorimi i vetë hashget (mjaft i thjeshtë) përshkruhet në README projektin dhe wiki-dokumentacionin.

Krahasimi

Sipas ligjit tĂ« zhanrit, do tĂ« filloj menjĂ«herĂ« me intrigĂ«n — krahasimin e rezultateve:

Shembulli i të dhënave
madhësia e paketuara
.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) VM LXC
724 Mb
165 Mb ( 23% )
4.1 Mb ( 0.5% )

Historia, si duhet të jetë një backup ideal dhe efektiv

Çdo herĂ« qĂ« bĂ«ja njĂ« backup tĂ« njĂ« maqeje tĂ« sapo krijuar, nuk mĂ« linte rehat ndjenja se po bĂ«nja diçka gabim. Pse po merrja njĂ« backup tĂ« madh nga sistemi, ku krijimi im tĂ« vyer nuk Ă«shtĂ« gjĂ« tjetĂ«r veçse njĂ« index.html me tekstin "Hello world"?

Pse nĂ« backup-in tim ndodhet 16-megabajtori /usr/sbin/mysqld? A Ă«shtĂ« vĂ«rtet nĂ« kĂ«tĂ« botĂ« qĂ« mĂ« Ă«shtĂ« caktuar mua tĂ« ruaj kĂ«tĂ« dosje kaq tĂ« rĂ«ndĂ«sishme, dhe nĂ«se nuk e bĂ«j, ajo do tĂ« humbasĂ« pĂ«r njerĂ«zimin? Besoj se jo. Ajo ruhet nĂ« servera shumĂ« tĂ« besueshĂ«m debian (besueshmĂ«ria dhe qĂ«ndrueshmĂ«ria e tĂ« cilĂ«ve nuk pĂ«rputhen me atĂ« qĂ« mund tĂ« ofroj unĂ«), si dhe nĂ« backup-e (mijĂ«ra mundĂ«si) tĂ« tjera administruesish. A duhet t’i krijojmĂ« me tĂ« vĂ«rtetĂ« pĂ«r tĂ« rritur besueshmĂ«rinĂ« 10 000 000 + 1 kopjen e kĂ«saj dosje kaq tĂ« rĂ«ndĂ«sishme?

NĂ« thelb hashget e zgjidh kĂ«tĂ« problem. Kur paketohet — krijon njĂ« backup shumĂ« tĂ« vogĂ«l. Kur pĂ«rpunohet — njĂ« sistem tĂ« plotĂ« tĂ« rikthyer, ngjashĂ«m me atĂ« qĂ« do tĂ« ishte kur tar -c / tar -x. (NĂ« fjalĂ« tĂ« tjera, kjo Ă«shtĂ« paketim pa humbje)

Si funksionon hashget

Në hashget ka koncepte si Package dhe HashPackage, me ndihmën e të cilëve realizohet deduplication.

Pako (paketë). Një skedar (zakonisht arkivi .deb ose .tar.gz), i cili mund të shkarkohet me siguri nga rrjeti, dhe nga i cili mund të marrësh një ose më shumë skedarë.

HashPackage — njĂ« skedari JSON i vogĂ«l, qĂ« pĂ«rfaqĂ«son Package, duke pĂ«rfshirĂ« URL-nĂ« e paketĂ«s dhe checksumet (sha256) e skedarĂ«ve tĂ« saj. PĂ«r shembull, pĂ«r paketĂ«n mariadb-server-core me madhĂ«sinĂ« 5 megabajt, madhĂ«sia e hashpackage Ă«shtĂ« vetĂ«m 6 kilobajt. Kryesisht njĂ« mijĂ« herĂ« mĂ« e vogĂ«l.

Dedupikimi — krijimi i njĂ« arkivi pa skedarĂ« tĂ« dubluar (nĂ«se deduplication e di se nga mund tĂ« shkarkohet origjinali, ai redukton dublikatet nga arkivi).

Paketa

Kur paketimi, shikohen të gjitha skedarët nga katalogu i paketuar, llogariten hash-summat e tyre, dhe nëse një shumë gjendet në një nga HashPackage e njohura, metadatet për skedarin (emri, hash, të drejtat e aksesit etj.) ruhen në një skedar të veçantë .hashget-restore.json, i cili gjithashtu do të përfshihet në arkiv.

Paketimi vetë në rastin më të thjeshtë duket jo më i komplikuar se tar-i:

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

Shkëputja

Shkëputja bëhet në dy faza. Në fillim, shkëputja normale tar:

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

pastaj rikuperimi nga rrjeti:

hashget -u /path/to/data

Kur rikuperon, hashget lexon skedarin .hashget-restore.json, shkarkon paketat e nevojshme, i shkëput ato dhe i nxjerr skedarët e nevojshëm, duke i vendosur ato në rrugët e nevojshme, me pronar/grup/të drejta të nevojshme.

Gjërat më të komplikuara

Ajo që është përshkruar më sipër është mjaftueshëm për ata që "duan si tar, por që të paketojë Debian-in tim në 4 megabajtë". Më pas do të shohim gjëra më të komplikuara.

Indeksimi

Nëse hashget nuk kishte asnjë HashPackage, ai thjesht nuk do të mund të deduplikohej.

Krijimi i HashPackage mund të bëhet edhe dorazi (thjesht: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my), por ka një rrugë më të lehtë.

Për të marrë HashPackage-ët e nevojshëm, ka një fazë indeksimi (ai automatikisht ekzekutohet kur jepet komandë --pack) dhe heuristikat. Gjatë indeksimit, hashget "i jep" çdo skedar të gjetur të gjitha heuristikat ekzistuese që e interesojnë. Heuristikat më pas mund të indeksojnë një Package, për të krijuar HashPackage.

Për shembull, heuristika debiane pëlqen skedarin /var/lib/dpkg/status dhe zbulon paketat debiane të instaluara, dhe nëse ato nuk janë indeksuar (nuk janë krijuar HashPackage për to), i shkarkon dhe i indeksuon. Rezulton një efekt shumë të këndshëm - hashget gjithmonë do të jetë efektiv në deduplikuar sistemet operuese debiane, edhe nëse ato kanë paketat më të reja.

Skedaret-hint (në ndihmë)

Nëse në rrjetin tuaj përdoret ndonjë paketë e juaja pronësore ose një paketë publike që nuk është përfshirë në heuristikat hashget, mund të shtoni një skedar të thjeshtë hint-hint hashget-hint.json sipas shembujve:

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

Pashtu, çdo herĂ« qĂ« krijoni njĂ« arkiv, paketa do tĂ« indeksohet (nĂ«se nuk Ă«shtĂ« indeksuar mĂ« parĂ«), dhe skedarĂ«t e paketĂ«s do tĂ« dedupikohen nga arkivi. Nuk kĂ«rkohet asnjĂ« programim, gjithçka mund tĂ« bĂ«het nga vim dhe tĂ« kurseni nĂ« çdo kopje rezervĂ«. VĂ«reni se pĂ«r shkak tĂ« qasjes pĂ«rmes hash-summave, nĂ«se disa skedarĂ« tĂ« paketĂ«s janĂ« ndryshuar lokalisht (p.sh., skedari i konfigurimit Ă«shtĂ« ndryshuar) — atĂ«herĂ« skedarĂ«t e ndryshuar do tĂ« ruajnĂ« nĂ« arkiv "siç janĂ«", nuk do tĂ« shkurtohen.

Nëse ndonjë paketë tuajaj e vetëazhuar përditësohet herë pas here, por ndryshimet nuk janë shumë të mëdha, mund të bëni hint vetëm për versionet kryesore. Për shembull, në versionin 1.0 bëni një hint duke treguar mypackage-1.0.tar.gz, dhe ajo do të dedupikohet plotësisht, pastaj është lëshuar versioni 1.1, i cili është pak ndryshe, dhe hint-i nuk është përditësuar. Asgjë e keqe. Dedupikohen vetëm skedarët që përputhen (të cilët mund të rikuperohen) me versionin 1.0.

Heuristika që përpunon skedarin hint është një shembull i mirë për të kuptuar mekanizmin e brendshëm të funksionimit të heuristikave. Ajo përpunon vetëm skedarët hashget-hint.json (ose .hashget-hint.json me pikën) dhe injoron të tjerët. Nëpërmjet këtij skedari ai përcakton se cili URL i paketës duhet të indeksohet, dhe hashget e indeksin (nëse nuk ka ndodhur më parë).

HashServer

Do tĂ« ishte mjaft e lodhshme qĂ«, gjatĂ« krijimit tĂ« kopjeve rezervĂ«, tĂ« kryhej indeksoni plotĂ«sisht. PĂ«r kĂ«tĂ« duhet tĂ« shkarkohet çdo paketĂ«, tĂ« ç'paketohet, tĂ« indeksohet. Prandaj, hashget pĂ«rdor njĂ« skemĂ« me HashServer. Kur zbulohet njĂ« paketĂ« debian tĂ« instaluar, nĂ«se nuk gjendet nĂ« HashPackage lokale, fillimisht bĂ«het njĂ« pĂ«rpjekje thjesht pĂ«r tĂ« shkarkuar HashPackage nga hash-serveri. Dhe vetĂ«m nĂ«se kjo nuk arrin — hashget vetĂ« shkarkon dhe hashon paketĂ«n (dhe e ngarkon nĂ« hashserver pĂ«r ta ofruar mĂ« vonĂ«).

HashServer — nuk Ă«shtĂ« njĂ« element i detyrueshĂ«m i skemĂ«s, nuk Ă«shtĂ« kritik, shĂ«rben ekskluzivisht pĂ«r tĂ« pĂ«rshpejtuar dhe ulur ngarkesĂ«n nĂ« depo. LehtĂ« deaktivizohet (me opsionin --hashserver pa parametra). PĂ«r mĂ« tepĂ«r, Ă«shtĂ« e lehtĂ« tĂ« krijoni hashserver tuaj.

Backup-e inkrementale dhe diferencuese, vjetërsimi i planifikuar

hashget lejon shumë lehtë të formoni një skemë backup-e inkrementale dhe diferencuese. Pse të mos indeksojmë kopjen tonë (me të gjithë skedarët tanë unikë)? Një komandë --submit Dhe çdo gjë është gati! Backup-i tjetër që do të krijojë hashget nuk do të përfshijë skedarët nga ky arkiv.

Por kjo nuk është një qasje shumë e mirë, sepse mund të ndodhë që gjatë rikuperimit të kemi nevojë të tërheqim të gjithë backup-et hashget për tërë historinë (nëse në secilin do të ketë të paktën një skedar unik). Për këtë ekziston mekanizmi i skadencës të planifikuar të backup-eve. Kur indeksoni, mund të stipuloni datën e skadencës HashPackage --expires 2019-06-01, dhe me kalimin e kësaj date (nga 00:00), ai nuk do të përdoret. Vetë arkivi mund të mos fshihet pas kësaj date (Megjithatë, hashget mund ta tregojë lehtësisht URL-të e të gjithë backup-eve që kemi skaduar/skadueshëm deri në këtë moment ose në çdo datë tjetër).

Për shembull, nëse bëjmë një backup të plotë më 1, dhe e indeksojmë atë me një jetëgjatësi deri në fund të muajit - ne do të merrnim një skemë të backup-it diferencial.

Nëse gjithashtu do t'i indeksonim dhe backup-et e reja - do të ishte një skemë e backup-it inkremental.

Ndryshe nga skemat tradicionale, hashget lejon përdorimin e disa burimeve bazë. Backup-i do të reduktohet edhe për shkak të reduktimit të skedarëve nga backup-et e mëparshme (nëse ka), dhe për shkak të skedarëve publikë (ato që mund të shkarkohen).

Nëse për ndonjë arsye nuk u besojmë burimeve të besueshëm të Debianit (https://snapshot.debian.org/) ose përdorim një shpërndarje tjetër, ne thjesht mund të bëjmë një herë një backup të plotë me të gjithë paketat, dhe më pas të mbështetemi në të (duke çaktivizuar heuristikën). Tani, nëse të gjitha serverët e shpërndarjeve tona rezultojnë të jenë të paqasshëm (në internetin e souvenir-ëve ose gjatë një zombie-apokalipse), por backup-et tona janë në rregull - do të mund të rikuperohemi nga ndonjë backup të shkurtër diferencial, duke u mbështetur vetëm në backup-et tona më të hershme.

Hashget mbĂ«shtetet vetĂ«m nĂ« burime tĂ« besueshme rikuperimi sipas DËSHIRËS SUAJ. ÇfarĂ«do qĂ« mendoni se Ă«shtĂ« pĂ«r tĂ« besuar - ato do tĂ« pĂ«rdoren.

FilePool dhe Glacier

Mekanizmi FilePool lejon që të mos keni nevojë të kontaktoni vazhdimisht serverët e jashtëm për të shkarkuar paketat, por të përdorni paketat nga katalogu lokal ose serveri korporativ, për shembull:

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

ose

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

Për të krijuar një pool në katalogun lokal, mjafton të krijoni thjesht një katalog dhe të hedhni disa skedarë në të, hashget do të gjejë gjithçka që i nevojitet përmes hash-eve.hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool. HTTP FilePool është skedarë statikë, kështu që mund të shërbehet nga çdo server web të thjeshtë, ngarkesa në server është pothuajse zero.

Falë FilePool, si burime bazë mund të përdoren jo vetëm burime në http(s), por edhe, p.sh., Amazon Glacier.

Pas ngarkimit të backup-it në Glacier, marrim ID-në e Ngarkimit dhe e përdorim atë si URL. Për shembull:

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

Tani backup-et e reja (diferenciale) do të mbështeten në këtë backup dhe do të jenë më të shkurtër. Pas shpërndarjes së backup-it diferencial, mund të shohim se në cilat burime mbështetet:

hashget --info /tmp/unpacked/ list

dhe thjesht me një skript shell të shkarkojmë të gjitha këto skedarë nga Glacier në pool dhe të fillojmë rikuperimin e zakonshëm: hashget -u /tmp/unpacked --pool /tmp/pool

Vlen apo jo puna?

Në rastin më të thjeshtë, do të paguani më pak për backup-et (nëse i ruani diku në re për para). Mund të jetë - shumë-më pak.

Por kjo nuk është e vetmja. Sasia kalon në cilësi. Mund ta përdorni këtë për të marrë një përmirësim të cilësisë së skemës së backup-it. Për shembull, tani që backup-et tanë janë më të shkurtër - mund të bëjmë një backup të përditshëm, jo një backup mujor. T'i ruajmë ato jo për gjashtë muaj si më parë, por për 5 vjet. Më parë i ruanim në një depo të ngadalshme por të lirë (Glacier), tani mund të ruajmë në një depo të ngrohtë, nga e cila mund të shkarkojmë shpejt një backup dhe të rikuperohemi brenda minutash, jo brenda një dite.

Mund të rrisim besueshmërinë e ruajtjes së backup-eve. Nëse tani i ruajmë ata në një depo, duke reduktuar vëllimin e backup-eve - do të jemi në gjendje të ruajmë në 2-3 depo dhe të kalojmë pa dhimbje nëse njëra prej tyre dëmtohet.

Si të provojmë dhe fillojmë ta përdorim?

Shkojmë në faqen e gitlab-it https://gitlab.com/yaroslaff/hashget, e instalojmë me një komandë (pip3 install hashget[plugins]) dhe thjesht lexojmë-ekzekutojmë quick-start. Mendoj se do të zgjasë vetëm 10-15 minuta për të bërë gjërat e thjeshta. Më pas, mund të provoni të kompresoni virtualkat tuaj, të krijoni, nëse është e nevojshme, skedarë hint për të bërë presion më të madh, të luani me pool-et, bazën lokale të hasheve dhe serverin e hasheve, nëse do të jeni të interesuar, dhe nesër të shikoni se cila do të jetë madhësia e backup-it inkremental mbi atë të djeshmen.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster