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.

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 , 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 ) ja meie finalistideks said ja . Ă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 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
preparevalmistaminetestkontrollvalmiduse kontrollpÔhkÀsupeamine kÀsksundpostscriptfunktsioon, mis tÀidetakse lÔpus vÔi vea korral. Kasutame seda jaotise demonteerimiseks.
Teenusefunktsioonid
cleanupsalvestame vead vĂ”i kustutame logifaili.checklogparsing logi vea stringi otsimiseks.retvĂ€ljumise kĂ€itleja.checktimeoutajaĂŒlevaatus.
Keskkond
VERBOSE=1kuvame vead kohe ekraanile (stdout).SAVELOGSONSUCCES=1salvestame logi eduka tulemuse korral.INIT_REPO_IF_NOT_EXIST=1Loome repot, kui seda polnud. Vaikimisi on see keelatud.TIMEOUTmaksimaalne aeg pÔhitegevuse jaoks. Saate selle lÔppu seada 'm', 'h' vÔi 'd'.
Vana koopia hoidmise reĆŸiim. Vaikimisi:
KEEP_DAILY=7KEEP_WEEKLY=4KEEP_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 , 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 . Restic saatis S3-sse ise.
Goofys töötab vÀga kiiresti ja hÀsti, ning sellele on saadaval , 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
