{"id":86904,"date":"2020-07-01T07:42:30","date_gmt":"2020-07-01T05:42:30","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud"},"modified":"2020-07-01T07:42:30","modified_gmt":"2020-07-01T05:42:30","slug":"kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud","title":{"rendered":"Kuidas GitLab aitab teha suurte NextCloudi salvestuskohtade varukoopiaid","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tere, Habr!<\/p>\n<p><\/p>\n<p>T\u00e4na tahan r\u00e4\u00e4kida meie kogemustest suurandmete varundamise automatiseerimise osas Nextcloudi salvestites erinevates konfiguratsioonides. Olen \"Mollynia AK\" CTO, kus tegeleme IT-s\u00fcsteemide konfiguratsioonihaldusega; andmete salvestamiseks kasutame Nextcloudi, sealhulgas jaotatud struktuuris koos varundamisega.<\/p>\n<p><\/p>\n<p>Probleemid, mis tulenevad installatsioonide ise\u00e4rasustest, seisnevad andmete rohkusest. Nextcloudi versioonihaldus, varundamine, subjektiivsed p\u00f5hjused ja muu loovad palju dublette.<\/p>\n<p><\/p>\n<h2 id=\"predystoriya\">Eellugu<\/h2>\n<p><\/p>\n<p>Nextcloudi administreerimisel kerkib teravalt esile t\u00f5husate varunduste organiseerimise probleem, mida tuleb kindlasti kr\u00fcpteerida, kuna andmed on v\u00e4\u00e4rtuslikud.<\/p>\n<p><\/p>\n<p>Pakume varundamise salvestamise v\u00f5imalusi meie juures v\u00f5i kliendi eraldiseisvates Nextcloudist v\u00e4ljaspool asuvates masinates, mis n\u00f5uab paindlikku automatiseeritud l\u00e4henemist haldamisele.<\/p>\n<p><\/p>\n<p>Kliendid on paljusid, k\u00f5ik erinevate konfiguratsioonide ja oma erip\u00e4radega. Siinkohal ei sobi standardne meetod, kus kogu keskkond kuulub sinule ja varundused tehakse croni kaudu.<\/p>\n<p><\/p>\n<p>Alustame sisendite vaatamisega. Meil on vajalik:<\/p>\n<p><\/p>\n<ul>\n<li>Skaleeritavus, kas \u00fchel s\u00f5lmel v\u00f5i mitmel. Suurte installatsioonide jaoks kasutame salvestamiseks minio.<\/li>\n<li>Teadlikkus varundamise probleemidest.<\/li>\n<li>Varundus peab olema kliendi juures ja\/v\u00f5i meil.<\/li>\n<li>Probleemide kiire ja lihtne lahendamine.<\/li>\n<li>Kliendid ja installatsioonid erinevad \u00fcksteisest oluliselt \u2014 \u00fchtsuse saavutamine ei \u00f5nnestu.<\/li>\n<li>Taastumise kiirus peab olema minimaalne kahes stsenaariumis: t\u00e4ielik taastamine (\u00f5nnetus), \u00fcks kaust \u2014 kustutatud eksituse t\u00f5ttu.<\/li>\n<li>Deduplication funktsioon on kohustuslik.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kuidas GitLab aitab teha suurte NextCloudi salvestuskohtade varukoopiaid\" src=\"\/wp-content\/uploads\/2020\/07\/1a0048e3295fef94ddca28e50612e3cb.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Varunduste haldamise probleemide lahendamiseks oleme lisanud GitLabi. rohkem \u00fcksikasju allpool. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Ilma kahtlusteta ei ole me esimesed, kes sellist probleemi lahendavad, kuid arvame, et meie praktiline, kannatustega saadud kogemus v\u00f5ib olla huvitav ja oleme valmis seda jagama.<\/p>\n<p><\/p>\n<p>Kuna meie ettev\u00f5ttes valitseb avatud koodi poliitika, otsisime lahendust avatud l\u00e4htekoodiga. Omalt poolt jagame oma arendusi ja avaldame need. N\u00e4iteks GitHubis on <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/molnia-com\/nextcloud-safe-trash\">meie Nextcloudi plugin<\/a><\/noindex>, mida me paigaldame klientidele, et tugevdada andmete kaitsmist juhusliku v\u00f5i kavandatud kustutamise korral.<\/p>\n<p><\/p>\n<h2 id=\"sredstva-bekapirovaniya\">Varundustooted<\/h2>\n<p><\/p>\n<p>Otsime lahenduste meetodeid, alustades varukoopiate loomise vahendi valimisest.<\/p>\n<p><\/p>\n<p>Tavaline tar + gzip t\u00f6\u00f6tab halvasti - andmed korduvad. Inkrementaalne koopia sisaldab sageli t\u00f5eliselt v\u00e4ga v\u00e4he muudatusi ning suur osa andmetest \u00fches failis kordub.<br \/>\nOn veel \u00fcks probleem - jaotatud andmehoidla \u00fcleliigsus. Me kasutame Minio't ja selle andmed on p\u00f5him\u00f5tteliselt \u00fcleliigsed. Kas pidime varukoopiaid tegema l\u00e4bi Minio - koormama seda ja kasutama k\u00f5iki vahepealseid kihtide vahel ning mis on v\u00e4hemalt sama oluline, on oht unustada osa \u00e4mbrite ja meta-informatsiooni. V\u00f5i kasutada deduplication'i.<\/p>\n<p><\/p>\n<p>Deduplication'i vahendeid on avatud l\u00e4htekoodiga (Habr's olid <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/449282\/\">artikleid<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/420055\/\">sellel teemal<\/a><\/noindex>) ja meie finalistideks said <noindex><a rel=\"nofollow\" href=\"https:\/\/borgbackup.readthedocs.io\/en\/stable\/\">, kus \"k\u00f5ik t\u00f6\u00f6 toimub konteinerites\". Kutsume n\u00fc\u00fcd ajas edasi 2013. aastasse, kui toimus Docker'i esimene v\u00e4ljaanne, ja konteinerid said l\u00f5puks populaarseteks massiliseks lahenduseks. Sel ajal oli peamine t\u00f6\u00f6riist konteinerite orkestreerimiseks<\/a><\/noindex> ja <noindex><a rel=\"nofollow\" href=\"https:\/\/restic.net\/\">Restic<\/a><\/noindex>. \u00dcksikasjad meie kahe rakenduse v\u00f5rdlemise kohta allpool, aga r\u00e4\u00e4gime esmalt, kuidas me kogu skeemi korraldasime.<\/p>\n<p><\/p>\n<h2 id=\"upravlenie-sozdaniem-rezervnyh-kopiy\">Varukoopiate loomise haldamine<\/h2>\n<p><\/p>\n<p>Borg ja Restic on head, kuid kumbki toode ei oma tsentraliseeritud haldusmehhanismi. Haldamise ja kontrollimise eesm\u00e4rgil valisime t\u00f6\u00f6riista, mis on meil juba kasutusel, ilma milleta me ei suuda oma t\u00f6\u00f6d ette kujutada, sealhulgas automatiseerimise osas - see on tuntud CI\/CD - GitLab.<\/p>\n<p><\/p>\n<p>Idee seisneb j\u00e4rgmises: igale andmeid hoidvale Nextcloud'i s\u00f5lmele installitakse gitlab-runner. Runner k\u00e4ivitab ajakava alusel skripti, mis j\u00e4lgib varukoopiate loomise protsessi, ja see k\u00e4ivitab Borgi v\u00f5i Restici.<\/p>\n<p><\/p>\n<p>Mida me saime? Tagasiside t\u00e4itmisest, mugav kontroll muudatuste \u00fcle, detailid vea korral.<\/p>\n<p><\/p>\n<p>Siin <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/molnia-com\/backup-by-runner\">siit GitHubist<\/a><\/noindex> oleme \u00fcles laadinud skripti n\u00e4idised erinevate \u00fclesannete jaoks, ning me sidusime selle l\u00f5puks mitte ainult Nextcloud'i, vaid ka paljude teiste teenustega. Seal on ka ajakava, kui ei taha seda k\u00e4sitsi seadistada (aga me ei taha) ja .gitlab-ci.yml<\/p>\n<p><\/p>\n<p>GitLabi API-s ei ole praegu v\u00f5imalik muuta CI\/CD ajapiiri, ja see on suhteliselt v\u00e4ike. Seda tuleb suurendada, \u00fctleme kuni <code>1d<\/code>.<\/p>\n<p><\/p>\n<p>\u00d5nneks oskab GitLab k\u00e4ivitada mitte ainult commit'i j\u00e4rgi, vaid ka ajakava alusel, see on just see, mida me vajame.<\/p>\n<p><\/p>\n<p>N\u00fc\u00fcd skripti \u00fcmber.<\/p>\n<p><\/p>\n<p>Seadsime sellele skripti jaoks j\u00e4rgmised tingimused:<\/p>\n<p><\/p>\n<ul>\n<li>Peab t\u00f6\u00f6tama nii runneri kui ka k\u00e4sitsi konsoolist sama funktsionaalsusega.<\/li>\n<li>Oluline on, et veahaldurid oleksid olemas:<\/li>\n<li>return code.<\/li>\n<li>stringi otsimine logis. N\u00e4iteks v\u00f5ib meile veaks olla s\u00f5num, mida programm kriitiliseks ei pea.<\/li>\n<li>Ajavahemiku t\u00f6\u00f6tlemine. T\u00e4itmise aeg peab olema m\u00f5istlik.<\/li>\n<li>Meil on vaja \u00fcksikasjalikku logi. Kuid ainult vigade korral.<\/li>\n<li>Samuti viiakse enne alustamist l\u00e4bi rida teste.<\/li>\n<li>M\u00f5ningaid mugavusi, mis me oleme toeks olles leidnud kasulikuks:<\/li>\n<li>K\u00e4ivitamine ja l\u00f5petamine fikseeritakse kohaliku masina sisselogis. See aitab siduda s\u00fcsteemivead ja varundamise t\u00f6\u00f6.<\/li>\n<li>Osad vealogist, kui need esinevad, v\u00e4ljastatakse stdout-s, kogu logi kirjutatakse eraldi faili. Mugav on kohe CI-s \u00fcle vaadata ja hinnata viga, kui see on triviaalne.<\/li>\n<li>Deebagimise re\u017eiimid.<\/li>\n<\/ul>\n<p><\/p>\n<p>T\u00e4ielik logi salvestatakse artefaktina GitLabis, kui viga ei esine, siis logi kustutatakse. Skripti kirjutame bashis.<\/p>\n<p><\/p>\n<p>Iga ettepanek ja m\u00e4rkused avatud l\u00e4htekoodiga oleme r\u00f5\u00f5muga valmis arutama \u2014 oodatud.<\/p>\n<p><\/p>\n<h2 id=\"kak-eto-rabotaet\">Kuidas see t\u00f6\u00f6tab<\/h2>\n<p><\/p>\n<p>Varundatavates s\u00f5lmedes k\u00e4ivitub runner bashi t\u00e4itjaga. Ajakava j\u00e4rgi k\u00e4ivitatakse CI\/CD \u00fclesanne spetsiaalses repos. Runner k\u00e4ivitab skripti, universaalse \u00fcmbriku nende \u00fclesannete jaoks, kus kontrollitakse varundamise repositoriumi, mount-punkte ja k\u00f5ike, mida soovime, seej\u00e4rel toimub varundamine ja vana kustutamine. Valmis varundus saadetakse S3-le.<\/p>\n<p><\/p>\n<p>T\u00f6\u00f6tame sellise skeemi j\u00e4rgi \u2014 see on v\u00e4lisekspert AWS v\u00f5i Venemaa analoog (see on kiirem ja andmed ei lahku Venemaalt). V\u00f5i paigaldame kliendile eraldi minio klastri nende territooriumile nende eesm\u00e4rkide jaoks. Tavaliselt teeme seda turvakaalutlustel, kui klient ei soovi, et andmed lahkuvad nende piiridest.<\/p>\n<p><\/p>\n<p>Me ei kasutanud SSH kaudu varunduse saatmise funktsiooni. See ei suurenda turvalisust ning S3 pakkuja v\u00f5rguv\u00f5imalused on oluliselt k\u00f5rgemad kui meie SSH masinal.<\/p>\n<p><\/p>\n<p>Kaitsmiseks h\u00e4kkerite eest kohaliku masina peal \u2014 kuna ta v\u00f5ib kustutada andmeid S3-lt, tuleb kindlasti sisse l\u00fclitada versioonimine.<br \/>\nVarundaja kr\u00fcpteerib alati varunduse.<\/p>\n<p><\/p>\n<p>Borgil on kr\u00fcpteerimiseta re\u017eiim <code>none<\/code>, kuid me ei soovita seda igal juhul sisse l\u00fclitada. Selles re\u017eiimis ei toimu mitte ainult kr\u00fcpteerimist, vaid ka kirjutatavatele andmetele ei arvutata kontrollsumma, mist\u00f5ttu saab terviklikkust kontrollida ainult kaudselt, indeksite j\u00e4rgi.<\/p>\n<p><\/p>\n<p>Erakonna ajakava alusel kontrollitakse varunduste indeksite ja sisu terviklikkust. Kontrollimine toimub aeglaselt ja kaua, seet\u00f5ttu k\u00e4ivitame selle eraldi kord kuus. See v\u00f5ib kesta mitu p\u00e4eva.<\/p>\n<p><\/p>\n<h2 id=\"ridmi-na-russkom\">Riidmine venekeeles<\/h2>\n<p><\/p>\n<h3 id=\"osnovnye-funkcii\">Peamised funktsioonid<\/h3>\n<p><\/p>\n<ul>\n<li><code>prepare<\/code> valmistamine<\/li>\n<li><code>testkontroll<\/code> valmiduse kontroll<\/li>\n<li><code>p\u00f5hk\u00e4su<\/code> peamine k\u00e4sk<\/li>\n<li><code>sundpostscript<\/code> funktsioon, mis t\u00e4idetakse l\u00f5pus v\u00f5i vea korral. Kasutame seda jaotise demonteerimiseks.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"service-functions\">Teenusefunktsioonid<\/h3>\n<p><\/p>\n<ul>\n<li><code>cleanup<\/code> salvestame vead v\u00f5i kustutame logifaili.<\/li>\n<li><code>checklog<\/code> parsing logi vea stringi otsimiseks.<\/li>\n<li><code>ret<\/code> v\u00e4ljumise k\u00e4itleja.<\/li>\n<li><code>checktimeout<\/code> aja\u00fclevaatus.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"environment\">Keskkond<\/h3>\n<p><\/p>\n<ul>\n<li><code>VERBOSE=1<\/code> kuvame vead kohe ekraanile (stdout).<\/li>\n<li><code>SAVELOGSONSUCCES=1<\/code> salvestame logi eduka tulemuse korral.<\/li>\n<li><code>INIT_REPO_IF_NOT_EXIST=1<\/code> Loome repot, kui seda polnud. Vaikimisi on see keelatud.<\/li>\n<li><code>TIMEOUT<\/code> maksimaalne aeg p\u00f5hitoiminguks. Sa saad seada selle l\u00f5puks kui &#8216;m&#8217;, &#8216;h&#8217; v\u00f5i &#8216;d&#8217;.<\/li>\n<\/ul>\n<p><\/p>\n<p>Vana koopia hoidmise re\u017eiim. Vaikimisi:<\/p>\n<p><\/p>\n<ul>\n<li><code>KEEP_DAILY=7<\/code><\/li>\n<li><code>KEEP_WEEKLY=4<\/code><\/li>\n<li><code>KEEP_MONTHLY=6<\/code><\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"peremennye-vnutri-skripta\">Muudatused skripti sees<\/h2>\n<p><\/p>\n<ul>\n<li><code>ERROR_STRING<\/code> \u2014 string logi kontrollimiseks vea jaoks.<\/li>\n<li><code>EXTRACT_ERROR_STRING<\/code> \u2014 v\u00e4ljend, et kuvada string, kui on viga.<\/li>\n<li><code>KILL_TIMEOUT_SIGNAL<\/code> \u2014 signaal tapmiseks, kui aega on \u00fcle.<\/li>\n<li><code>TAIL<\/code> \u2014 kui palju strings vigadest ekraanil.<\/li>\n<li><code>COLORMSG<\/code> \u2014 s\u00f5numi v\u00e4rv (vaikimisi kollane).<\/li>\n<\/ul>\n<p><\/p>\n<p>See skript, mis nimetatakse wordpress, on tinglikult teada, selle eelis on see, et see varundab ka mysql andmebaasi. Seet\u00f5ttu saab seda kasutada ka Nextcloudi \u00fchekordsetes paigaldustes, kus on v\u00f5imalik ka andmebaasi varundamine. Mugavus ei seisne ainult selles, et k\u00f5ik on \u00fches kohas, vaid ka andmebaasi sisu on tihedalt seotud failide sisuga, kuna ajavahe on minimaalne.<\/p>\n<p><\/p>\n<h2 id=\"restic-vs-borg\">Restic vs Borg<\/h2>\n<p><\/p>\n<p>Borg ja Restic'i v\u00f5rdlused on sealhulgas <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/454734\/\">siin Habr'is<\/a><\/noindex>, ja meie \u00fclesanne ei olnud lihtsalt teha lihtsalt veel \u00fcks, vaid oma. Meie jaoks oli oluline, kuidas see meie andmetega, meie spetsiifikaga v\u00e4lja n\u00e4eb. Me toome neid.<\/p>\n<p><\/p>\n<p>Meie valikukriteeriumid, peale juba mainitud (de-deduplikatsioon, kiire taastamine jne.):<\/p>\n<p><\/p>\n<ul>\n<li>T\u00f6\u00f6 katkestamisele vastupidavus. Kontrollimine kill -9 peal.<\/li>\n<li>Suurus kettal.<\/li>\n<li>Ressursside n\u00f5udlikkus (CPU, m\u00e4lu).<\/li>\n<li>Salvestatavate blobide suurus.<\/li>\n<li>T\u00f6\u00f6 S3-ga.<\/li>\n<li>T\u00f5ej\u00e4rjestuse kontroll.<\/li>\n<\/ul>\n<p><\/p>\n<p>Testimiseks v\u00f5tsime \u00fche kliendi, kellel on reaalne andmestik ja kogumaht 1,6TB.<br \/>\nTingimused.<\/p>\n<p><\/p>\n<p>Borg ei oska otse S3-ga t\u00f6\u00f6tada, ja me montisime selle fuse kettana, l\u00e4bi <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kahing\/goofys\">goofys<\/a><\/noindex>. Restic saatis S3-sse ise.<\/p>\n<p><\/p>\n<p>Goofys t\u00f6\u00f6tab v\u00e4ga kiiresti ja h\u00e4sti, ning sellele on saadaval <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kahing\/catfs\">ketta vahem\u00e4lu moodul<\/a><\/noindex>, mis kiirendab t\u00f6\u00f6protsessi veelgi. See on beetaversioonis ja tunnistama peab, et meil esines katsetel (teistel) andmete kaotamisega probleeme. Kuid mugavage see, et ise varundamisprotseduur ei n\u00f5ua suurt lugemist, vaid peamiselt kirjutamist, seet\u00f5ttu kasutame vahem\u00e4lu ainult andmete terviklikkuse kontrollimisel.<\/p>\n<p><\/p>\n<p>Et v\u00e4hendada v\u00f5rgu m\u00f5ju, kasutasime kohalikke teenusepakkujat \u2014 Yandex Cloud.<\/p>\n<p><\/p>\n<p>Testimistulemused v\u00f5rdlemiseks.<\/p>\n<p><\/p>\n<ul>\n<li>Kill -9 koos edasise taask\u00e4ivitamisega, m\u00f5lemad l\u00e4ksid edukalt.<\/li>\n<li>Suurus kettal. Borg suudab andmeid tihendada, seega on tulemused oodatavad.<\/li>\n<\/ul>\n<p><\/p>\n<p>Backuper<br \/>\nSuurus<\/p>\n<p>, kus \"k\u00f5ik t\u00f6\u00f6 toimub konteinerites\". Kutsume n\u00fc\u00fcd ajas edasi 2013. aastasse, kui toimus Docker'i esimene v\u00e4ljaanne, ja konteinerid said l\u00f5puks populaarseteks massiliseks lahenduseks. Sel ajal oli peamine t\u00f6\u00f6riist konteinerite orkestreerimiseks<br \/>\n562Gb<\/p>\n<p>Restic<br \/>\n628Gb<\/p>\n<p><\/p>\n<ul>\n<li>CPU j\u00e4rgi<br \/>\nIseseisvalt kulutab borg v\u00e4he, vaikimisi tihendamisega, kuid seda tuleb koos goofys protsessiga hinnata. Kokku on nad v\u00f5rdsed ja kasutavad umbes 1,2 tuuma samal testimise virtuaalmasinal.<\/li>\n<li>M\u00e4lu. Restic umbes 0,5Gb, Borg umbes 200Mb. Kuid see k\u00f5ik on t\u00fchine v\u00f5rreldes s\u00fcsteemi failide vahem\u00e4luga. Seega on soovitav eraldada rohkem m\u00e4lu.<\/li>\n<li>Blobide suuruste vahe osutus silmapaistvaks.<\/li>\n<\/ul>\n<p><\/p>\n<p>Backuper<br \/>\nSuurus<\/p>\n<p>, kus \"k\u00f5ik t\u00f6\u00f6 toimub konteinerites\". Kutsume n\u00fc\u00fcd ajas edasi 2013. aastasse, kui toimus Docker'i esimene v\u00e4ljaanne, ja konteinerid said l\u00f5puks populaarseteks massiliseks lahenduseks. Sel ajal oli peamine t\u00f6\u00f6riist konteinerite orkestreerimiseks<br \/>\numbes 500Mb<\/p>\n<p>Restic<br \/>\numbes 5Mb<\/p>\n<p><\/p>\n<ul>\n<li>T\u00f6\u00f6tamine S3-ga Resticuga on suurep\u00e4rane. Borgi t\u00f6\u00f6 goofys'i kaudu ei tekita k\u00fcsimusi, kuid on m\u00e4rgatud, et varundamise l\u00f5ppedes on soovitatav teha umount, et vahem\u00e4lu t\u00e4ielikult l\u00e4htestada. S3 t\u00f6\u00f6spetsifikaat on see, et alla laadimata t\u00fckid ei saadeta kunagi \u00e4mbri, seega osaliselt alla laaditud andmed p\u00f5hjustavad suuri kahjustusi.<\/li>\n<li>Integriteedi kontroll t\u00f6\u00f6tab m\u00f5lemal juhul h\u00e4sti, kuid kiirus erineb oluliselt.<br \/>\nRestic \u2013 <strong>3,5 tundi<\/strong>.<br \/>\nBorg, 100Gb SSD failide vahem\u00e4luga \u2013 <strong>5 tundi<\/strong>. Umbes sama kiirus, kui andmed asuvad kohalikul kettal.<br \/>\nBorg loeb otse S3-st ilma vahem\u00e4luta <strong>33 tundi<\/strong>. Kohutavalt pikk.<\/li>\n<\/ul>\n<p><\/p>\n<p>Kokkuv\u00f5ttes suudab Borg andmeid tihendada ja tal on suuremad blobid \u2014 mis teeb S3-s salvestamise ja GET\/PUT operatsioonid odavamaks. Kuid selle eest tuleb maksta keerulisema ja aeglasema kontrollimisega. Mis puudutab taastamise kiirus \u2014 siis me ei m\u00e4rganud mingit erinevust. J\u00e4rgnevate varunduste (p\u00e4rast esimest) hulgas teeb Restic veidi kauem, kuid mitte oluliselt.<\/p>\n<p><\/p>\n<p>Kogukonna suurus ei olnud valikus viimasel kohal.<\/p>\n<p><\/p>\n<p>Ja me valisime Borgi.<\/p>\n<p><\/p>\n<h2 id=\"paru-slov-o-szhatii\">M\u00f5ned s\u00f5nad tihendamise kohta<\/h2>\n<p><\/p>\n<p>Borgil on oma arsenalis suurep\u00e4rane uus tihendamisalgoritm \u2014 zstd. Tihendamise kvaliteet ei ole halvem kui gzip, kuid oluliselt kiirem. Ja kiiruselt v\u00f5rreldav vaikimisi lz4-ga.<\/p>\n<p><\/p>\n<p>N\u00e4iteks MySQL andmebaasi dump tihendatakse kaks korda paremini kui lz4 sama kiirusel. Siiski n\u00e4itab kogemus reaalsetel andmetel, et Nextcloud nodi tihendamisel on erinevus v\u00e4ga v\u00e4ike.<\/p>\n<p><\/p>\n<p>Borgis on \u00fcsna tore tihendamise re\u017eiim \u2014 kui failil on suur entropia, siis tihendamine ei toimu \u00fcldse, mis suurendab t\u00f6\u00f6 kiirus. Seda saab lubada loomise ajal valikuga<br \/>\n<code>-C auto,zstd<\/code><br \/>\nzstd algoritmi jaoks<br \/>\nNii et selle valikuga saime v\u00f5rreldes vaike tihendamisega<br \/>\n560Gb ja 562Gb vastavalt. Eelmiste n\u00e4idete andmed, tuletan meelde, ilma kokkusurumiseta on tulemus 628Gb. 2Gb vahe \u00fcllatas meid, kuid otsustasime siiski k\u00f5ik valida. <code>auto,zstd<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"metodika-proverki-bekapa\">Varukoopia kontrollimise meetodika<\/h2>\n<p><\/p>\n<p>Virtuaalmasin k\u00e4ivitub otse teenusepakkuja v\u00f5i kliendi juures, mis v\u00e4hendab v\u00f5rgu koormust. See on v\u00e4hemalt odavam kui oma juures t\u00f5statada ja trafiku edastamine.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">goofys --cache \"--free:5%:\\\/mnt\\\/cache\" -o allow_other --endpoint https:\\\/\\\/storage.yandexcloud.net --file-mode=0666 --dir-mode=0777 xxxxxxx.com \\\/mnt\\\/goofys\nexport BORG_PASSCOMMAND=\"cat \\\/home\\\/borg\\\/.borg-passphrase\"\nborg list \\\/mnt\\\/goofys\\\/borg1\\\/\nborg check --debug -p --verify-data \\\/mnt\\\/goofys\\\/borg1\\\/<\/code><\/pre>\n<p><\/p>\n<p>Me kontrollime faile viiruset\u00f5rjega (tagantj\u00e4rele) sama skeemi j\u00e4rgi. L\u00f5ppude l\u00f5puks laadivad kasutajad Nextcloudi erinevat sisu ja mitte k\u00f5ikidel pole viiruset\u00f5rjet. Kontrollimine \u00fcleslaadimise hetkel v\u00f5tab liiga palju aega ja segab \u00e4ri.<\/p>\n<p><\/p>\n<p>Mastaapsus saavutatakse erinevate siltidega jooksutajate k\u00e4ivitamisega erinevates nodides.<br \/>\nMeie j\u00e4lgimises kogutakse varukoopiate staatuseid l\u00e4bi GitLabi API \u00fchte aknasse, vajadusel on probleemid kergesti m\u00e4rgatavad ja samuti kergesti lokaliseeritavad.<\/p>\n<p><\/p>\n<h2 id=\"zaklyuchenie\">Kokkuv\u00f5te<\/h2>\n<p><\/p>\n<p>Kokkuv\u00f5ttes teame t\u00e4pselt, et teeme varukoopiaid, et meie varukoopiad on kehtivad, ja probleemid, mis nendega tekivad, v\u00f5tavad v\u00e4he aega ja lahendatakse \u00f6\u00f6de administraatori tasemel. Varukoopiad v\u00f5tavad v\u00f5rreldes tar.gz v\u00f5i Baculaga t\u00f5eliselt v\u00e4he ruumi.<\/p>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/508758\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u043d\u0430\u0448\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 Nextcloud \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445. \u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0421\u0422\u041e \u0432 \u00ab\u041c\u043e\u043b\u043d\u0438\u044f \u0410\u041a\u00bb, \u0433\u0434\u0435 \u043c\u044b \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0441\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c IT \u0441\u0438\u0441\u0442\u0435\u043c, \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Nextcloud. \u0412 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435, \u0441 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439, \u0441 \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432\u044b\u0442\u0435\u043a\u0430\u044e\u0449\u0438\u0435 \u0438\u0437 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0439 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043d\u043e\u0433\u043e. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":86905,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-86904","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u043d\u0430\u0448\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 Nextcloud \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a GitLab \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0431\u044d\u043a\u0430\u043f\u044b \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 NextCloud | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u043d\u0430\u0448\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 Nextcloud \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-07-01T05:42:30+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-01T05:42:30+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Kuidas GitLab aitab teha suurte NextCloudi salvestuste varukoopiaid | ProHoster","description":"Tere, Habr! T\u00e4na tahan r\u00e4\u00e4kida meie kogemusest suurte andmete varukoopiate automatiseerimisel Nextcloudi salvestustes erinevates konfiguratsioonides.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a GitLab \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0431\u044d\u043a\u0430\u043f\u044b \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 NextCloud | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u043d\u0430\u0448\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 Nextcloud \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445.","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-07-01T05:42:30+00:00","article:modified_time":"2020-07-01T05:42:30+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"86904","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 14:03:54","updated":"2022-10-06 09:05:46","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/86904","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=86904"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/86904\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/86905"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=86904"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=86904"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=86904"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}