Kuidas GitLab aitab luua varukoopiaid suurtest NextCloud salvestustest

Tere, Habr!

TĂ€na soovin rÀÀkida meie kogemustest suurte andmete salvestamise automatiseeritud varundamise osas Nextcloudis erinevates konfiguratsioonides. Olen "Moltni AK" tegevjuht, kus tegeleme IT sĂŒsteemide konfiguratsioonihaldusega, andmete salvestamiseks kasutame Nextcloudi. Sealhulgas, koos hajutatud struktuuriga ja varundamisega.

Probleemid tulenevad installatsioonide eripÀrast, kuna andmeid on palju. Nextcloud pakub versioonimist, varundamist, subjektiivseid pÔhjuseid ja muud, mis loob palju dubleeringuid.

Eelalugu

Nextcloudi haldamisel tĂ”useb teravalt esile tĂ”husate varukoopiate korraldamise probleem, mis tuleks kindlasti krĂŒpteerida, kuna andmed on vÀÀrtuslikud.

Pakume varukoopia sÀilitamise vÔimalusi kas meie juures vÔi kliendi eraldi masinatel, mis ei ole seotud Nextcloudiga, mis nÔuab paindlikku automatiseeritud lÀhenemist haldamisele.

Kliente on palju, kÔik nad on erinevate konfiguratsioonidega ning kÔik oma platsidel ja omaduste poolest. Siin ei sobi standardne meetod, kus kogu plats kuulub sulle, ja varukoopiad tehakse croni abil.

KÀime lÀbi vajalikud andmed. Me vajame:

  • Mastaapsust ĂŒhe sĂ”lme vĂ”i mitme osas. Suurte paigalduste korral kasutame salvestuseks miniot.
  • Saada teavitusi varukoopiate tĂ€itmise probleemidest.
  • Peame hoidma varukoopiadi kliendi juures ja/vĂ”i meie juures.
  • Probleemidega tuleb kiiresti ja lihtsalt tegeleda.
  • Kliendid ja paigaldused on omavahel vĂ€ga erinevad — ĂŒhtsust ei Ă”nnestu saavutada.
  • Taastamise kiirus peab olema minimaalne kahes stsenaariumis: tĂ€ielik taastamine (hĂ€daolukord), ĂŒhe kausta kustutamine eksikombel.
  • Dedupeerimise funktsioon on kohustuslik.

Kuidas GitLab aitab luua varukoopiaid suurtest NextCloud salvestustest

Varukoopiate haldamiseks sidusime GitLabi. Üksikasjad allpool.

Muidugi, me ei ole esimesed, kes seda probleemi lahendavad, kuid usume, et meie praktiline ja kurnav kogemus vÔib olla huvitav ning oleme valmis seda jagama.

Kuna meie ettevÔttes on kehtestatud avatud lÀhtekoodiga poliitika, otsisime lahendust avatud lÀhtekoodiga. Samuti jagame oma arendustöid ja avaldame neid. NÀiteks GitHubis on meie plugina Nextcloudile, mille me klientidele, mis suurendab andmete sÀilimist juhusliku vÔi tahtliku kustutamise korral.

Varundamise vahendid

Lahenduste otsimise alustasime varundamisvahendi valimisega.

Tavaline tar + gzip ei tööta hĂ€sti – andmed dubleeritakse. Inkrement sisaldab sageli tegelikult vĂ€ga vĂ€he muudatusi, ning enamik andmeid ĂŒhe faili sees kordub.
On veel ĂŒks probleem – jaotatud andmehoidla ĂŒlemÀÀrasus. Kasutame minio't ja tema andmed on pĂ”himĂ”tteliselt ĂŒlemÀÀrased. Ent varundamine tuleb teha kas minio kaudu – koormates seda ja kasutades kĂ”iki vahekihti failisĂŒsteemi vahel, ning mis on mitte vĂ€hem oluline, on oht unustada osa bucketitest ja meta-informatsioonist. VĂ”i kasutada deduplikatsiooni.

Dedupikatsiooniga varundamisvahendid on avatud lÀhtekoodiga (Habr oli artikkel selle teema kohta) ja meie finalistideks said Borg ja Restic. Meie kahe rakenduse vÔrdlusest allpool, aga rÀÀgime seni, kuidas me kogu skeemi korraldasime.

Varundamise loomise haldamine

Borg ja Restic on head, kuid kumbagi toodet ei iseloomusta tsentraliseeritud haldussĂŒsteem. Halduse ja kontrolli eesmĂ€rgil valisime tööriista, mis meil juba kasutuses on ja ilma milleta me oma tööd ette ei kujuta, sealhulgas automatiseerimise osas — see on tuntud CI/CD – GitLab.

Idee seisneb jÀrgmis: iga andmeid salvestav Nextcloudi node paigaldatakse gitlab-runner. Rannert kÀivitab ajakava alusel skripti, mis jÀlgib varundusprotsessi ja see kÀivitab Borgi vÔi Restici.

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

Siin on siin GitHubis oleme vĂ€lja pannud skripti nĂ€ited erinevate ĂŒlesannete jaoks, mille oleme lĂ”puks sidunud mitte ainult Nextcloudi, vaid ka paljude teiste teenuste varundusega. Seal on samuti ajakava, kui te ei soovi seda kĂ€sitsi seadistada (ja me ei soovi) ja .gitlab-ci.yml

GitLabi API-s pole hetkel vĂ”imalust CI/CD timeouti muuta, kuid see on ĂŒsna lĂŒhike. Seda tuleb suurendada, ĂŒtleme, et 1d.

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

NĂŒĂŒd skripti katte kohta.

Seadsime sellele skriptile sellised nÔuded:

  • Peab kĂ€ima nii runnerina kui ka kĂ€sitsi konsoolist sama funktsionaalsusega.
  • Vigade kĂ€itlejad peavad olema kindlasti olemas:
  • tagastus kood.
  • stringi otsimine logis. NĂ€iteks vĂ”ib meie jaoks veaks olla sĂ”num, mida programm ei pea kriitiliseks.
  • Aegumise kĂ€itlemine. TĂ€itmise aeg peaks olema mĂ”istlik.
  • Vajame vĂ€ga detailset logi, kuid ainult vea korral.
  • Enne algust toimub ka mitmeid teste.
  • Mugavused, mis me leidsime toredateks toetuste haldamise kĂ€igus:
  • KĂ€ivitamine ja lĂ”petamine registreeritakse kohaliku masina sĂŒsteemilogis. See aitab siduda sĂŒsteemi vigu ja varukoopia töö.
  • Osa vealogist, kui need on olemas, antakse stdout-i, kogu logi kirjutatakse eraldi faili. Mugav on kohe CI vaadata ja hinnata viga, kui see on triviaalne.
  • Veabugide reĆŸiimid.

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

Igale avatud koodiga seonduvale ettepanekule ja mĂ€rkusele oleme avatud — tere tulemast.

Kuidas see toimib

Varundatav node kĂ€ivitab runneri bash executoriga. Planeerija kaudu kĂ€ivitatakse job CI/CD spetsiaalses repost. Runner kĂ€ivitab universaalse skripti selliste ĂŒlesannete jaoks, kus kontrollitakse varundusrepo, mount-punkte ja kĂ”ike, mida soovime. Siis tehakse varundamine ja vana eemaldamine. Valmis varundus saadetakse S3-le.

Me töötame sellise skeemi alusel — see on vĂ€litingimustes teenusepakkuja AWS vĂ”i Venemaa analoog (see on kiirem ja andmed ei lahku Venemaalt). Kas paneme kliendile eraldi minio kihi tema ruumis selliste eesmĂ€rkide jaoks. Tavaliselt teeme seda turvalisuse kaalutlustel, kui klient ei soovi, et andmed lahkuksid nende kontuurist.

Me ei hakanud kasutama varuneda saatmise funktsiooni ssh kaudu. See ei lisa turvalisust ja S3 teenusepakkuja vĂ”rguvĂ”imalused on palju paremad kui meie ĂŒks ssh masin.

HĂ€kkerite kaitsmiseks kohaliku masina pealt — sest ta vĂ”ib kustutada andmeid S3-lt, tuleb kindlasti sisse lĂŒlitada versioonimine.
Varundaja krĂŒpteerib alati varunduse.

Borgil on olemas krĂŒpteerimata reĆŸiim. ei midagi, kuid me ei soovita tungivalt selle aktiveerimist. Selles reĆŸiimis ei toimu mitte ainult krĂŒpteerimist, vaid ka kirjutatava sisu kontrollsummat ei arvutata, seega saab terviklikkust kontrollida ainult kaudselt, indeksite kaudu.

Erineva ajakava alusel kontrollitakse varukoopiaid indeksite ja sisu terviklikkuse osas. Kontrollimine toimub aeglaselt ja pikalt, nii et kÀivitame selle eraldi kord kuus. See vÔib kesta mitu pÀeva.

Readme eesti keeles

Peamised funktsioonid

  • prepare valmistamine
  • testcheck valmiduse kontrollimine
  • peamine kĂ€sk pĂ”hikĂ€sk
  • forcepostscript funktsioon, mis tĂ€idetakse lĂ”puks vĂ”i vea korral. Kasutame seda jaotuse lahtiĂŒhendamiseks.

Teenusefunktsioonid

  • cleanup salvestame vead vĂ”i kustutame logifaili.
  • checklog parsing logi viga sĂ”naga.
  • ret vĂ€ljapÀÀsu kĂ€itleja.
  • checktimeout kontrollimine aja ĂŒletamiseks.

Keskkond

  • VERBOSE=1 kuvame vead kohe ekraanile (stdout).
  • SAVELOGSONSUCCES=1 salvestame logi eduka toimingu korral.
  • INIT_REPO_IF_NOT_EXIST=1 Loome reposi, kui seda pole olnud. Vaikimisi keelatud.
  • TIMEOUT maksimaalne aeg pĂ”hitoiminguks. Saate selle lĂ”puks seadistada 'm', 'h' vĂ”i 'd'.

Vanade koopiaide sĂ€ilitamise reĆŸiim. Vaikimisi:

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

Muutujad skripti sees

  • ERROR_STRING — string logi kontrollimiseks vea korral.
  • EXTRACT_ERROR_STRING — vĂ€ljend, mis nĂ€itab stringi, kui on viga.
  • KILL_TIMEOUT_SIGNAL — signaal tapmiseks, kui toimub aegumine.
  • TAIL — mitu stringi, kus on vead ekraanil.
  • COLORMSG — sĂ”numi vĂ€rv (vaikimisi kollane).

See skript, mida nimetatakse wordpressiks, kannab tinglikku nime. Selle omadus on see, et see varundab ka MySQL andmebaasi. Seega vĂ”ib seda kasutada ĂŒhekordsete Nexcloud installatsioonide jaoks, kus saab samal ajal ka andmebaasi varundada. Mugavus seisneb mitte ainult selles, et kĂ”ik on ĂŒhes kohas, vaid ka andmebaasi sisu on lĂ€hedane failide sisule, kuna vahe on aega minimaalne.

Restic vs Borg

Borgi ja Restici vĂ”rdlused on sealhulgas siin Habr's, ja meil ei olnud ĂŒlesannet teha lihtsalt veel ĂŒks, vaid oma. Meile oli oluline, kuidas see meie andmete, meie spetsiifika puhul vĂ€lja nĂ€eb. Toome neid.

Meie valikukriteeriumid, peale juba mainitud (deduplication, kiire taastamine jne):

  • Tugevus lĂ”petamata töö suhtes. Kontroll kill -9.
  • Keti suurus.
  • Resursside nĂ”udlikkus (CPU, mĂ€lu).
  • Ladustatavate blobide suurus.
  • Töö S3-ga.
  • Tervekuse kontroll.

Testimiseks vĂ”tsime ĂŒhe kliendi reaalsete andmetega, mille kogusumma on 1,6TB.
Tingimused.

Borg ei oska otse S3-ga töötada, seega montasime selle fuse-kettana, kasutades goofys. Restic edastas andmed S3-sse ise.

Goofys töötab vÀga kiiresti ja tÔhusalt, ning sellel on diskivahendi vahemÀlu, mis veelgi kiirendab tööd. See on beetaversioonis ja ausalt öeldes on meil testide jooksul olnud andmete kadumisega seonduvaid probleeme (teistes). Kuid mugavuseks ei nÔua varundamisprotseduur suurt lugemist, pigem kirjutamist, seega kasutame vahemÀlu ainult andmete terviklikkuse kontrollimise ajal.

VĂ”rgu mĂ”ju vĂ€hendamiseks kasutasime kohaliku teenusepakkuja — Yandex Cloud.

Testimise tulemused vÔrdlemiseks.

  • Kill -9 ja edasine taaskĂ€ivitamine lĂ€ksid mĂ”lemad edukalt.
  • Kettaruumi suurus. Borg suudab andmeid tihendada, seega on tulemused oodatud.

Varundaja
Suurus

Borg
562Gb

Restic
628Gb

  • CPU kohta
    Borg ise tarbib vĂ€he ressursse, vaikeseade tihendamisel, kuid hinnata tuleb koos goofysi protsessiga. KokkuvĂ”ttes on need sarnased ja kasutavad umbes 1,2 sĂŒdamikku samal katse virtuaalmasinal.
  • MĂ€lu. Restic umbes 0,5Gb, Borg umbes 200Mb. Kuid kĂ”ik see on ebaoluline vĂ”rreldes sĂŒsteemi failide vahemĂ€luga. Seega soovitatakse anda rohkem mĂ€lu.
  • Blobi suuruse erinevus oli silmatorkav.

Varundaja
Suurus

Borg
umbes 500Mb

Restic
umbes 5Mb

  • Restici S3 töö on suurepĂ€rane. Borgi töö goofys kaudu ei tekita probleeme, kuid on tĂ€heldatud, et soovitatav on pĂ€rast varundamise lĂ”ppu teha umount, et tĂ€ielikult vahemĂ€lu vabastada. S3 töö eripĂ€ra on see, et mitteĂŒlekantavaid chunk'e ei saadeta kunagi Ă€mbrisse, mistĂ”ttu mittetĂ€ielikud andmed toovad kaasa suuri kahjustusi.
  • KĂ”ikide juhtumite integreerituse kontroll töötab hĂ€sti, kuid kiirus erineb oluliselt.
    Restic – 3,5 tundi.
    Borg, 100GB SSD failivahemĂ€luga – 5 tundi. Umbes sama kiirus, kui andmed asuvad kohalikul kettal.
    Borg loeb otse S3-st ilma vahemĂ€luta 33 tundi. Üli pikk aeg.

KokkuvĂ”ttes suudab Borg tihendada ja tal on suuremad blobid — see muudab sĂ€ilitamise ja S3 GET/PUT operatsioonide odavamaks. Kuid selle eest tuleb maksta keerukama ja aeglasema kontrollimisega. Mis puudutab taastamise kiirus, siis me ei tĂ€heldanud erinevust. JĂ€rgnevad varundamised (pĂ€rast esimest) resticiga vĂ”tavad veidi rohkem aega, kuid mitte oluliselt.

TĂ€htis tegur valiku tegemisel oli ka kogukonna suurus.

Ja me valisime borgi.

MÔned sÔnad tihendamise kohta

Borg'il on suurepÀrane uus kompressioonalgrithm - zstd. Kompressioonikvaliteedilt ei jÀÀ see alla gzip'ile, kuid on oluliselt kiirem. Kiiruselt on see vÔrreldav vaikimisi lz4'iga.

NÀiteks MySQL andmebaasi dump kompressitakse umbes kaks korda paremini kui lz4 sama kiirusel. Siiski nÀitab kogemus reaalsed andmetega, et Nextcloud'i node'del on kompressiooni mÀÀrade vahel vÀga vÀhe erinevusi.

Borg'il on ĂŒsna boonuseh mode, kus kui failil on kĂ”rge entropia, ei rakendata kompressiooni ĂŒldse, mis kiirendab tööprotsessi. See vĂ”imalus aktiveeritakse loomisel.
-C auto,zstd
zstd algoritmiga
Nii et selle valikuga vÔrreldes vaikimisi kompressiooniga saame
560Gb ja 562Gb vastavalt. Eelmise nĂ€ite andmed, tuletan meelde, kompressioonita on tulemus 628Gb. 2Gb erinevuse tulemus ĂŒllatas meid veidi, kuid otsustasime lĂ”puks valida auto,zstd.

Varukoopia kontrollimise meetodika

SĂŒsteem tĂ”statab virtuaalmasina otse teenusepakkuja vĂ”i kliendi juures, mis vĂ€hendab oluliselt vĂ”rgu koormust. VĂ€hemalt on see odavam kui kasutada enda infrastruktuuri ja andmeid edastada.

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/

Antiviiruse kontroll toimub sama skeemi alusel (tagantjĂ€rele). LĂ”ppude lĂ”puks laadivad kasutajad Nextcloudi erinevaid faile ning mitte kĂ”igil pole antiviirust. Failide kontrollimise tegemine ĂŒleslaadimise hetkel vĂ”tab liiga palju aega ja hĂ€irib Ă€ritegevust.

Skaleeritavus saavutatakse erinevates node'ides erinevate mÀrkide (tagide) abil jooksutades.
Meie jĂ€lgimise sĂŒsteemis kogutakse varukoopiate staatust lĂ€bi GitLabi API ĂŒhes aknas; vajadusel on probleemid kergesti mĂ€rgatavad ja samamoodi kergesti lahendatavad.

KokkuvÔte

KokkuvÔttes teame, et varukoopiad tehakse, meie varukoopiad on kehtivad, nende probleemide lahendamine vÔtab vÀhe aega ja toimub ringkonnasekretÀri tasandil. Varukoopiad vÔtavad tegelikult vÔrreldes tar.gz vÔi Baculaga tÔeliselt vÀhe ruumi.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster