Ruajtje backup për mijëra makina virtuale me mjete të lira

Ruajtje backup për mijëra makina virtuale me mjete të lira

Përshëndetje, kohët e fundit më ra në dorë një detyrë interesante për të konfiguruar një ruajtje për backup-in e një sërë të madhe të pajisjeve blok.

Çdo javë ne bëjmë kopje rezervë të të gjitha makinave virtuale në cloud-in tonë, kështu që duhet të jemi në gjendje të menaxhojmë mijëra kopje rezervë dhe ta bëjmë këtë sa më shpejt dhe efikasht.

Fatkeqësisht, konfigurimet standarde RAID5, RAID6 në këtë rast nuk na përshtaten për shkak se procesi i rikuperimit në disqe të tillë të mëdhenj si tonat do të ishte shumë i gjatë dhe me siguri nuk do të përfundojë kurrë.

Le të shqyrtojmë cilat janë alternativat:

Erasure Coding — Analogu i RAID5, RAID6, por me një nivel të konfigurueshëm pariteti. Në këtë rast, rezervimi nuk bëhet për çdo blok, por për secilin objekt veçmas. Mënyra më e thjeshtë për të provuar erasure coding është të vendosni minio.

DRAID — kjo është një mundësi që nuk është lëshuar ende për ZFS. Ndryshe nga RAIDZ, DRAID ka një paritet të shpërndarë dhe gjatë rikuperimit angazhon menjëherë të gjitha disqet e grumbullit, duke e bërë atë më të qëndrueshëm ndaj dështimeve të disqeve dhe më të shpejtë në rikuperim pas një defekti.

Ruajtje backup për mijëra makina virtuale me mjete të lira

Ruajtje backup për mijëra makina virtuale me mjete të lira

Në dispozicion kemi një server Fujitsu Primergy RX300 S7 me procesor Intel Xeon CPU E5-2650L 0 @ 1.80GHz, me nëntë modulet e memories Samsung DDR3-1333 8Gb PC3L-10600R ECC Registered (M393B1K70DH0-YH9), raft diskesh Supermicro SuperChassis 847E26-RJBOD1, i lidhur përmes Dual LSI SAS2X36 Expander dhe 45 disqe Seagage ST6000NM0115-1YZ110 për 6TB çdo.

Para se të marrim vendime, na nevojitet të testojmë gjithçka siç duhet.

Për këtë, u përgatita dhe kreva teste të konfiguracioneve të ndryshme. Përdora minio, i cili shërbeu si një backend S3 dhe e drejtoja në mënyra të ndryshme me numra të ndryshëm targetesh.

Këtu kryesisht u testua rasti i minio në kodimin e shkatërrimit në krahasim me RAID-në softuerike me të njëjtin numër disqesh dhe disqe pariteti, të cilat janë: RAID6, RAIDZ2 dhe DRAID2.

Për referencë: kur e drejtoni minion me një vetëm target, atëherë minio funksionon në modalitetin S3-gateway duke ju dhënë sistemin tuaj lokal të skedarëve si një ruajtje S3. Nëse e drejtoni minion me shumë targete, modaliteti i Kodimit të Shkatërrimit aktivizohet automatikisht, i cili do të shpërndajë të dhënat midis targeteve tuaja duke ofruar qëndrushmëri ndaj dështimeve.

Në mënyrë standarde, minio ndan qëllimet në grupe prej 16 disqesh, ku çdo grup ka 2 paritet. Kjo do të thotë që dy disqe mund të dështojnë në të njëjtën kohë pa humbje të të dhënave.

Për testimin e performancës, përdora 16 disqe me nga 6TB secili dhe shkruaja objekte të vogla me madhësi 1MB, kjo përshkruante me saktësi ngarkesën tonë të ardhshme, pasi të gjithë mjetet moderne për backup ndaj të dhënave i ndajnë ato në blloqe disa megabajtesh dhe i shkruajnë në këtë mënyrë.

Për kryerjen e bënchmarkut u përdor utilitari s3bench, i cili u ekzekutua në një server të largët dhe dërgonte në minio dhjetëra mijëra objekte të tilla në një qind rrjedha. Pasi që u përpoq të kërkonte ato përsëri në të njëjtën mënyrë.

Rezultatet e bënchmarkut janë në tabelën e mëposhtme:

Ruajtje backup për mijëra makina virtuale me mjete të lira

Siç e shohim, minio në modin e vet erasure coding punon ndjeshëm më keq në shkrim, se sa minio i lançuar mbi RAID6 softueror, RAIDZ2 dhe DRAID2 në të njëjtën konfigurim.

Veçmas, unë u kërkova të testoja minio mbi ext4 vs XFS. Çuditërisht, për llojin tim të ngarkesës, XFS rezultoi të ishte ndjeshëm më e ngadaltë se ext4.

Në grupin e parë të testeve, Mdadm tregoi përparësi mbi ZFS, por më vonë gmelikov ka sugjerova, se mund të përmirësoj performancën e ZFS duke vendosur opsionet e mëposhtme:

xattr=sa atime=off recordsize=1M

dhe pas kësaj testet me ZFS u përmirësuan nd significantlyeshëm.

Gjithashtu, mund të vërehet se DRAID nuk ofron ndonjë përfitim të veçantë në performancë krahasuar me RAIDZ, por në teori duhet të jetë shumë më i sigurt.

Në dy testet e fundit, përpiqesha gjithashtu të shpërngulja metadatat (special) dhe ZIL (log) në një pasqyrë nga SSD. Por shpërngulja e metadatat nuk dha ndonjë përfitim të dukshëm në shpejtësinë e shkruajtur, dhe kur shpërngulja e ZIL, unë SSDSC2KI128G8 u ndesha me një kufi me 100% të përdorimit, kështu që unë e konsideroj këtë test si të dështuar. Nuk përjashtoj që po të kisha SSD më të shpejtë, ndoshta kjo do të përmirësonte ndjeshëm rezultatet e mia, por fatkeqësisht nuk i kisha.

Në fund, vendosa të ndalem në përdorimin e DRAID dhe pavarësisht statusit të tij beta, ai është zgjidhja më e shpejtë dhe efikase për ruajtje në rastin tonë.

Krijova një DRAID2 të thjeshtë në konfigurimin me tre grupe dhe dy rezervat e shpërndara:

# zpool status data
  pool: data
 state: ONLINE
  scan: none requested
config:

    NAME                 STATE     READ WRITE CKSUM
    data                 ONLINE       0     0     0
      draid2:3g:2s-0     ONLINE       0     0     0
        sdy              ONLINE       0     0     0
        sdam             ONLINE       0     0     0
        sdf              ONLINE       0     0     0
        sdau             ONLINE       0     0     0
        sdab             ONLINE       0     0     0
        sdo              ONLINE       0     0     0
        sdw              ONLINE       0     0     0
        sdak             ONLINE       0     0     0
        sdd              ONLINE       0     0     0
        sdas             ONLINE       0     0     0
        sdm              ONLINE       0     0     0
        sdu              ONLINE       0     0     0
        sdai             ONLINE       0     0     0
        sdaq             ONLINE       0     0     0
        sdk              ONLINE       0     0     0
        sds              ONLINE       0     0     0
        sdag             ONLINE       0     0     0
        sdi              ONLINE       0     0     0
        sdq              ONLINE       0     0     0
        sdae             ONLINE       0     0     0
        sdz              ONLINE       0     0     0
        sdan             ONLINE       0     0     0
        sdg              ONLINE       0     0     0
        sdac             ONLINE       0     0     0
        sdx              ONLINE       0     0     0
        sdal             ONLINE       0     0     0
        sde              ONLINE       0     0     0
        sdat             ONLINE       0     0     0
        sdaa             ONLINE       0     0     0
        sdn              ONLINE       0     0     0
        sdv              ONLINE       0     0     0
        sdaj             ONLINE       0     0     0
        sdc              ONLINE       0     0     0
        sdar             ONLINE       0     0     0
        sdl              ONLINE       0     0     0
        sdt              ONLINE       0     0     0
        sdah             ONLINE       0     0     0
        sdap             ONLINE       0     0     0
        sdj              ONLINE       0     0     0
        sdr              ONLINE       0     0     0
        sdaf             ONLINE       0     0     0
        sdao             ONLINE       0     0     0
        sdh              ONLINE       0     0     0
        sdp              ONLINE       0     0     0
        sdad             ONLINE       0     0     0
    spares
      s0-draid2:3g:2s-0  AVAIL   
      s1-draid2:3g:2s-0  AVAIL   

errors: No known data errors

Mirë, me ruajtjen u merret, tani për atë se çfarë do të bënë backup. Këtu menjëherë do të doja të flisja për tri zgjidhje që arrin të provoj, dhe ato janë:

Benji Backup — fork Backy2, një zgjidhje e specializuar për backup-in e pajisjeve bllokuese, ka një integrim të ngushtë me Ceph. Mund të marrë diferencat midis snapshot-eve dhe të formojë një backup inkremental prej tyre. Mbështet një numër të madh backend-esh për ruajtjen, mes të cilave ka si lokale ashtu edhe S3. Kërkon një bazë të veçantë të dhash, për të ruajtur tabelën e heshave për deduplication. Nga disavantazhet: është shkruar në python, ka një interface CLI disi jo të përgjegjshëm.

Borg Backup — fork Attic, një mjet i njohur dhe i provuar për backup, mund të bëjë backup të të dhënave dhe i deduplication ato mirë. Mund të ruajë backup-et si lokalisht ashtu edhe në një server të largët përmes scp. Mund të bëjë backup të pajisjeve bllokuese nëse ekzekutohet me flagun --special, nga disavantazhet: kur krijohet një backup, repository plotësisht bllokohet, prandaj për çdo makinë virtuale rekomandohet të krijohet një repository i veçantë, në parim kjo nuk është një problem, pasi ato krijohen shumë lehtë.

Restic — një projekt në rritje aktiv, i shkruar në go, mjaft i shpejtë dhe mbështet një numër të madh backend-esh për ruajtje, përfshirë si ruajtjen lokale ashtu edhe scp, S3 dhe shumë të tjera. Vlen të theksohet se ka një rest-server e krijuar posaçërisht për restic, e cila lejon eksportimin më të shpejtë të ruajtjes për përdorim të largët. Nga të gjitha të mësipërmet, më pëlqeu më shumë. Mund të bëjë backup nga stdin. Nuk ka disavantazhe të dukshme, por ka disa veçori:

  • Së pari, kam provuar ta përdor këtë në mënyrë të përgjithshme për të gjitha virtualet (si Benji) dhe kjo përveç se punoi mirë, operacionet e rikuperimit zgjatën mjaft gjatë, pasi çdo herë para rikuperimit, restic përpiqet të lexojë metadata-t e të gjitha backup-eve. Ky problem u zgjidh lehtësisht, si me borg, duke krijuar një depo të veçantë për secilën virtuale. Ky qasje doli të ishte shumë efektiv gjithashtu për menaxhimin e kopjeve rezervë. Depo të veçanta mund të kenë një fjalëkalim të veçantë për qasje në të dhëna dhe gjithashtu mund të mos kemi frikë se depo globale mund të dështojë ndonjëherë. Krijimi i depot të reja është po aq i lehtë sa në borg backup.

    Në çdo rast, deduplication bëhet vetëm në raport me versionin e mëparshëm të backup-it, backup-i i mëparshëm përcaktohet nga path për backup-in e caktuar, kështu që nëse po backuponi objekte të ndryshme nga stdin në një depo të përbashkët, mos harroni të shënoni opsionin --stdin-filename, ose të shënoni qartë çdo herë opsionin --parent.

  • Në anën tjetër, rikthimi në stdout merr shumë më tepër kohë sesa rikthimi në sistemin e skedarëve për shkak të paraleleve të tij. Në të ardhmen, është planifikuar të shtohet mbështetje më e ngushtë për backup-et për pajisjet bllok.

  • Në anën e tretë, për momentin rekomandohet të përdoret versioni nga master, pasi versioni 0.9.6 ka një defekt me rikthimin e ngadaltë të skedave të mëdhenj.

Për të testuar efektivitetin e backup-it dhe shpejtësinë e shkrimit / rikthimit nga rezervimi, krijova një repository të veçantë dhe provoja të bënte backup një imazh të vogël të makinerisë virtuale (21 GB). U kryen dy backup-e pa ndryshuar origjinalin, duke përdorur secilën nga zgjidhjet e listuara për të verifikuar se sa më shpejt / ngadalë kopjohen të dhënat e deduplikuara.

Ruajtje backup për mijëra makina virtuale me mjete të lira

Siç mund të vërejmë, Borg Backup ka koeficientin më të mirë të efikasitetit në backup-in e parë, por humbet në shpejtësi si në shkrim ashtu dhe në rikthim.

Restic u tregua më i shpejtë se Benji Backup, por rikthen ngadalë në stdout, dhe të shkruajë drejtpërdrejt në pajisjen bllok, për fat të keq, nuk e di ende.

Pas pesha të gjitha pro dhe kundra, vendosa të ndalem në restic me rest-server si zgjidhja më komode dhe premtuese për backup.

Ruajtje backup për mijëra makina virtuale me mjete të lira

Në këtë skrin kast ju mund të shihni si një kanali 10-gigabit shfrytëzohet plotësisht gjatë disa operacioneve të backup-it që bëhen njëkohësisht. Vlen të theksohet se shfrytëzimi i diskëve gjatë kësaj kohe nuk kalon 30%.

Jam shumë i kënaqur me zgjidhjen e marrë!

Burimi: habr.com

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster