Backup-lagring för tusentals virtuella maskiner med gratis verktyg

Backup-lagring för tusentals virtuella maskiner med gratis verktyg

Hej, nyligen stötte jag pÄ en intressant uppgift att konfigurera lagring för backup av ett stort antal blockenheter.

Varje vecka gör vi en sÀkerhetskopiering av alla virtuella maskiner i vÄr molntjÀnst, vilket krÀver att vi kan hantera tusentals sÀkerhetskopior och göra det sÄ snabbt och effektivt som möjligt.

TyvÀrr passar inte standardkonfigurationerna RAID5, RAID6 i det hÀr fallet pÄ grund av att ÄterstÀllningsprocessen pÄ sÄ stora diskar som vÄra skulle vara plÄgsamt lÄngsam och sannolikt aldrig slutföras.

LÄt oss övervÀga vilka alternativ som finns:

Erasure Coding — En analog av RAID5, RAID6, men med justerbar paritetsnivĂ„. Backup görs inte blockvis utan för varje objekt separat. Det enklaste sĂ€ttet att prova erasure coding Ă€r att distribuera minio.

DRAID — detta Ă€r för nĂ€rvarande en Ă€nnu inte slĂ€ppt funktion i ZFS. Till skillnad frĂ„n RAIDZ har DRAID en distribuerad paritetsblock och anvĂ€nder alla diskar i arrayen vid Ă„terstĂ€llning, vilket gör att den bĂ€ttre klarar av diskfel och Ă„terhĂ€mtar sig snabbare efter ett fel.

Backup-lagring för tusentals virtuella maskiner med gratis verktyg

Backup-lagring för tusentals virtuella maskiner med gratis verktyg

TillgÀnglig Àr en server Fujitsu Primergy RX300 S7 med en processor Intel Xeon CPU E5-2650L 0 @ 1.80GHz, nio moduler RAM-minne Samsung DDR3-1333 8Gb PC3L-10600R ECC Registered (M393B1K70DH0-YH9), en diskhylla Supermicro SuperChassis 847E26-RJBOD1, ansluten via Dual LSI SAS2X36 Expander och 45 diskar Seagage ST6000NM0115-1YZ110 per 6TB varje.

Innan vi kan fatta nÄgra beslut mÄste vi först testa allt ordentligt.

För detta förberedde jag mig och genomförde tester av olika konfigurationer. Jag anvÀnde minio som agerade som S3-backend och körde det i olika lÀgen med olika antal mÄl.

Huvudsakligen testades fallet minio i erasure coding vs programvaruraid med samma antal diskar och paritetsdiskar, det vill sÀga: RAID6, RAIDZ2 och DRAID2.

För referens: nÀr du kör minio med bara ett mÄl, fungerar minio i S3-gatewaylÀge för att ge din lokala filsystem som S3-lagring. Om du Ä sin sida startar minio med flera mÄl aktiveras automatiskt lÀget för Erasure Coding, vilket kommer att sprida data över dina mÄl och ge redundans.

Som standard delar MinIO mÄl pÄ grupper med 16 diskar, dÀr varje grupp har tvÄ parity. Det betyder att tvÄ diskar kan gÄ sönder samtidigt utan att data gÄr förlorad.

För att testa prestanda anvÀnde jag 16 diskar pÄ 6 TB vardera och skrev smÄ objekt pÄ 1 MB, vilket noggrant beskrev vÄr framtida belastning, eftersom alla moderna backupverktyg delar data i block pÄ nÄgra megabyte och skriver dem pÄ det sÀttet.

För att genomföra benchmark-testet anvÀndes verktyget s3bench som kördes pÄ en fjÀrrserver och skickade tiotusentals sÄdana objekt till MinIO i hundratals trÄdar. DÀrefter försökte det pÄ samma sÀtt att hÀmta dem tillbaka.

Resultaten av benchmark-testet presenteras i följande tabell:

Backup-lagring för tusentals virtuella maskiner med gratis verktyg

Som vi ser fungerar MinIO i sitt eget erasure coding-lÀge betydligt sÀmre vid skrivning Àn MinIO som körs ovanpÄ programvaru-RAID6, RAIDZ2 och DRAID2 i samma konfiguration.

Separat blev jag ombedd att testa MinIO pĂ„ ext4 vs XFS. Överraskande nog visade det sig att för min typ av belastning var XFS betydligt lĂ„ngsammare Ă€n ext4.

I den första delen av testerna visade Mdadm överlÀgsenhet över ZFS, men senare gmelikov pÄpekade, att prestandan för ZFS kan förbÀttras genom att stÀlla in följande alternativ:

xattr=sa atime=off recordsize=1M

och efter detta blev testerna med ZFS mycket bÀttre.

Det kan ocksÄ noteras att DRAID inte ger nÄgon betydande prestandavinst jÀmfört med RAIDZ, men i teorin borde det vara mycket sÀkrare.

I de tvÄ senaste testerna försökte jag ocksÄ flytta metadata (special) och ZIL (logg) till en spegel av SSD. Men flytt av metadata gav ingen betydande ökning i skrivhastighet, och nÀr jag flyttade ZIL stötte mina SSDSC2KI128G8 pÄ en vÀgg med 100% utnyttjande, sÄ jag anser att detta test misslyckades. Jag utesluter inte att om jag hade snabbare SSD-diskar skulle det kunna ha förbÀttrat mina resultat kraftigt, men tyvÀrr hade jag inte tillgÄng till sÄdana.

Till slut beslutade jag mig för att stanna vid DRAID och trots sin beta-status Àr det den snabbaste och mest effektiva lösningen för lagring i vÄrt fall.

Jag skapade en enkel DRAID2-konfiguration med tre grupper och tvÄ distribuerade reservdelar:

# 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

Bra, vi har löst lagringen, nu om vad vi ska anvÀnda för backup. HÀr vill jag direkt berÀtta om tre lösningar som jag lyckades prova, nÀmligen:

Benji Backup — en fork Backy2, en specialiserad lösning för sĂ€kerhetskopiering av blockenheter, har nĂ€ra integration med Ceph. Kan hĂ€mta diffar mellan snapshots och skapa inkrementella sĂ€kerhetskopior frĂ„n dem. Stöder ett stort antal lagringsbackendlösningar, bĂ„de lokala och S3. KrĂ€ver en separat databas för att lagra hash-tabellen för deduplicering. Nackdelar: skriven i python, har en nĂ„got oresponsiv cli.

Borg Backup — en fork Attic, en vĂ€lkĂ€nd och beprövad lösning för sĂ€kerhetskopiering som kan sĂ€kerhetskopiera data och utföra bra deduplicering. Kan spara sĂ€kerhetskopior bĂ„de lokalt och pĂ„ en fjĂ€rrserver via scp. Kan sĂ€kerhetskopiera blockenheter om den körs med flaggan --special, nackdelar: nĂ€r en sĂ€kerhetskopiering skapas blockeras hela lagret sĂ„ det rekommenderas att skapa en separat repository för varje virtuell maskin, vilket inte Ă€r ett problem eftersom de skapas mycket enkelt.

Restic — ett aktivt vĂ€xande projekt skrivet i go, ganska snabbt och stödjer ett stort antal lagringsbackends, bĂ„de lokala lagringslösningar och scp, S3 och mycket mer. Det Ă€r vĂ€rt att notera att det finns en speciellt skapad rest-server för restic, som möjliggör snabbaste export av lagret för anvĂ€ndning pĂ„ distans. Av allt ovanstĂ„ende gillade jag detta mest. Kan sĂ€kerhetskopiera frĂ„n stdin. Har nĂ€stan inga mĂ€rkbara nackdelar, men det finns nĂ„gra egenskaper:

  • För det första, jag försökte anvĂ€nda det i lĂ€ge för gemensam repository för alla virtuella maskiner (som Benji), och det fungerade faktiskt ganska bra, men Ă„terstĂ€llningsoperationerna tog ganska lĂ„ng tid eftersom restic varje gĂ„ng försöker lĂ€sa metadata för alla sĂ€kerhetskopior innan Ă„terstĂ€llningen. Detta problem löstes enkelt, precis som med borg, genom att skapa en separat repository för varje virtuell maskin. Denna metod visade sig vara mycket effektiv Ă€ven för hantering av sĂ€kerhetskopior. Separata repositories kan ha ett eget lösenord för Ă„tkomst till data, och vi behöver inte oroa oss för att den globala repository kan gĂ„ sönder. Att skapa nya repositories Ă€r ocksĂ„ lika enkelt som med borg backup.

    Under alla omstÀndigheter utförs deduplicering endast i förhÄllande till den tidigare versionen av sÀkerhetskopian. Den tidigare sÀkerhetskopian bestÀms av sökvÀgen för den angivna sÀkerhetskopian, sÄ om du sÀkerhetskopierar olika objekt frÄn stdin till ett gemensamt arkiv, glöm inte att ange alternativet --stdin-filename, eller ange alternativet varje gÄng explicit --parent.

  • För det andra tar Ă„terstĂ€llning till stdout betydligt mer tid Ă€n Ă„terstĂ€llning till filsystemet pĂ„ grund av dess parallellitet. I framtiden planeras att lĂ€gga till nĂ€rmare stöd för sĂ€kerhetskopior för blockenheter.

  • För det tredje rekommenderas det för nĂ€rvarande att anvĂ€nda versionen frĂ„n master, eftersom version 0.9.6 har en bugg med lĂ„ngsam Ă„terstĂ€llning av stora filer.

För att testa effektiviteten av sÀkerhetskopian och hastigheten pÄ skrivning / ÄterstÀllning frÄn sÀkerhetskopian skapade jag ett separat repo och försökte sÀkerhetskopiera en liten bild av en virtuell maskin (21 GB). TvÄ sÀkerhetskopior genomfördes utan att originalet Àndrades, med varje av de angivna lösningarna, för att kontrollera hur mycket snabbare/lÄngsammare de deduplicerade data kopieras.

Backup-lagring för tusentals virtuella maskiner med gratis verktyg

Som vi kan se har Borg Backup den bÀsta effektiviteten vid den initiala sÀkerhetskopieringen, men den förlorar i hastighet bÄde för skrivning och ÄterstÀllning.

Restic visade sig vara snabbare Àn Benji Backup, men tar lÀngre tid att ÄterstÀlla till stdout och kan tyvÀrr inte skriva direkt till blockenheten Àn.

Efter att ha vÀgt för- och nackdelar beslutade jag mig för att stanna vid restic med rest-server som den mest bekvÀma och lovande lösningen för sÀkerhetskopior.

Backup-lagring för tusentals virtuella maskiner med gratis verktyg

I den hÀr skÀrminspelningen kan du se hur en 10-gigabits kanal fullt utnyttjas nÀr flera sÀkerhetskopieringsoperationer körs samtidigt. Det Àr vÀrt att notera att diskutnyttjandet inte överstiger 30%.

Jag Àr mer Àn nöjd med den uppnÄdda lösningen!

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster