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.

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 , 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 ) ja meie finalistideks said ja . 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 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
preparevalmistaminetestcheckvalmiduse kontrolliminepeamine kĂ€skpĂ”hikĂ€skforcepostscriptfunktsioon, mis tĂ€idetakse lĂ”puks vĂ”i vea korral. Kasutame seda jaotuse lahtiĂŒhendamiseks.
Teenusefunktsioonid
cleanupsalvestame vead vĂ”i kustutame logifaili.checklogparsing logi viga sĂ”naga.retvĂ€ljapÀÀsu kĂ€itleja.checktimeoutkontrollimine aja ĂŒletamiseks.
Keskkond
VERBOSE=1kuvame vead kohe ekraanile (stdout).SAVELOGSONSUCCES=1salvestame logi eduka toimingu korral.INIT_REPO_IF_NOT_EXIST=1Loome reposi, kui seda pole olnud. Vaikimisi keelatud.TIMEOUTmaksimaalne aeg pÔhitoiminguks. Saate selle lÔpuks seadistada 'm', 'h' vÔi 'd'.
Vanade koopiaide sĂ€ilitamise reĆŸiim. Vaikimisi:
KEEP_DAILY=7KEEP_WEEKLY=4KEEP_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 , 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 . Restic edastas andmed S3-sse ise.
Goofys töötab vÀga kiiresti ja tÔhusalt, ning sellel on , 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
