Wéi GitLab hëlleft Iech fir grouss NextCloud Späicheren ze backen

Hey Habr!

Haut wëll ech iwwer eis Erfahrung schwätzen fir de Backup vu grousser Daten aus Nextcloud Späicheren a verschiddene Konfiguratiounen ze automatiséieren. Ech schaffen als Tankstell bei Molniya AK, wou mir Konfiguratiounsmanagement vun IT Systemer maachen; Nextcloud gëtt fir Datelagerung benotzt. Inklusiv, mat enger verdeeler Struktur, mat Redundanz.

D'Problemer, déi aus de Funktiounen vun den Installatiounen entstinn, sinn datt et vill Daten gëtt. Versioning vun Nextcloud geliwwert, Redundanz, subjektiv Grënn, a méi erstellt vill Duplikate.

Virgeschicht

Wann Dir Nextcloud administréiert, entsteet de Problem vun der Organisatioun vun engem effektive Backup, dee verschlësselte muss sinn, well d'Daten wäertvoll sinn.

Mir bidden Optiounen fir Backups op eiser Plaz oder beim Client op getrennten Maschinnen aus Nextcloud ze späicheren, wat eng flexibel automatiséiert Approche fir d'Administratioun erfuerdert.

Et gi vill Clienten, all vun hinnen mat verschiddene Konfiguratiounen, an all op hiren eegene Siten a mat hiren eegene Charakteristiken. Dëst ass eng Standardtechnik wann de ganze Site Iech gehéiert, a Backupe gi vu Krounen gemaach; et passt net gutt.

Als éischt kucke mer d'Inputdaten. Mir brauchen:

  • Skalierbarkeet a punkto engem Node oder e puer. Fir grouss Installatiounen benotze mir Minio als Lagerung.
  • Fannt eraus iwwer Probleemer mat der Ausféierung vu Backups.
  • Dir musst e Backup mat Äre Clienten an / oder mat eis halen.
  • Deal mat Probleemer séier an einfach.
  • Clienten an Installatiounen si ganz ënnerschiddlech vuneneen - Uniformitéit kann net erreecht ginn.
  • D'Erhuelungsgeschwindegkeet soll an zwee Szenarie minimal sinn: voll Erhuelung (Katastroph), een Dossier deen duerch Feeler geläscht gëtt.
  • Deduplikatiounsfunktioun ass erfuerderlech.

Wéi GitLab hëlleft Iech fir grouss NextCloud Späicheren ze backen

Fir de Problem vun der Gestioun vu Backups ze léisen, hu mir GitLab installéiert. Méi Detailer duerch Tackle.

Natierlech si mir net déi éischt fir sou e Problem ze léisen, awer et schéngt eis datt eis praktesch, schwéier verdéngt Erfahrung interessant ka sinn a mir si prett et ze deelen.

Well eis Firma eng Open Source Politik huet, ware mir no enger Open Source Léisung gesicht. Am Tour deele mir eis Entwécklungen a posten se. Zum Beispill, op GitHub gëtt et eise Plugin fir Nextcloud, déi mir de Clienten ubidden, d'Datesécherheet am Fall vun zoufälleg oder virsiichteg Läschen ze verbesseren.

Backup Tools

Mir hunn eis Sich no Léisungsmethoden ugefaang andeems mir e Backup-Creatioun-Tool auswielen.

Regelméisseg tar + gzip funktionnéiert net gutt - d'Donnéeën ginn duplizéiert. En Inkrement enthält dacks ganz wéineg aktuell Ännerungen, a vill vun den Donnéeën an enger eenzeger Datei gëtt widderholl.
Et gëtt en anere Problem - Redundanz vun verdeelt Datelagerung. Mir benotzen Minio a seng Donnéeën sinn am Fong redundant. Oder Dir musst e Backup duerch Minio selwer maachen - lued et a benotzt all Spacers tëscht dem Dateiesystem, an net manner wichteg ass et e Risiko fir e puer vun den Eemer a Meta-Informatioun ze vergiessen. Oder benotzt Deduplication.

Backup Tools mat Duplikatioun sinn an Open Source verfügbar (op Habré waren et Artikelen iwwer dëst Thema) an eis Finalisten waren Borg и Reschtlech. Eise Verglach vun den zwou Uwendungen ass hei ënnen, awer fir de Moment wäerte mir Iech soen wéi mir de ganze Schema organiséiert hunn.

Gestioun vun Backupsatellit

Borg an Restic sinn gutt, mee weder Produit huet eng zentraliséiert Kontroll Mechanismus. Fir den Zweck vun der Gestioun a Kontroll hu mir en Tool gewielt dat mir scho implementéiert hunn, ouni dat mir eis Aarbecht net kënne virstellen, inklusiv Automatioun - dat ass de bekannte CI / CD - GitLab.

D'Iddi ass wéi follegt: gitlab-runner ass op all Node installéiert deen Nextcloud Daten späichert. De Leefer leeft e Skript op engem Zäitplang deen de Backupprozess iwwerwaacht, an et lancéiert Borg oder Restic.

Wat hu mir kritt? Feedback vun der Ausféierung, praktesch Kontroll iwwer Ännerungen, Detailer am Fall vun engem Feeler.

hei hei op GitHub mir hunn Beispiller vum Skript fir verschidden Aufgaben gepost, a mir hunn et zum Backup vun net nëmmen Nextcloud befestegt, awer och vill aner Servicer. Et gëtt och e Scheduler do wann Dir et net manuell konfiguréiere wëllt (a mir wëllen net) an .gitlab-ci.yml

Et gëtt nach kee Wee fir den CI / CD Timeout an der Gitlab API z'änneren, awer et ass kleng. Et muss vergréissert ginn, sot zu 1d.

GitLab, glécklecherweis, kann net nëmmen no engem Engagement starten, awer nëmmen no engem Zäitplang, dat ass genau dat wat mir brauchen.

Elo iwwer de Wrapper Skript.

Mir setzen déi folgend Konditioune fir dëst Skript:

  • Et soll souwuel vum Leefer a vun der Hand vun der Konsole mat der selwechter Funktionalitéit gestart ginn.
  • Et muss Feeler Handler ginn:
  • zréck Code.
  • Sich no engem String am Logbuch. Zum Beispill, fir eis, kann e Feeler e Message sinn, datt de Programm net fatal betruecht.
  • Veraarbechtung Timeout. D'Leadzäit muss raisonnabel sinn.
  • Mir brauchen e ganz detailléierte Logbuch. Awer nëmmen am Fall vun engem Feeler.
  • Eng Rei Tester ginn och virum Start duerchgefouert.
  • Kleng Bonus fir Komfort, déi mir nëtzlech fonnt hunn wärend dem Supportprozess:
  • Den Ufank an Enn ginn am Syslog vun der lokaler Maschinn opgeholl. Dëst hëlleft System Feeler a Backupsatellit Operatioun ze verbannen.
  • En Deel vum Feelerprotokoll, wann iwwerhaapt, gëtt op stdout erausginn, de ganze Log gëtt op eng separat Datei geschriwwe. Et ass bequem direkt op CI ze kucken an de Feeler ze evaluéieren wann et trivial ass.
  • Debugging Modi.

De komplette Log gëtt als Artefakt am GitLab gespäichert; wann et kee Feeler ass, gëtt de Log geläscht. Mir schreiwen de Skript am Bash.

Mir wäerte frou all Suggestiounen a Kommentaren iwwer Open Source ze berücksichtegen - wëllkomm.

Wéi heescht dat Aarbecht

E Leefer mat engem Bash Exekutor gëtt um Backup Node gestart. No der Stonneplang, Aarbecht CI / CD lancéiert an engem speziellen turnip. De Leefer lancéiert en universellt Wrapper Skript fir sou Aufgaben, et iwwerpréift d'Validitéit vum Backup-Repository, Montéierungspunkten an alles wat mir wëllen, da mécht en Backup a botzt déi al. De fäerdege Backup selwer gëtt op S3 geschéckt.

Mir schaffen no dësem Schema - et ass en externen AWS Provider oder e russesche Gläichgewiicht (et ass méi séier an d'Donnéeën verloossen d'russesch Federatioun net). Oder mir installéieren en separaten Minio-Cluster fir de Client op sengem Site fir dës Zwecker. Mir maachen dat normalerweis aus Sécherheetsgrënn, wann de Client guer net wëllt datt d'Donnéeën hire Circuit verloossen.

Mir hunn d'Feature net benotzt fir de Backup iwwer ssh ze schécken. Dëst addéiert keng Sécherheet, an d'Netzfäegkeeten vum S3 Provider si vill méi héich wéi eis eng ssh Maschinn.

Fir Är lokal Maschinn vun engem Hacker ze schützen, well hien Daten op S3 leschen kann, musst Dir d'Versionéierung aktivéieren.
De Backup verschlësselt ëmmer de Backup.

Borg huet en onverschlësselte Modus none, awer mir recommandéieren et net opzemaachen. An dësem Modus gëtt et net nëmme keng Verschlësselung, mee d'Kontrollsum vun deem wat geschriwwe gëtt gëtt net berechent, wat heescht datt d'Integritéit nëmmen indirekt iwwerpréift ka ginn, mat Indexen.

En getrennten Scheduler kontrolléiert d'Backups fir d'Integritéit vun den Indexen an den Inhalt. De Scheck ass lues a laang, also lafe mir et separat eemol de Mount. Et kann e puer Deeg daueren.

Readme op Russesch

Haaptfunktiounen

  • prepare Virbereedung
  • testcheck Bereetschaft kontrolléieren
  • maincommand Kär Equipe
  • forcepostscript eng Funktioun déi um Enn oder duerch Feeler ausgefouert gëtt. Mir benotzen et fir d'Partition ze demontéieren.

Service Funktiounen

  • cleanup Mir notéieren Feeler oder läschen d'Logbuchdatei.
  • checklog parse de Logbuch fir d'Optriede vun enger Zeil mat engem Feeler.
  • ret Sortie Handler.
  • checktimeout kontrolléieren fir Timeout.

Emwelt

  • VERBOSE=1 Mir weisen Feeler um Écran direkt (stdout).
  • SAVELOGSONSUCCES=1 späichert de Log op Erfolleg.
  • INIT_REPO_IF_NOT_EXIST=1 Erstellt e Repository wann et net existéiert. Standard behënnert.
  • TIMEOUT maximal Zäit fir d'Haaptrei Operatioun. Dir kënnt et um Enn als 'm', 'h' oder 'd' setzen.

Späichermodus fir al Kopien. Standard:

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

Variablen am Skript

  • ERROR_STRING - String fir de Check-in Log fir Feeler.
  • EXTRACT_ERROR_STRING - Ausdrock fir Show String wann Feeler.
  • KILL_TIMEOUT_SIGNAL - Signal fir ëmbréngen wann Timeout.
  • TAIL - wéivill Saiten mat Feeler um Écran.
  • COLORMSG - Faarf vum Message (Standard giel).

Dat Skript, dat Wordpress genannt gëtt, huet e bedingten Numm, säin Trick ass datt et och d'mysql Datebank mécht. Dëst bedeit datt et fir Single-Node Nexcloud Installatiounen benotzt ka ginn, wou Dir och d'Datebank kann backen. D'Bequemlechkeet ass net nëmmen datt alles op enger Plaz ass, awer och d'Inhalter vun der Datebank sinn no beim Inhalt vun de Dateien, well den Zäitdifferenz minimal ass.

Restic vs Borg

Et ginn och Vergläicher tëscht Borg a Restic hei op Habré, a mir haten net d'Aufgab just nach eng ze maachen, mä eis eegen. Et war eis wichteg wéi et op eis Donnéeën ausgesäit, mat eise Spezifizitéiten. Mir bréngen se.

Eis Selektiounscritèren, zousätzlech zu deenen scho genannten (Deduplication, séier Erhuelung, etc.):

  • Resistenz géint ongeschloss Aarbecht. Check fir Kill -9.
  • Gréisst op Disk.
  • Noutwendegkeete fir Ressourcen (CPU, Erënnerung).
  • Gréisst vun gespäichert Blobs.
  • Schafft mat S3.
  • Integritéit kontrolléieren.

Fir Testen hu mir ee Client mat realen Daten an enger Gesamtgréisst vun 1,6 TB geholl.
Conditiounen.

Borg weess net wéi direkt mat S3 ze schaffen, a mir montéiert der Scheif als Sicherung, via guff. Restic geschéckt et zu S3 selwer.

Goofys Wierker ganz séier a gutt, an et sinn Disk Cache Modul, wat d'Aarbecht nach méi beschleunegt. Et ass an der Beta-Bühn, an, éierlech gesot, mir sinn mat Datenverloscht wärend Tester (anerer) erofgefall. Awer d'Kamoudheet ass datt d'Backup-Prozedur selwer net vill Liesen erfuerdert, awer meeschtens Schreiwen, also benotze mir de Cache nëmme während Integritéitskontrollen.

Fir den Afloss vum Netz ze reduzéieren, hu mir e lokale Provider benotzt - Yandex Cloud.

Verglach Test Resultater.

  • Kill -9 mat engem weidere Restart ware béid erfollegräich.
  • Gréisst op Disk. Borg kann kompriméieren, sou datt d'Resultater sinn wéi erwaart.

Backuper
Gréisst

Borg
562Gb

Reschtlech
628Gb

  • Duerch CPU
    Borg selwer verbraucht wéineg, mat Standardkompressioun, awer et muss zesumme mam Goofysprozess bewäert ginn. Am Ganzen si se vergläichbar a benotzen ongeféier 1,2 Cores op der selwechter virtueller Testmaschinn.
  • Erënnerung. Restic ass ongeféier 0,5GB, Borg ass ongeféier 200MB. Awer dëst ass alles onbedeitend am Verglach zum Systemdatei Cache. Also ass et unzeroden méi Erënnerung ze verdeelen.
  • Den Ënnerscheed an der Blobgréisst war opfälleg.

Backuper
Gréisst

Borg
ongeféier 500 MB

Reschtlech
ongeféier 5 MB

  • Dem Restic seng S3 Erfahrung ass exzellent. Schafft mat Borg duerch Goofys stellt keng Froen op, awer et gouf bemierkt datt et umount ass ze maachen nodeems de Backup fäerdeg ass fir de Cache komplett zréckzesetzen. D'Besonderheet vu S3 ass datt ënnergepompelte Stécker ni an den Eemer geschéckt ginn, dat heescht datt onkomplett gefëllten Donnéeën zu grousse Schued féieren.
  • Den Integritéitscheck funktionnéiert a béide Fäll gutt, awer d'Geschwindegkeet ënnerscheet sech wesentlech.
    Restesch 3,5 Stonnen.
    Borg, mat engem 100GB SSD Datei Cache - 5 Stonnen.Ongeféier déi selwecht Geschwindegkeet Resultat wann d'Donnéeën op enger lokaler Scheif sinn.
    Borg liest direkt aus S3 ouni Cache 33 Stonnen. Eng monstréis laang Zäit.

Déi ënnescht Linn ass datt Borg kompriméiere kann a méi grouss Blobs huet - wat d'Späicheren a GET / PUT Operatiounen am S3 méi bëlleg mécht. Awer dëst kënnt op d'Käschte vu méi komplexer a méi lues Verifizéierung. Wat d'Erhuelungsgeschwindegkeet ugeet, hu mir keen Ënnerscheed gemierkt. Restic hëlt spéider Backups (no der éischter) e bësse méi laang, awer net wesentlech.

Last but not least am Choix war d'Gréisst vun der Gemeinschaft.

A mir hu Borg gewielt.

E puer Wierder iwwer Kompressioun

Borg huet en exzellenten neie Kompressiounsalgorithmus a sengem Arsenal - zstd. D'Kompressiounsqualitéit ass net méi schlëmm wéi gzip, awer vill méi séier. A vergläichbar a Geschwindegkeet mam Standard lz4.

Zum Beispill gëtt e MySQL Datebank Dump zweemol besser kompriméiert wéi lz4 mat der selwechter Geschwindegkeet. Wéi och ëmmer, d'Erfahrung mat echte Daten weist datt et ganz wéineg Ënnerscheed am Kompressiounsverhältnis vum Nextcloud Node ass.

Borg huet e zimlech Bonus Kompressiounsmodus - wann d'Datei héich Entropie huet, da gëtt d'Kompressioun guer net applizéiert, wat d'Geschwindegkeet erhéicht. Aktivéiert vun Optioun beim Schafen
-C auto,zstd
fir den zstd Algorithmus
Also mat dëser Optioun, am Verglach mat der Standardkompressioun, hu mir
560Gb respektiv 562Gb. D'Donnéeën aus dem Beispill hei uewen, loosst mech Iech drun erënneren, ouni Kompressioun ass d'Resultat 628Gb. D'Resultat vun engem 2GB Ënnerscheed huet eis e bëssen iwwerrascht, awer mir hu geduecht datt mir et schliisslech géife wielen. auto,zstd.

Backup Verifizéierungsmethod

Laut dem Scheduler gëtt déi virtuell Maschinn direkt vum Provider oder vum Client lancéiert, wat d'Netzbelaascht staark reduzéiert. Op d'mannst ass et méi bëlleg wéi et selwer ze erhéijen an de Verkéier ze féieren.

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/

Mat dem selwechte Schema iwwerpréift mir Dateien mat engem Antivirus (no der Tatsaach). Nodeems d'Benotzer verschidde Saachen op Nextcloud eropluede an net jiddereen huet en Antivirus. Inspektiounen duerchzeféieren an der Zäit vum Gießen hëlt ze vill Zäit a stéiert d'Geschäft.

Skalierbarkeet gëtt erreecht andeems Leefer op verschiddene Wirbelen mat verschiddenen Tags lafen.
Eis Iwwerwachung sammelt Backupstatussen iwwer d'GitLab API an enger Fënster; wann néideg, Problemer ginn einfach bemierkt a grad sou einfach lokaliséiert.

Konklusioun

Als Resultat wësse mir sécher datt mir Backups maachen, datt eis Backupe gëlteg sinn, Problemer déi mat hinnen entstinn daueren wéineg Zäit a ginn um Niveau vum Pflicht Administrateur geléist. Backups huelen wierklech wéineg Plaz am Verglach zu tar.gz oder Bacula.

Source: will.com

Setzt e Commentaire