Zvogëloni kopjet rezervë me 99.5% me hashget

hashget - është falas, me burim të hapur heqës dublikues është një mjet i ngjashëm me një arkivues që ju lejon të zvogëloni ndjeshëm madhësinë e kopjeve rezervë, si dhe të organizoni skema rezervë shtesë dhe diferenciale dhe më shumë.

Ky është një artikull përmbledhës për të përshkruar veçoritë. Përdorimi aktual i hashget (mjaft i thjeshtë) përshkruhet në README projekti dhe dokumentacioni wiki.

krahasim

Sipas ligjit të zhanrit, do të filloj menjëherë me intrigën - duke krahasuar rezultatet:

Mostra e të dhënave
madhësia e paketuar
.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% )

Sfondi se çfarë duhet të jetë një kopje rezervë ideale dhe efektive

Sa herë që bëja një kopje rezervë të një makine virtuale të sapokrijuar, më përndiqte ndjenja se po bëja diçka të gabuar. Pse marr një kopje rezervë të madhe nga sistemi, ku krijimtaria ime e paçmuar dhe e padurueshme është një indeks.html me një rresht me tekstin "Përshëndetje botë"?

Pse ka një 16 MB /usr/sbin/mysqld në kopjen time rezervë? A është vërtet e mundur që në këtë botë të kem nderin ta mbaj këtë dosje të rëndësishme dhe nëse dështoj, do të humbasë për njerëzimin? Me shumë mundësi jo. Ai ruhet në serverë debian shumë të besueshëm (besueshmëria dhe vazhdimësia e të cilëve nuk mund të krahasohet me atë që unë mund të siguroj), si dhe në kopje rezervë (miliona prej tyre) të administratorëve të tjerë. A duhet vërtet të krijojmë 10+ kopje të parë të këtij skedari të rëndësishëm për të përmirësuar besueshmërinë?

Në përgjithësi hashget dhe e zgjidh këtë problem. Kur paketohet, krijon një kopje rezervë shumë të vogël. Kur shpaketoni - një sistem plotësisht i paketuar, i ngjashëm me atë që do të ishte nëse tar -c / tar -x. (Me fjalë të tjera, ky është paketim pa humbje)

Si funksionon hashget

hashget ka konceptet Package dhe HashPackage, me ndihmën e tyre kryen deduplication.

paketë (qese plastike). Një skedar (zakonisht një arkiv .deb ose .tar.gz) që mund të shkarkohet në mënyrë të sigurt nga Interneti dhe nga i cili mund të merren një ose më shumë skedarë.

HashPaketa — një skedar i vogël JSON që përfaqëson një Paketë, duke përfshirë URL-në e paketës dhe shumat hash (sha256) të skedarëve prej saj. Për shembull, për një paketë bërthamore të serverit mariadb 5 megabajt, madhësia e paketës hash është vetëm 6 kilobajtë. Rreth një mijë herë më pak.

Dedublikim — Krijimi i një arkivi pa skedarë dublikatë (nëse kopjuesi e di se ku mund të shkarkohet paketa origjinale, ai redukton dublikatat nga arkivi).

Paketimi

Gjatë paketimit, të gjithë skedarët nga drejtoria që paketohen skanohen, llogariten shumat e tyre të hash-it dhe nëse shuma gjendet në një nga HashPackages-et e njohura, atëherë ruhen meta të dhënat rreth skedarit (emri, hash, të drejtat e aksesit, etj.) në një skedar të veçantë .hashget-restore.json, i cili gjithashtu do të përfshihet në arkiv.

Në rastin më të thjeshtë, vetë paketimi nuk duket më i ndërlikuar se katrani:

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

Shpaketimi

Shpaketimi bëhet në dy faza. Së pari shpaketimi i zakonshëm i katranit:

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

pastaj rivendosni nga rrjeti:

hashget -u /path/to/data

Gjatë restaurimit, hashget lexon skedarin .hashget-restore.json, shkarkon paketat e nevojshme, i shpaketon ato dhe nxjerr skedarët e nevojshëm, duke i instaluar në shtigjet e kërkuara, me zotëruesin/grupin/lejet e kërkuara.

Gjëra më të vështira

Ajo që përshkruhet më lart është tashmë e mjaftueshme për ata që "e duan si katrani, por ta paketojnë Debian-in tim në 4 megabajt". Le të shohim gjërat më komplekse më vonë.

Indeksimi

Nëse hashget nuk do të kishte fare një HashPackage të vetme, atëherë thjesht nuk do të ishte në gjendje të fshinte asgjë.

Ju gjithashtu mund të krijoni një HashPackage me dorë (thjesht: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my), por ka një mënyrë më të përshtatshme.

Për të marrë hashpackage-in e nevojshëm, ekziston një fazë indeksimi (ekzekutohet automatikisht me komandën --pack) Dhe heuristike. Kur indeksoni, hashget "ushqen" çdo skedar të gjetur për të gjitha heuristikat e disponueshme që janë të interesuara për të. Heuristics më pas mund të indeksojë çdo paketë për të krijuar një HashPackage.

Për shembull, heuristika Debian pëlqen skedarin /var/lib/dpkg/status dhe zbulon paketat e instaluara të debianit, dhe nëse ato nuk janë të indeksuara (nuk ka HashPackage të krijuar për to), i shkarkon dhe i indekson ato. Rezultati është një efekt shumë i këndshëm - hashget gjithmonë do të fshijë në mënyrë efektive OS-të Debian, edhe nëse ato kanë paketat më të fundit.

Skedarët e këshillave

Nëse rrjeti juaj përdor disa nga paketat tuaja të pronarit ose një paketë publike që nuk përfshihet në heuristikën e hashget-it, mund t'i shtoni atij një skedar të thjeshtë aluzion hashget-hint.json si kjo:

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

Më pas, sa herë që krijohet një arkiv, paketa do të indeksohet (nëse nuk ka qenë më parë), dhe skedarët e paketës do të fshihen nga arkivi. Nuk ka nevojë për programim, gjithçka mund të bëhet nga vim dhe të ruhet në çdo kopje rezervë. Ju lutemi vini re se falë qasjes së shumës hash, nëse disa skedarë nga paketa ndryshohen në nivel lokal (për shembull, një skedar konfigurimi është ndryshuar), atëherë skedarët e ndryshuar do të ruhen në arkiv "siç është" dhe nuk do të shkurtohen.

Nëse disa nga paketat tuaja përditësohen periodikisht, por ndryshimet nuk janë shumë të mëdha, mund të sugjeroni vetëm për versionet kryesore. Për shembull, në versionin 1.0 ata bënë një aluzion duke treguar mypackage-1.0.tar.gz, dhe do të fshihet plotësisht, më pas ata lëshuan versionin 1.1, i cili është paksa i ndryshëm, por aludimi nuk u përditësua. Është në rregull. Vetëm skedarët që përputhen (mund të rikthehen në) versionin 1.0 janë çkopjuar.

Heuristika që përpunon skedarin hint është një shembull i mirë për të kuptuar mekanizmin e brendshëm se si funksionojnë heuristikat. Ai përpunon vetëm skedarët hashget-hint.json (ose .hashget-hint.json me një pikë) dhe injoron të gjithë të tjerët. Nga ky skedar, ai përcakton se cila URL e paketës duhet të indeksohet dhe hashget e indekson atë (nëse nuk e ka bërë tashmë këtë)

HashServer

Do të ishte mjaft e vështirë për të kryer indeksimin e plotë kur krijoni kopje rezervë. Për ta bërë këtë, duhet të shkarkoni çdo paketë, ta shpaketoni dhe ta indeksoni. Prandaj hashget përdor një skemë me HashServer. Kur zbulohet një paketë e instaluar Debian, nëse nuk gjendet në HashPackage lokale, fillimisht bëhet një përpjekje që thjesht të shkarkohet HashPackage nga serveri hash. Dhe vetëm nëse kjo nuk funksionon, vetë hashget shkarkon dhe hash paketën (dhe e ngarkon atë në hashserver, në mënyrë që hashserver ta sigurojë atë në të ardhmen).

HashServer është një element opsional i skemës, jo kritik, ai shërben vetëm për të shpejtuar dhe zvogëluar ngarkesën në depo. Çaktivizohet lehtësisht (opsionale --hashserver pa parametra). Përveç kësaj, ju mund të lehtë bëni hashserverin tuaj.

Rezervimet në rritje dhe diferenciale, vjetrim i planifikuar

hashget e bën shumë të lehtë krijimin e një diagrami kopje rezervë në rritje dhe diferenciale. Pse nuk e indeksojmë vetë kopjen rezervë (me të gjithë skedarët tanë unikë)? Një ekip --submit dhe mbarove! Rezervimi tjetër që krijon hashget nuk do të përfshijë skedarë nga ky arkiv.

Por kjo nuk është një qasje shumë e mirë, sepse mund të rezultojë që gjatë rivendosjes do të duhet të tërheqim të gjitha kopjet rezervë të hashget-it në të gjithë historinë (nëse secili përmban të paktën një skedar unik). Ekziston një mekanizëm për këtë vjetërsimi i planifikuar i kopjeve rezervë. Kur indeksoni, mund të specifikoni datën e skadimit të HashPackage --expires 2019-06-01, dhe pas kësaj date (nga ora 00:00), nuk do të përdoret. Vetë arkivi nuk mund të fshihet pas kësaj date (Edhe pse hashget mund të tregojë me lehtësi URL-të e të gjitha kopjeve rezervë që janë/do të jenë të kalbura në këtë moment ose në çdo datë).

Për shembull, nëse bëjmë një kopje rezervë të plotë në datën 1 dhe e indeksojmë atë me një jetëgjatësi deri në fund të muajit, do të marrim një skemë rezervë diferenciale.

Nëse indeksojmë kopjet rezervë të reja në të njëjtën mënyrë, do të ketë një skemë të kopjeve rezervë shtesë.

Ndryshe nga skemat tradicionale, hashget ju lejon të përdorni burime të shumta themelore. Rezervimi do të reduktohet si duke reduktuar skedarët nga kopjet rezervë të mëparshme (nëse ka) ashtu edhe nga skedarët publikë (çfarë mund të shkarkohet).

Nëse për ndonjë arsye nuk i besojmë besueshmërisë së burimeve të Debian (https://snapshot.debian.org/) ose përdor një shpërndarje tjetër, ne thjesht mund të bëjmë një kopje rezervë të plotë një herë me të gjitha paketat, dhe më pas të mbështetemi në të (duke çaktivizuar heuristikat). Tani, nëse të gjithë serverët e shpërndarjeve tona rezultojnë të padisponueshëm për ne (në internetin e suvenireve ose gjatë një apokalipsi zombie), por rezervat tona janë në rregull, ne mund të rikuperojmë nga çdo kopje rezervë e shkurtër e ndryshimit që mbështetet vetëm në kopjet rezervë të mëparshme. .

Hashget mbështetet vetëm në burime të besueshme rikuperimi sipas gjykimit TUAJ. Do të përdoren ato që ju i konsideroni të besueshme.

FilePool dhe Glacier

mekanizëm FilePool ju lejon të mos kontaktoni vazhdimisht serverë të jashtëm për të shkarkuar paketa, por të përdorni paketa nga një direktori lokale ose server i korporatës, për shembull:

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

ose

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

Për të krijuar një grup në një direktori lokale, ju vetëm duhet të krijoni një drejtori dhe të hidhni skedarë në të, vetë hashget do të gjejë atë që i nevojitet duke përdorur hash-et. Për ta bërë grupin të aksesueshëm nëpërmjet HTTP, duhet të krijoni lidhjet simbolike në një mënyrë të veçantë; kjo bëhet me një komandë (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool). Vetë HTTP FilePool është skedar statik, kështu që çdo server i thjeshtë në internet mund ta shërbejë atë, ngarkesa në server është pothuajse zero.

Falë FilePool, ju mund të përdorni jo vetëm burimet http(s) si burime bazë, por gjithashtu për shembull,Akullnaja e Amazonës.

Pas ngarkimit të kopjes rezervë në akullnajë, marrim ID-në e ngarkimit të saj 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 rezervat e reja (diferenciale) do të bazohen në këtë kopje rezervë dhe do të jenë më të shkurtra. Pas shpaketimit të diffbackup-it, ne mund të shohim se në cilat burime mbështetet:

hashget --info /tmp/unpacked/ list

dhe thjesht përdorni një skript shell për të shkarkuar të gjithë këta skedarë nga Glacier në pishinë dhe ekzekutoni rikuperimin e zakonshëm: hashget -u /tmp/unpacked —pool /tmp/pool

A ia vlen loja qiriun?

Në rastin më të thjeshtë, thjesht do të paguani më pak për kopje rezervë (nëse i ruani ato diku në re për para). Ndoshta shumë, shumë më pak.

Por kjo nuk është e vetmja gjë. Sasia kthehet në cilësi. Ju mund ta përdorni këtë për të marrë një përmirësim me cilësi të lartë në skemën tuaj rezervë. Për shembull, meqenëse kopjet rezervë tani janë më të shkurtra, ne mund të bëjmë jo kopje rezervë mujore, por ato ditore. Ruani ato jo për gjashtë muaj, si më parë, por për 5 vjet. Më parë, e ruani në ruajtje "të ftohtë" të ngadaltë, por të lirë (Glacier), tani mund ta ruani në ruajtje të nxehtë, nga ku gjithmonë mund të shkarkoni shpejt një kopje rezervë dhe ta rivendosni atë në minuta, jo në një ditë.

Mund të rrisni besueshmërinë e ruajtjes së rezervës. Nëse aktualisht i ruajmë në një hapësirë ​​magazinimi, atëherë duke ulur volumin e rezervave, do të jemi në gjendje t'i ruajmë në 2-3 ambiente magazinimi dhe të mbijetojmë pa dhimbje nëse njëri prej tyre dëmtohet.

Si të provoni dhe të filloni të përdorni?

Shkoni në faqen gitlab https://gitlab.com/yaroslaff/hashget, instaloni me një komandë (pip3 install hashget[plugins]) dhe thjesht lexoni dhe ekzekutoni fillimin e shpejtë. Unë mendoj se do të duhen 10-15 minuta për të bërë të gjitha gjërat e thjeshta. Pastaj mund të provoni të kompresoni makinat tuaja virtuale, të krijoni skedarë aludimi nëse është e nevojshme për ta bërë më të fortë kompresimin, të luani me grupe, një bazë të dhënash hash lokale dhe një server hash nëse jeni të interesuar, dhe të nesërmen shikoni madhësinë e rezervës shtesë. do të jetë në krye të së djeshmes.

Burimi: www.habr.com

Shto një koment