Përshëndetje, Habr!
Sot dëshiroj të flas për përvojën tonë në automatizimin e ruajtjes së rezervave të të dhënave të mëdha të depozitave Nextcloud në konfiguracione të ndryshme. Unë punoj si CTO në "Molinia AK", ku merremi me menaxhimin e konfigurimeve të sistemeve IT; për ruajtjen e të dhënave përdoret Nextcloud, përfshirë një strukturë të shpërndarë me rezervim.
Problemet që rrjedhin nga veçoritë e instalimeve janë që ka shumë të dhëna. Versionimi që ofron Nextcloud, ruajtja, arsyet subjektive dhe të tjera krijojnë shumë kopje.
Historia e mëparshme
Gjatë administrimit të Nextcloud, del në pah problemi i organizimit të një ruajtjeje efektive që duhet patjetër të jetë e kriptuar, pasi të dhënat janë të vlefshme.
Ne ofrojmë opsione për ruajtjen e backups te ne ose te klienti në makinat e tij të ndara nga Nextcloud, çka kërkon një qasje fleksibile dhe të automatizuar ndaj administrimit.
Ka shumë klientë, të gjithë me konfigurime të ndryshme, dhe çdo njëri në platformat e veta dhe me veçoritë e veta. Këtu, metodika standarde kur e gjithë platforma ju takon, dhe backups bëhen nga crontab, nuk funksionon mirë.
Së pari, le të shohim të dhënat hyrëse. Na duhen:
- Shkallëzueshmëria në aspektin e një nodi ose disa. Për instalime të mëdha, ne përdorim minio si depo.
- Të jemi në dijeni të problemeve me ekzekutimin e backup-eve.
- Duhet të ruajmë backup te klientët dhe e ne.
- Të zgjidhim shpejt dhe lehtë problemet.
- KlientĂ«t dhe instalimet dallojnĂ« shumĂ« nga njĂ«ri-tjetri â nuk arrihet njĂ«llojshmĂ«ri.
- ShpejtĂ«sia e rikuperimit duhet tĂ« jetĂ« minimale nĂ« dy skenarĂ«: rikuperimi i plotĂ« (disaster), njĂ« dosje â e fshirĂ« gabimisht.
- Funksioni i deduplication-it është i detyrueshëm.

Për të zgjidhur problemin e menaxhimit të backup-eve, ne lidhem me GitLab. Më shumë në lidhje me këtë më poshtë.
Sigurisht, nuk jemi të parët që zgjidhim një problem të tillë, por na duket se përvoja jonë praktike e vuajtur mund të jetë e interesantë dhe jemi të gatshëm ta ndajmë atë.
Duke pasur parasysh se në kompaninë tonë është miratuar politika e opensource, ne kërkuam një zgjidhje me kod të hapur. Në këmbim, ne ndajmë zhvillimet tona dhe i publikojmë ato. Për shembull, në GitHub ka , të cilin e instalojmë te klientët, duke forcuar ruajtjen e të dhënave në rast të fshirjes aksidentale ose të qëllimshme.
Mjetet e backup-it
Kërkimi i metodave për zgjidhje e filluam me zgjedhjen e mjetit për krijimin e backup-it.
Tar-i i zakonshĂ«m + gzip nuk funksionon mirĂ« â tĂ« dhĂ«nat janĂ« tĂ« dyfishta. Inkremeti shpesh pĂ«rmban shumĂ« pak ndryshime nĂ« fakt, dhe shumica e tĂ« dhĂ«nave brenda njĂ« skedari pĂ«rsĂ«ritet.
Ka njĂ« tjetĂ«r problem â redundanca e ruajtjes sĂ« shpĂ«rndarĂ« tĂ« tĂ« dhĂ«nave. Ne pĂ«rdorim minio dhe tĂ« dhĂ«nat e tij nĂ« parim janĂ« tĂ« tepĂ«rta. Ose duhej bĂ«rĂ« backup pĂ«rmes vetĂ« minio â duke e ngarkuar atĂ« dhe duke pĂ«rdorur tĂ« gjitha lidhjet midis sistemit tĂ« skedarĂ«ve, dhe çfarĂ« nuk Ă«shtĂ« mĂ« pak e rĂ«ndĂ«sishme, ka rrezik tĂ« harrohet pĂ«r disa ndĂ«rtesa dhe meta-informacione. Ose tĂ« pĂ«rdorim deduplikimin.
Mjetet e backup-it me deduplikim ekzistojnë në open source (kanë qenë në habrë ) dhe finalistët tanë u bënë dhe . Për krahasimin tonë të dy aplikacioneve më poshtë, ndërsa për tani do të flasim se si e organizuam gjithë skemën.
Menaxhimi i krijimit të kopjeve rezervë
Borg dhe Restic janĂ« tĂ« mira, por asnjĂ« nga produktet nuk ka njĂ« mekanizĂ«m tĂ« centralizuar menaxhimi. PĂ«r qĂ«llimin e menaxhimit dhe kontrollit ne zgjodhĂ«m njĂ« mjet qĂ« tashmĂ« Ă«shtĂ« implementuar, pa tĂ« cilin nuk e imagjinojmĂ« punĂ«n tonĂ«, pĂ«rfshirĂ« automatizimin â ky Ă«shtĂ« CI/CD i njohur â GitLab.
Ideja qëndron në këtë: në çdo nodë që ruan të dhëna Nextcloud vendoset gitlab-runner. Runner-i nis në një orar skenarin që mbikëqyr procesin e backup-it, dhe ai nis Borg ose Restic.
ĂfarĂ« morĂ«m? NjĂ« feedback nga realizimi, kontroll tĂ« rehatshĂ«m mbi ndryshimet, detaje nĂ« rast tĂ« gabimit.
Ja ne kemi publikuar shembuj të skenarëve për detyra të ndryshme, dhe ne në përfundim e lidhëm me backup-in jo vetëm të Nextcloud, por edhe të shumë shërbimeve të tjera. Atje ndodhet gjithashtu planifikuesi, nëse nuk doni ta konfiguroni manualisht (e as ne nuk duam) dhe .gitlab-ci.yml
Në API-në e GitLab-it aktualisht nuk ka mundësi për të ndryshuar kohëzgjatjen e CI/CD, dhe ajo është e vogël. Duhet ta rrisim, themi deri në 1d.
Fatmirësisht, GitLab di të nisë jo vetëm me commit-et, por edhe sipas orarit, kjo është pikërisht ajo që na nevoitet.
Tani për skriptin e mbështjellës.
Ne vendosëm këto kushte për këtë skript:
- Duhet të nisë si me runner-in, ashtu edhe me duar nga konsola me funksionalitet të njëjtë.
- Duhen patjetër trajtues të gabimeve:
- return code.
- kërkimi i një string në log. Për shembull, për ne një gabim mund të jetë një mesazh që programi nuk e konsideron fatale.
- Trajtimi i timeout. Koha e ekzekutimit duhet të jetë e arsyeshme.
- Na nevojitet një log më i detajuar. Por vetëm në rast të gabimit.
- Gjithashtu, bëhet një sërë testesh para fillimit.
- Përfitime të vogla për lehtësim, që i kemi gjetur të dobishme gjatë mbështetjes:
- Fillimi dhe përfundimi regjistrohen në logun e makinës lokale. Kjo ndihmon në lidhjen e gabimeve të sistemit me funksionimin e backupit.
- NjĂ« pjesĂ« e logut tĂ« gabimeve, kur ka, jepet nĂ« stdout, i gjithĂ« logu shkruhet nĂ« njĂ« skedĂ« tĂ« veçantĂ«. ĂshtĂ« e lehtĂ« tĂ« shikoni menjĂ«herĂ« nĂ« CI dhe tĂ« vlerĂ«soni gabimin nĂ«se Ă«shtĂ« triviale.
- Modet për debuggim.
Logu i plotë ruhet si një artefakt në GitLab, nëse nuk ka gabime, atëherë logu fshihet. Skripti shkruhet në bash.
Ădo propozim dhe vĂ«rejtje mbi opensource do t'ishim tĂ« lumtur t'i shqyrtonim â e mirĂ«pritur.
Si funksionon kjo
Në nodën që bëhet backup, nis një runner me ekzekutuesin bash. Në planifikues në një repo të veçantë aktivizohet job CI/CD. Runner-i nis skriptin si një mbështjellës universal për këto detyra, në të kalon verifikime të vlefshmërisë së repository-t të backupit, pika të montimit dhe gjithçka që dëshirojmë, pastaj realizohet backupimi dhe pastrimi i të vjetrit. Backup-i përfundimtar dërgohet në S3.
Ne punojmĂ« sipas kĂ«saj skeme â kjo Ă«shtĂ« njĂ« ofrues i jashtĂ«m AWS ose njĂ« analog rus (kjo Ă«shtĂ« mĂ« e shpejtĂ« dhe tĂ« dhĂ«nat nuk e braktisin RF-in). Ose i instalojmĂ« klientit njĂ« klaster tĂ« veçantĂ« minio nĂ« vendin e tij pĂ«r kĂ«to qĂ«llime. Zakonisht kĂ«shtu bĂ«jmĂ« pĂ«r arsye sigurie, kur klienti nuk dĂ«shiron qĂ« tĂ« dhĂ«nat tĂ« braktisin konturin e tij.
Nuk kemi përdorur funksionin e dërgimit të backupit përmes ssh. Kjo nuk shton siguri, dhe kapacitetet rrjetërore të ofruesit S3 janë shumë më të larta se një makinë tonë ssh.
PĂ«r tĂ« siguruar nga hakerĂ«t nĂ« makinĂ«n lokale â sepse ai mund tĂ« fshijĂ« tĂ« dhĂ«nat nĂ« S3, Ă«shtĂ« e domosdoshme tĂ« aktivizohet versionimi.
Backup-i gjithmonë e enkripton backup-in.
Borg ka një mod pa enkriptim none, por ne e rekomandojmë kategorikisht që të mos aktivizohet. Në këtë mod nuk do të ketë vetëm enkriptim, por ashtu nuk llogaritet checksum-i i asaj që shkruhet, dhe kështu integriteti mund të verifikohet vetëm në mënyrë indirekte, nëpërmjet indekseve.
Një kontroll i veçantë bëhet për integritetin e backupëve në indekse dhe përmbajtje. Kontrolli zhvillohet ngadalë dhe për një kohë të gjatë, prandaj ne e aktivizojmë atë veçmas një herë në muaj. Mund të zgjasë disa ditë.
Readme në rusisht
Funksionet kryesore
preparepërgatitjatestcheckkontrolli i gatishmërisëkomandë kryesorekomanda bazëforco postskriptnjë funksion që ekzekutohet në fund ose në rast të një gabimi. Përdoret për të çmontuar seksionin.
Funksionet e shërbimit
cleanupshkruajmë gabimet ose fshijmë skedarin e logut.kontrollo logunparsim logun për të gjetur një varg me gabim.kthehumenaxhuesi i daljes.kontrollo kohën e shkaktuarkontrolli për skadimin e kohës.
Mjedisi
VERBOSE=1shfaqim gabimet menjĂ«herĂ« nĂ« ekran (stdout).SAVELOGSONSUCCES=1ruaj logun nĂ« rast suksesi.INIT_REPO_IF_NOT_EXIST=1KrijojmĂ« depo, nĂ«se ajo nuk ekziston. NĂ« mĂ«nyrĂ« default Ă«shtĂ« e çaktivizuar.SKADIMI I KOHĂSkoha maksimale pĂ«r operacionin kryesor. Mund ta vendosni si âmâ, âhâ ose âdâ nĂ« fund.
Rekrihimi i kopjeve të vjetra. Në mënyrë default:
MBAJ DITORE=7MBAJ JAVORE=4MBAJ MUJORE=6
Variablat brenda skriptit
ERROR_STRINGâ vargu pĂ«r kontrollin nĂ« log pĂ«r gabim.EXTRACT_ERROR_STRINGâ shprehje pĂ«r shfaqjen e vargut nĂ« rast gabimi.KILL_TIMEOUT_SIGNALâ sinjali pĂ«r tĂ« vrarĂ« nĂ«se skadon koha.KURSIMâ sa shumĂ« vargje me gabime nĂ« ekran.COLORMSGâ ngjyra e mesazhit (e verdhĂ« nĂ« mĂ«nyrĂ« default).
Ky skript, i quajtur wordpress, ka një emër të caktuar, dhe karakteristika e tij është se ai gjithashtu bën backup të bazës mysql. Kështu, mund të përdoret për instalime njëniveçare të Nexcloud, ku mund të bëhet edhe backup i bazës. Lehtësia nuk është vetëm në mënyrë që gjithçka të jetë në një vend, por edhe përmbajtja e bazës është e afërt me përmbajtjen e skedave, pasi diferenca e kohës është minimale.
Restic vs Borg
Krahasimi midis Borg dhe Restic është gjithashtu , dhe s'kishim qëllim të bënim thjesht një tjetër, por tonin. Na interesonte si do të dukej ajo në të dhënat tona, me specifikat tona. Ne i paraqesim.
Kriteret tona të zgjedhjes, përveç atyre që u përmendën tashmë (deduplication, rikuperim të shpejtë etj.):
- Qëndrueshmëria ndaj punës së ndërprerë. Kontrollimi për kill -9.
- Madhësia në disk.
- Kërkesat për burime (CPU, memorie).
- Madhësia e blloqeve të ruajtura.
- Puna me S3.
- Kontrolli i integritetit.
Për testim morëm një klient me të dhëna reale dhe një madhësi totale prej 1,6Tb.
Kushtet.
Borg nuk di të punojë drejtpërdrejt me S3, prandaj e montuam si disk fuse, përmes . Restic dërgoi në S3 vetë.
Goofys punon shumë shpejt dhe mirë, dhe ka , që gjithashtu e përshpejton punën. Ai është në fazën beta, por, të pranoj, kishte rënien me humbje të të dhënave në testet (të tjera). Por lehtësia është se vetë procedura e backup-it nuk kërkon shumë lexim, përkundrazi shkrim, prandaj cache-in e përdorim vetëm gjatë kontrollit të integritetit.
PĂ«r tĂ« reduktuar ndikimin e rrjetit, pĂ«rdorĂ«m njĂ« ofrues vendor â Yandex Cloud.
Rezultatet e testimit të krahasimit.
- Kill -9 me rinisje më pas, të dy kaluan me sukses.
- Madhësia në disk. Borg di të kompresojë, prandaj rezultatet janë të pritura.
Backuper
Madhësia
Borg
562Gb
Restic
628Gb
- Për CPU
Borg vetë shpenzon pak, me kompresim të parazgjedhur, por duhet vlerësuar së bashku me procesin goofys. Në përmbledhje, ato janë të krahasueshme dhe konsumojnë rreth 1.2 bërthama në një makinë virtuale të testimit të njëjtë. - Memoria. Restic rreth 0,5Gb, Borg rreth 200Mb. Por këto janë të padukshme në krahasim me keshtjen e skedarëve të sistemit. Prandaj, është mirë të alokoni më shumë memorie.
- Dallimi në madhësinë e blobëve rezultoi të ishte madhor.
Backuper
Madhësia
Borg
rreth 500Mb
Restic
rreth 5Mb
- Puna me S3 nga Restic është e shkëlqyer. Puna e Borg me goofys nuk ka probleme, por është vënë re se është mirë të bëni umount pas përfundimit të rezervimit për të shkelur plotesisht keshtjen. Veçoria e punës S3 është se copat e papërfunduara kurrë nuk do të dërgohen në bucket, dhe kjo do të thotë se të dhënat që nuk janë plotësisht ngarkuar rezultojnë në dëmtime të mëdha.
- Kontrolli i integritetit funksionon mirë në të dy rastet, por shpejtësia ndryshon ndjeshëm.
Restic â 3.5 orĂ«.
Borg, me keshtjen e skedarĂ«ve 100Gb SSD â 5 orĂ«. Rezultati Ă«shtĂ« pĂ«rafĂ«rsisht i njĂ«jtĂ« nĂ« shpejtĂ«si nĂ«se tĂ« dhĂ«nat janĂ« nĂ« diskun lokal.
Borg lexon direkt nga S3 pa keshtë 33 orë. Më të ngadalta.
NĂ« pĂ«rfundim, Borg di tĂ« kompresojĂ« dhe ka blobĂ« mĂ« tĂ« mĂ«dhenj â çka e bĂ«n ruajtjen dhe operacionet GET/PUT nĂ« S3 mĂ« tĂ« lira. Por pĂ«r kĂ«tĂ« duhet tĂ« paguash me njĂ« verifikim mĂ« tĂ« komplikuar dhe mĂ« tĂ« ngadalshĂ«m. Sa i pĂ«rket shpejtĂ«sisĂ« sĂ« rikuperimit â nuk e vĂ«rejmĂ« ndonjĂ« diferencĂ«. Rezervimet pas sĂ« parĂ«s (pas sĂ« parĂ«s) restic i bĂ«n pak mĂ« tĂ« gjatĂ«, por jo domethĂ«nĂ«se.
Një nga arsyet kryesore për zgjedhjen ishte madhësia e komunitetit.
Dhe ne zgjodhëm borg.
Disa fjalë për kompresimin
Borg ka nĂ« arsenalin e tij njĂ« algoritĂ«m tĂ« shkĂ«lqyer tĂ« kompresimit â zstd. NĂ« cilĂ«sinĂ« e kompresimit nuk Ă«shtĂ« mĂ« keq se gzip, por Ă«shtĂ« shumĂ« mĂ« i shpejtĂ«. Dhe Ă«shtĂ« i krahasueshĂ«m nĂ« shpejtĂ«si me lz4 tĂ« parazgjedhur.
Për shembull, dump-i i bazës së të dhënave MySQL kompresohet dy herë më mirë se lz4 me të njëjtën shpejtësi. Megjithatë, përvoja me të dhëna reale tregon se ka një diferencë shumë të vogël në gradën e kompresimit të nodës Nextcloud.
NĂ« Borg ka njĂ« mod tĂ« bonusit tĂ« kompresimit â nĂ«se skedari ka entropi tĂ« madhe, atĂ«herĂ« kompresimi nuk aplikohet fare, çka rrit shpejtĂ«sinĂ« e punĂ«s. Aktivizohet me opsionin gjatĂ« krijimit
-C auto,zstd
për algoritmin zstd
Kështu me këtë opsion në krahasim me kompresimin sipas parazgjedhjes kemi arritur
560Gb dhe 562Gb përkatësisht. Të dhënat nga shembulli më sipër, le të kujtojmë, pa kompresim rezultoi 628Gb. Rezultati me 2Gb diferencë na çuditi pak, por vendosëm që ta zgjedhim gjithsesi. auto,zstd.
Metodologjia e kontrollit të backup-it
Virtualka e nisur nga planifikuesi përfundon direkt te ofruesi ose te klienti, çka ul ndjeshëm ngarkesën në rrjet. Të paktën është më lirë se sa të nisim një nga vetja dhe të dërgojmë trafik.
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 të njëjtin sistem ne kontrollojmë skedarët me antivirus (postfactum). Përdoruesit ngarkojnë të ndryshme në Nextcloud dhe jo të gjithë kanë antivirus. Të kryesh kontrollin në momentin e ngarkimit merr shumë kohë dhe pengon biznesin.
Shkallëzimi arrihet duke nxitur runner-at në node të ndryshme me etiketat përkatëse.
Në monitorimin tonë mbledhim statuset e backup-eve përmes API GitLab në një dritare, nëse është e nevojshme problemet shihen lehtësisht dhe gjithashtu lokalizohen me lehtësi.
Përfundim
Si rezultat, ne e dimë me siguri që backup-et i krijojmë, që backup-et tanë janë valide, problemet që ndodhin me to janë të shpejta për t'u zgjidhur dhe menaxhohen në nivelin e administratorit të turnit. Backup-et realisht zënë pak hapësirë krahasuar me tar.gz ose Bacula.
Burimi: habr.com
