Kuidas GitLab aitab teha suurte NextCloudi salvestuskohtade varukoopiaid

Tere, Habr!

TĂ€na tahan rÀÀkida meie kogemustest suurandmete varundamise automatiseerimise osas Nextcloudi salvestites erinevates konfiguratsioonides. Olen "Mollynia AK" CTO, kus tegeleme IT-sĂŒsteemide konfiguratsioonihaldusega; andmete salvestamiseks kasutame Nextcloudi, sealhulgas jaotatud struktuuris koos varundamisega.

Probleemid, mis tulenevad installatsioonide iseÀrasustest, seisnevad andmete rohkusest. Nextcloudi versioonihaldus, varundamine, subjektiivsed pÔhjused ja muu loovad palju dublette.

Eellugu

Nextcloudi administreerimisel kerkib teravalt esile tĂ”husate varunduste organiseerimise probleem, mida tuleb kindlasti krĂŒpteerida, kuna andmed on vÀÀrtuslikud.

Pakume varundamise salvestamise vÔimalusi meie juures vÔi kliendi eraldiseisvates Nextcloudist vÀljaspool asuvates masinates, mis nÔuab paindlikku automatiseeritud lÀhenemist haldamisele.

Kliendid on paljusid, kÔik erinevate konfiguratsioonide ja oma eripÀradega. Siinkohal ei sobi standardne meetod, kus kogu keskkond kuulub sinule ja varundused tehakse croni kaudu.

Alustame sisendite vaatamisega. Meil on vajalik:

  • Skaleeritavus, kas ĂŒhel sĂ”lmel vĂ”i mitmel. Suurte installatsioonide jaoks kasutame salvestamiseks minio.
  • Teadlikkus varundamise probleemidest.
  • Varundus peab olema kliendi juures ja/vĂ”i meil.
  • Probleemide kiire ja lihtne lahendamine.
  • Kliendid ja installatsioonid erinevad ĂŒksteisest oluliselt — ĂŒhtsuse saavutamine ei Ă”nnestu.
  • Taastumise kiirus peab olema minimaalne kahes stsenaariumis: tĂ€ielik taastamine (Ă”nnetus), ĂŒks kaust — kustutatud eksituse tĂ”ttu.
  • Deduplication funktsioon on kohustuslik.

Kuidas GitLab aitab teha suurte NextCloudi salvestuskohtade varukoopiaid

Varunduste haldamise probleemide lahendamiseks oleme lisanud GitLabi. rohkem ĂŒksikasju allpool.

Ilma kahtlusteta ei ole me esimesed, kes sellist probleemi lahendavad, kuid arvame, et meie praktiline, kannatustega saadud kogemus vÔib olla huvitav ja oleme valmis seda jagama.

Kuna meie ettevÔttes valitseb avatud koodi poliitika, otsisime lahendust avatud lÀhtekoodiga. Omalt poolt jagame oma arendusi ja avaldame need. NÀiteks GitHubis on meie Nextcloudi plugin, mida me paigaldame klientidele, et tugevdada andmete kaitsmist juhusliku vÔi kavandatud kustutamise korral.

Varundustooted

Otsime lahenduste meetodeid, alustades varukoopiate loomise vahendi valimisest.

Tavaline tar + gzip töötab halvasti - andmed korduvad. Inkrementaalne koopia sisaldab sageli tĂ”eliselt vĂ€ga vĂ€he muudatusi ning suur osa andmetest ĂŒhes failis kordub.
On veel ĂŒks probleem - jaotatud andmehoidla ĂŒleliigsus. Me kasutame Minio't ja selle andmed on pĂ”himĂ”tteliselt ĂŒleliigsed. Kas pidime varukoopiaid tegema lĂ€bi Minio - koormama seda ja kasutama kĂ”iki vahepealseid kihtide vahel ning mis on vĂ€hemalt sama oluline, on oht unustada osa Ă€mbrite ja meta-informatsiooni. VĂ”i kasutada deduplication'i.

Deduplication'i vahendeid on avatud lĂ€htekoodiga (Habr's olid artikleid sellel teemal) ja meie finalistideks said , kus "kĂ”ik töö toimub konteinerites". Kutsume nĂŒĂŒd ajas edasi 2013. aastasse, kui toimus Docker'i esimene vĂ€ljaanne, ja konteinerid said lĂ”puks populaarseteks massiliseks lahenduseks. Sel ajal oli peamine tööriist konteinerite orkestreerimiseks ja Restic. Üksikasjad meie kahe rakenduse vĂ”rdlemise kohta allpool, aga rÀÀgime esmalt, kuidas me kogu skeemi korraldasime.

Varukoopiate loomise haldamine

Borg ja Restic on head, kuid kumbki toode ei oma tsentraliseeritud haldusmehhanismi. Haldamise ja kontrollimise eesmÀrgil valisime tööriista, mis on meil juba kasutusel, ilma milleta me ei suuda oma tööd ette kujutada, sealhulgas automatiseerimise osas - see on tuntud CI/CD - GitLab.

Idee seisneb jÀrgmises: igale andmeid hoidvale Nextcloud'i sÔlmele installitakse gitlab-runner. Runner kÀivitab ajakava alusel skripti, mis jÀlgib varukoopiate loomise protsessi, ja see kÀivitab Borgi vÔi Restici.

Mida me saime? Tagasiside tĂ€itmisest, mugav kontroll muudatuste ĂŒle, detailid vea korral.

Siin siit GitHubist oleme ĂŒles laadinud skripti nĂ€idised erinevate ĂŒlesannete jaoks, ning me sidusime selle lĂ”puks mitte ainult Nextcloud'i, vaid ka paljude teiste teenustega. Seal on ka ajakava, kui ei taha seda kĂ€sitsi seadistada (aga me ei taha) ja .gitlab-ci.yml

GitLabi API-s ei ole praegu vĂ”imalik muuta CI/CD ajapiiri, ja see on suhteliselt vĂ€ike. Seda tuleb suurendada, ĂŒtleme kuni 1d.

Õnneks oskab GitLab kĂ€ivitada mitte ainult commit'i jĂ€rgi, vaid ka ajakava alusel, see on just see, mida me vajame.

NĂŒĂŒd skripti ĂŒmber.

Seadsime sellele skripti jaoks jÀrgmised tingimused:

  • Peab töötama nii runneri kui ka kĂ€sitsi konsoolist sama funktsionaalsusega.
  • Oluline on, et veahaldurid oleksid olemas:
  • return code.
  • stringi otsimine logis. NĂ€iteks vĂ”ib meile veaks olla sĂ”num, mida programm kriitiliseks ei pea.
  • Ajavahemiku töötlemine. TĂ€itmise aeg peab olema mĂ”istlik.
  • Meil on vaja ĂŒksikasjalikku logi. Kuid ainult vigade korral.
  • Samuti viiakse enne alustamist lĂ€bi rida teste.
  • MĂ”ningaid mugavusi, mis me oleme toeks olles leidnud kasulikuks:
  • KĂ€ivitamine ja lĂ”petamine fikseeritakse kohaliku masina sisselogis. See aitab siduda sĂŒsteemivead ja varundamise töö.
  • Osad vealogist, kui need esinevad, vĂ€ljastatakse stdout-s, kogu logi kirjutatakse eraldi faili. Mugav on kohe CI-s ĂŒle vaadata ja hinnata viga, kui see on triviaalne.
  • Deebagimise reĆŸiimid.

TĂ€ielik logi salvestatakse artefaktina GitLabis, kui viga ei esine, siis logi kustutatakse. Skripti kirjutame bashis.

Iga ettepanek ja mĂ€rkused avatud lĂ€htekoodiga oleme rÔÔmuga valmis arutama — oodatud.

Kuidas see töötab

Varundatavates sĂ”lmedes kĂ€ivitub runner bashi tĂ€itjaga. Ajakava jĂ€rgi kĂ€ivitatakse CI/CD ĂŒlesanne spetsiaalses repos. Runner kĂ€ivitab skripti, universaalse ĂŒmbriku nende ĂŒlesannete jaoks, kus kontrollitakse varundamise repositoriumi, mount-punkte ja kĂ”ike, mida soovime, seejĂ€rel toimub varundamine ja vana kustutamine. Valmis varundus saadetakse S3-le.

Töötame sellise skeemi jĂ€rgi — see on vĂ€lisekspert AWS vĂ”i Venemaa analoog (see on kiirem ja andmed ei lahku Venemaalt). VĂ”i paigaldame kliendile eraldi minio klastri nende territooriumile nende eesmĂ€rkide jaoks. Tavaliselt teeme seda turvakaalutlustel, kui klient ei soovi, et andmed lahkuvad nende piiridest.

Me ei kasutanud SSH kaudu varunduse saatmise funktsiooni. See ei suurenda turvalisust ning S3 pakkuja vÔrguvÔimalused on oluliselt kÔrgemad kui meie SSH masinal.

Kaitsmiseks hĂ€kkerite eest kohaliku masina peal — kuna ta vĂ”ib kustutada andmeid S3-lt, tuleb kindlasti sisse lĂŒlitada versioonimine.
Varundaja krĂŒpteerib alati varunduse.

Borgil on krĂŒpteerimiseta reĆŸiim none, kuid me ei soovita seda igal juhul sisse lĂŒlitada. Selles reĆŸiimis ei toimu mitte ainult krĂŒpteerimist, vaid ka kirjutatavatele andmetele ei arvutata kontrollsumma, mistĂ”ttu saab terviklikkust kontrollida ainult kaudselt, indeksite jĂ€rgi.

Erakonna ajakava alusel kontrollitakse varunduste indeksite ja sisu terviklikkust. Kontrollimine toimub aeglaselt ja kaua, seetÔttu kÀivitame selle eraldi kord kuus. See vÔib kesta mitu pÀeva.

Riidmine venekeeles

Peamised funktsioonid

  • prepare valmistamine
  • testkontroll valmiduse kontroll
  • pĂ”hkĂ€su peamine kĂ€sk
  • sundpostscript funktsioon, mis tĂ€idetakse lĂ”pus vĂ”i vea korral. Kasutame seda jaotise demonteerimiseks.

Teenusefunktsioonid

  • cleanup salvestame vead vĂ”i kustutame logifaili.
  • checklog parsing logi vea stringi otsimiseks.
  • ret vĂ€ljumise kĂ€itleja.
  • checktimeout ajaĂŒlevaatus.

Keskkond

  • VERBOSE=1 kuvame vead kohe ekraanile (stdout).
  • SAVELOGSONSUCCES=1 salvestame logi eduka tulemuse korral.
  • INIT_REPO_IF_NOT_EXIST=1 Loome repot, kui seda polnud. Vaikimisi on see keelatud.
  • TIMEOUT maksimaalne aeg pĂ”hitegevuse jaoks. Saate selle lĂ”ppu seada 'm', 'h' vĂ”i 'd'.

Vana koopia hoidmise reĆŸiim. Vaikimisi:

  • KEEP_DAILY=7
  • KEEP_WEEKLY=4
  • KEEP_MONTHLY=6

Muudatused skripti sees

  • ERROR_STRING — string logi kontrollimiseks vea jaoks.
  • EXTRACT_ERROR_STRING — vĂ€ljend, et kuvada string, kui on viga.
  • KILL_TIMEOUT_SIGNAL — signaal tapmiseks, kui aega on ĂŒle.
  • TAIL — kui palju strings vigadest ekraanil.
  • COLORMSG — sĂ”numi vĂ€rv (vaikimisi kollane).

See skript, mis nimetatakse wordpress, on tinglikult teada, selle eelis on see, et see varundab ka mysql andmebaasi. SeetĂ”ttu saab seda kasutada ka Nextcloudi ĂŒhekordsetes paigaldustes, kus on vĂ”imalik ka andmebaasi varundamine. Mugavus ei seisne ainult selles, et kĂ”ik on ĂŒhes kohas, vaid ka andmebaasi sisu on tihedalt seotud failide sisuga, kuna ajavahe on minimaalne.

Restic vs Borg

Borg ja Restic'i vĂ”rdlused on sealhulgas siin Habr'is, ja meie ĂŒlesanne ei olnud lihtsalt teha lihtsalt veel ĂŒks, vaid oma. Meie jaoks oli oluline, kuidas see meie andmetega, meie spetsiifikaga vĂ€lja nĂ€eb. Me toome neid.

Meie valikukriteeriumid, peale juba mainitud (de-deduplikatsioon, kiire taastamine jne.):

  • Töö katkestamisele vastupidavus. Kontrollimine kill -9 peal.
  • Suurus kettal.
  • Ressursside nĂ”udlikkus (CPU, mĂ€lu).
  • Salvestatavate blobide suurus.
  • Töö S3-ga.
  • TĂ”ejĂ€rjestuse kontroll.

Testimiseks vĂ”tsime ĂŒhe kliendi, kellel on reaalne andmestik ja kogumaht 1,6TB.
Tingimused.

Borg ei oska otse S3-ga töötada, ja me montisime selle fuse kettana, lÀbi goofys. Restic saatis S3-sse ise.

Goofys töötab vÀga kiiresti ja hÀsti, ning sellele on saadaval ketta vahemÀlu moodul, mis kiirendab tööprotsessi veelgi. See on beetaversioonis ja tunnistama peab, et meil esines katsetel (teistel) andmete kaotamisega probleeme. Kuid mugavage see, et ise varundamisprotseduur ei nÔua suurt lugemist, vaid peamiselt kirjutamist, seetÔttu kasutame vahemÀlu ainult andmete terviklikkuse kontrollimisel.

Et vĂ€hendada vĂ”rgu mĂ”ju, kasutasime kohalikke teenusepakkujat — Yandex Cloud.

Testimistulemused vÔrdlemiseks.

  • Kill -9 koos edasise taaskĂ€ivitamisega, mĂ”lemad lĂ€ksid edukalt.
  • Suurus kettal. Borg suudab andmeid tihendada, seega on tulemused oodatavad.

Backuper
Suurus

, kus "kĂ”ik töö toimub konteinerites". Kutsume nĂŒĂŒd ajas edasi 2013. aastasse, kui toimus Docker'i esimene vĂ€ljaanne, ja konteinerid said lĂ”puks populaarseteks massiliseks lahenduseks. Sel ajal oli peamine tööriist konteinerite orkestreerimiseks
562Gb

Restic
628Gb

  • CPU jĂ€rgi
    Iseseisvalt kulutab borg vÀhe, vaikimisi tihendamisega, kuid seda tuleb koos goofys protsessiga hinnata. Kokku on nad vÔrdsed ja kasutavad umbes 1,2 tuuma samal testimise virtuaalmasinal.
  • MĂ€lu. Restic umbes 0,5Gb, Borg umbes 200Mb. Kuid see kĂ”ik on tĂŒhine vĂ”rreldes sĂŒsteemi failide vahemĂ€luga. Seega on soovitav eraldada rohkem mĂ€lu.
  • Blobide suuruste vahe osutus silmapaistvaks.

Backuper
Suurus

, kus "kĂ”ik töö toimub konteinerites". Kutsume nĂŒĂŒd ajas edasi 2013. aastasse, kui toimus Docker'i esimene vĂ€ljaanne, ja konteinerid said lĂ”puks populaarseteks massiliseks lahenduseks. Sel ajal oli peamine tööriist konteinerite orkestreerimiseks
umbes 500Mb

Restic
umbes 5Mb

  • Töötamine S3-ga Resticuga on suurepĂ€rane. Borgi töö goofys'i kaudu ei tekita kĂŒsimusi, kuid on mĂ€rgatud, et varundamise lĂ”ppedes on soovitatav teha umount, et vahemĂ€lu tĂ€ielikult lĂ€htestada. S3 tööspetsifikaat on see, et alla laadimata tĂŒkid ei saadeta kunagi Ă€mbri, seega osaliselt alla laaditud andmed pĂ”hjustavad suuri kahjustusi.
  • Integriteedi kontroll töötab mĂ”lemal juhul hĂ€sti, kuid kiirus erineb oluliselt.
    Restic – 3,5 tundi.
    Borg, 100Gb SSD failide vahemĂ€luga – 5 tundi. Umbes sama kiirus, kui andmed asuvad kohalikul kettal.
    Borg loeb otse S3-st ilma vahemÀluta 33 tundi. Kohutavalt pikk.

KokkuvĂ”ttes suudab Borg andmeid tihendada ja tal on suuremad blobid — mis teeb S3-s salvestamise ja GET/PUT operatsioonid odavamaks. Kuid selle eest tuleb maksta keerulisema ja aeglasema kontrollimisega. Mis puudutab taastamise kiirus — siis me ei mĂ€rganud mingit erinevust. JĂ€rgnevate varunduste (pĂ€rast esimest) hulgas teeb Restic veidi kauem, kuid mitte oluliselt.

Kogukonna suurus ei olnud valikus viimasel kohal.

Ja me valisime Borgi.

MÔned sÔnad tihendamise kohta

Borgil on oma arsenalis suurepĂ€rane uus tihendamisalgoritm — zstd. Tihendamise kvaliteet ei ole halvem kui gzip, kuid oluliselt kiirem. Ja kiiruselt vĂ”rreldav vaikimisi lz4-ga.

NÀiteks MySQL andmebaasi dump tihendatakse kaks korda paremini kui lz4 sama kiirusel. Siiski nÀitab kogemus reaalsetel andmetel, et Nextcloud nodi tihendamisel on erinevus vÀga vÀike.

Borgis on ĂŒsna tore tihendamise reĆŸiim — kui failil on suur entropia, siis tihendamine ei toimu ĂŒldse, mis suurendab töö kiirus. Seda saab lubada loomise ajal valikuga
-C auto,zstd
zstd algoritmi jaoks
Nii et selle valikuga saime vÔrreldes vaike tihendamisega
560Gb ja 562Gb vastavalt. Eelmiste nĂ€idete andmed, tuletan meelde, ilma kokkusurumiseta on tulemus 628Gb. 2Gb vahe ĂŒllatas meid, kuid otsustasime siiski kĂ”ik valida. auto,zstd.

Varukoopia kontrollimise meetodika

Virtuaalmasin kÀivitub otse teenusepakkuja vÔi kliendi juures, mis vÀhendab vÔrgu koormust. See on vÀhemalt odavam kui oma juures tÔstatada ja trafiku edastamine.

goofys --cache "--free:5%:\/mnt\/cache" -o allow_other --endpoint https:\/\/storage.yandexcloud.net --file-mode=0666 --dir-mode=0777 xxxxxxx.com \/mnt\/goofys
export BORG_PASSCOMMAND="cat \/home\/borg\/.borg-passphrase"
borg list \/mnt\/goofys\/borg1\/
borg check --debug -p --verify-data \/mnt\/goofys\/borg1\/

Me kontrollime faile viirusetĂ”rjega (tagantjĂ€rele) sama skeemi jĂ€rgi. LĂ”ppude lĂ”puks laadivad kasutajad Nextcloudi erinevat sisu ja mitte kĂ”ikidel pole viirusetĂ”rjet. Kontrollimine ĂŒleslaadimise hetkel vĂ”tab liiga palju aega ja segab Ă€ri.

Mastaapsus saavutatakse erinevate siltidega jooksutajate kÀivitamisega erinevates nodides.
Meie jĂ€lgimises kogutakse varukoopiate staatuseid lĂ€bi GitLabi API ĂŒhte aknasse, vajadusel on probleemid kergesti mĂ€rgatavad ja samuti kergesti lokaliseeritavad.

KokkuvÔte

KokkuvÔttes teame tÀpselt, et teeme varukoopiaid, et meie varukoopiad on kehtivad, ja probleemid, mis nendega tekivad, vÔtavad vÀhe aega ja lahendatakse ööde administraatori tasemel. Varukoopiad vÔtavad vÔrreldes tar.gz vÔi Baculaga tÔeliselt vÀhe ruumi.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster