Varnostno shranjevanje za tisoče virtualnih strojev z uporabo brezplačnih orodij

Varnostno shranjevanje za tisoče virtualnih strojev z uporabo brezplačnih orodij

Pozdravljeni, pred kratkim sem naletel na zanimivo težavo: nastavitev pomnilnika za varnostno kopiranje velikega števila blokovnih naprav.

Vsak teden naredimo varnostno kopijo vseh virtualnih strojev v našem oblaku, zato moramo biti sposobni vzdrževati na tisoče varnostnih kopij in to čim hitreje in učinkoviteje.

Na žalost standardne konfiguracije RAID5, RAID6 v tem primeru nam tega ne bodo dovolili, saj bo proces obnove na tako velikih diskih, kot je naš, mučno dolg in se najverjetneje ne bo nikoli končal.

Poglejmo, katere alternative obstajajo:

Kodiranje izbrisa — Podobno kot RAID5, RAID6, vendar z nastavljivo stopnjo paritete. V tem primeru se rezervacija izvaja ne blok za blokom, ampak za vsak objekt posebej. Najlažji način, da preizkusite kodiranje za brisanje, je razširitev Minio.

DRAID je trenutno neobjavljena funkcija ZFS. Za razliko od RAIDZ ima DRAID porazdeljen paritetni blok in med obnovitvijo uporablja vse diske polja hkrati, zaradi česar bolje preživi okvare diskov in hitreje obnovi po okvari.

Varnostno shranjevanje za tisoče virtualnih strojev z uporabo brezplačnih orodij

Varnostno shranjevanje za tisoče virtualnih strojev z uporabo brezplačnih orodij

Strežnik na voljo Fujitsu Primergy RX300 S7 s procesorjem Intel Xeon CPU E5-2650L 0 @ 1.80 GHz, devet palic RAM-a Samsung DDR3-1333 8Gb PC3L-10600R registriran ECC (M393B1K70DH0-YH9), polica za diske Supermicro SuperChassis 847E26-RJBOD1, povezan prek Dual LSI SAS2X36 Expander in 45 diskov Seagage ST6000NM0115-1YZ110 o 6TB vsem.

Preden se karkoli odločimo, moramo najprej vse pravilno preizkusiti.

Za to sem pripravil in preizkusil različne konfiguracije. Za to sem uporabil minio, ki je deloval kot zaledje S3 in ga zagnal v različnih načinih z različnim številom ciljev.

V bistvu je bilo ohišje minio preizkušeno v erasure coding vs software raid z enakim številom diskov in pariteto diskov in to so: RAID6, RAIDZ2 in DRAID2.

Za referenco: ko zaženete minio samo z enim ciljem, minio deluje v načinu prehoda S3 in zagotavlja vaš lokalni datotečni sistem v obliki shrambe S3. Če zaženete minio in navedete več ciljev, se bo samodejno vklopil način Erasure Coding, ki bo porazdelil podatke med vašimi cilji in hkrati zagotovil toleranco za napake.

Minio privzeto razdeli cilje v skupine po 16 diskov, z 2 paritetama na skupino. Tisti. Dva diska lahko odpoveta hkrati, ne da bi izgubili podatke.

Za testiranje zmogljivosti sem uporabil 16 diskov po 6TB in nanje zapisal majhne objekte velikosti 1MB, kar je najbolj natančno opisalo našo prihodnjo obremenitev, saj vsa sodobna orodja za varnostno kopiranje delijo podatke na bloke po nekaj megabajtov in jih tako zapišejo.

Za izvedbo primerjalnega preizkusa smo uporabili pripomoček s3bench, ki smo ga zagnali na oddaljenem strežniku in pošiljali na desettisoče takšnih predmetov v minio v stotinah niti. Potem sem jih poskušal zahtevati nazaj na enak način.

Rezultati primerjalnih testov so prikazani v naslednji tabeli:

Varnostno shranjevanje za tisoče virtualnih strojev z uporabo brezplačnih orodij

Kot lahko vidimo, je minio v lastnem načinu kodiranja za brisanje bistveno slabši pri pisanju kot minio, ki se izvaja na vrhu programske opreme RAID6, RAIDZ2 in DRAID2 v isti konfiguraciji.

Ločeno jaz vprašal preizkusite minio na ext4 proti XFS. Presenetljivo se je za mojo vrsto delovne obremenitve izkazalo, da je XFS znatno počasnejši od ext4.

V prvi seriji testov je Mdadm pokazal premoč nad ZFS, kasneje pa gmelikov predlaganoda lahko izboljšate zmogljivost ZFS z nastavitvijo naslednjih možnosti:

xattr=sa atime=off recordsize=1M

in po tem so testi z ZFS postali veliko boljši.

Opazite lahko tudi, da DRAID ne zagotavlja večjega povečanja zmogljivosti v primerjavi z RAIDZ, vendar bi moral biti teoretično veliko varnejši.

V zadnjih dveh testih sem poskusil tudi prenesti metapodatke (special) in ZIL (log) na zrcalo iz SSD. Toda odstranitev metapodatkov ni prinesla velikega povečanja hitrosti snemanja, pri odstranitvi ZIL pa moj SSDSC2KI128G8 dosegel zgornjo mejo s 100-odstotno izkoriščenostjo, zato menim, da je ta test neuspešen. Ne izključujem, da če bi imel hitrejše SSD diske, bi to morda lahko močno izboljšalo moje rezultate, vendar jih na žalost nisem imel.

Na koncu sem se odločil za DRAID in kljub statusu beta je to najhitrejša in najučinkovitejša rešitev za shranjevanje v našem primeru.

Ustvaril sem preprost DRAID2 v konfiguraciji s tremi skupinami in dvema porazdeljenima rezervnima deloma:

# 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

V redu, uredili smo prostor za shranjevanje, zdaj pa se pogovorimo o tem, kaj bomo varnostno kopirali. Tu bi rad takoj spregovoril o treh rešitvah, ki sem jih uspel preizkusiti, in to so:

Benji Backup - vilice Backy2, specializirana rešitev za varnostno kopiranje blokovnih naprav, ima tesno integracijo s Ceph. Lahko vzame razlike med posnetki in iz njih ustvari inkrementalno varnostno kopijo. Podpira veliko število ozadij za shranjevanje, vključno z lokalnimi in S3. Zahteva ločeno bazo podatkov za shranjevanje zgoščene tabele za odpravo podvojitev. Slabosti: napisan v pythonu, ima rahlo neodziven cli.

Borg Backup - vilice Podstrešje, že dolgo znano in preverjeno orodje za varnostno kopiranje, lahko varnostno kopira podatke in jih dobro odstrani. Zmožnost shranjevanja varnostnih kopij tako lokalno kot na oddaljeni strežnik prek scp. Lahko varnostno kopira naprave, če jih zaženete z zastavico --special, eden od minusov: pri ustvarjanju varnostne kopije je repozitorij popolnoma blokiran, zato je priporočljivo ustvariti ločen repozitorij za vsak virtualni stroj, načeloma to ni problem, na srečo se ustvarijo zelo enostavno.

Restic je aktivno razvijajoč se projekt, napisan v go, precej hiter in podpira veliko število ozadij za shranjevanje, vključno z lokalno shrambo, scp, S3 in še veliko več. Ločeno bi rad omenil, da obstaja posebej ustvarjen rest-server za restic, ki vam omogoča hiter izvoz pomnilnika za uporabo na daljavo. Od vsega naštetega mi je bil najbolj všeč. Lahko varnostno kopira iz stdin. Skoraj ni opaznih pomanjkljivosti, vendar ima več funkcij:

  • Najprej sem ga poskušal uporabiti v načinu splošnega repozitorija za vse virtualne stroje (kot je Benji) in je celo deloval precej dobro, vendar so obnovitvene operacije trajale zelo dolgo, ker ... Vsakič pred obnovitvijo poskusi restic prebrati metapodatke vseh varnostnih kopij. Ta problem je bil enostavno rešen, tako kot pri borgu, z ustvarjanjem ločenega repozitorija za vsak virtualni stroj. Ta pristop se je izkazal za zelo učinkovitega tudi pri upravljanju varnostnih kopij. Ločeni repozitoriji imajo lahko ločena gesla za dostop do podatkov, prav tako pa se nam ni treba bati, da bi se globalni repo nekako zlomil. Nova skladišča lahko ustvarite prav tako preprosto kot pri varnostnem kopiranju Borg.

    V vsakem primeru se deduplikacija izvede samo glede na prejšnjo različico varnostne kopije; prejšnja varnostna kopija je določena s potjo za navedeno varnostno kopijo, tako da če varnostno kopirate različne objekte iz stdin v skupni repozitorij, ne pozabite določiti možnost --stdin-filenameali vsakokrat izrecno določite možnost --parent.

  • Drugič, obnovitev v stdout traja veliko dlje kot obnovitev v datotečni sistem zaradi njegove vzporedne narave. V prihodnosti nameravamo dodati tesnejšo podporo za varnostne kopije za blok naprave.

  • Tretjič, trenutno je priporočljivo uporabljati različica od master, Ker različica 0.9.6 ima napako pri dolgem obnavljanju velikih datotek.

Da bi preizkusil učinkovitost varnostnega kopiranja in hitrost pisanja/obnavljanja iz varnostne kopije, sem ustvaril ločen repozitorij in poskusil varnostno kopirati majhno sliko virtualnega stroja (21 GB). Izvedeni sta bili dve varnostni kopiji brez spreminjanja izvirnika, z uporabo vsake od navedenih rešitev za preverjanje, kako hitreje/počasneje so bili kopirani deduplicirani podatki.

Varnostno shranjevanje za tisoče virtualnih strojev z uporabo brezplačnih orodij

Kot lahko vidimo, ima Borg Backup najboljše začetno razmerje učinkovitosti varnostnega kopiranja, vendar je slabše tako glede hitrosti zapisovanja kot obnavljanja.

Izkazalo se je, da je Restic hitrejši od Benji Backupa, vendar traja dlje, da se obnovi v stdout, in na žalost še ne zna pisati neposredno v blokovno napravo.

Ko sem pretehtal vse prednosti in slabosti, sem se odločil, da ostanem restic с rest-server kot najbolj priročno in obetavno rezervno rešitev.

Varnostno shranjevanje za tisoče virtualnih strojev z uporabo brezplačnih orodij

V tem posnetku zaslona lahko vidite, kako je 10-gigabitni kanal popolnoma izkoriščen med več operacijami varnostnega kopiranja, ki se izvajajo hkrati. Omeniti velja, da se recikliranje diskov ne dvigne nad 30%.

S prejeto rešitvijo sem bil več kot zadovoljen!

Vir: www.habr.com

Dodaj komentar