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.
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
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
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
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
Virbereedungtestcheck
Bereetschaft kontrolléierenmaincommand
Kär Equipeforcepostscript
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
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
Goofys Wierker ganz séier a gutt, an et sinn
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