{"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\/de\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud","title":{"rendered":"Wie GitLab dabei hilft, gro\u00dfe Backups von NextCloud-Speichern zu erstellen","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hallo, Habra!<\/p>\n<p><\/p>\n<p>Heute m\u00f6chte ich \u00fcber unsere Erfahrungen mit der Automatisierung der Datensicherung gro\u00dfer Nextcloud-Speicher in verschiedenen Konfigurationen berichten. Ich bin CTO bei \u201eMolniya AK\u201c, wo wir uns mit dem Konfigurationsmanagement von IT-Systemen befassen, und f\u00fcr die Datenspeicherung verwenden wir Nextcloud. Dazu geh\u00f6rt auch die verteilte Struktur mit einer Sicherung.<\/p>\n<p><\/p>\n<p>Die Probleme, die aus den Besonderheiten der Installationen resultieren, liegen darin, dass es viele Daten gibt. Die Versionierung, die Nextcloud bietet, die Sicherung, subjektive Gr\u00fcnde und anderes f\u00fchren zu vielen Duplikaten.<\/p>\n<p><\/p>\n<h2 id=\"predystoriya\">Vorgeschichte<\/h2>\n<p><\/p>\n<p>Beim Administrieren von Nextcloud tritt das Problem auf, eine effektive Sicherung zu organisieren, die unbedingt verschl\u00fcsselt werden muss, da die Daten wertvoll sind.<\/p>\n<p><\/p>\n<p>Wir bieten Optionen zur Speicherung der Sicherung bei uns oder beim Kunden auf dessen separaten Maschinen von Nextcloud an, was einen flexiblen automatisierten Ansatz zur Verwaltung erfordert.<\/p>\n<p><\/p>\n<p>Es gibt viele Kunden, alle mit unterschiedlichen Konfigurationen, und alle an ihren eigenen Standorten mit ihren eigenen Besonderheiten. Die Standardmethode, wenn die gesamte Anlage einem geh\u00f6rt und die Sicherungen \u00fcber Cronjobs erstellt werden, passt hier schlecht.<\/p>\n<p><\/p>\n<p>Lassen Sie uns zun\u00e4chst die Eingabedaten betrachten. Wir ben\u00f6tigen:<\/p>\n<p><\/p>\n<ul>\n<li>Skalierbarkeit in Bezug auf eine Node oder mehrere. F\u00fcr gro\u00dfe Installationen verwenden wir MinIO als Speicher.<\/li>\n<li>Probleme beim Backup ausfindig machen.<\/li>\n<li>Die Sicherung muss bei den Kunden und\/oder bei uns gespeichert werden.<\/li>\n<li>Probleme schnell und einfach l\u00f6sen.<\/li>\n<li>Die Kunden und Installationen unterscheiden sich stark voneinander \u2014 es ist nicht m\u00f6glich, Einheitlichkeit zu erreichen.<\/li>\n<li>Die Wiederherstellungsgeschwindigkeit muss in zwei Szenarien minimal sein: vollst\u00e4ndige Wiederherstellung (Desaster), ein Ordner \u2014 versehentlich gel\u00f6scht.<\/li>\n<li>Eine Funktion zur Deduplizierung ist zwingend erforderlich.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Wie GitLab dabei hilft, gro\u00dfe Backups von NextCloud-Speichern zu erstellen\" src=\"\/wp-content\/uploads\/2020\/07\/1a0048e3295fef94ddca28e50612e3cb.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>F\u00fcr die Verwaltung der Backups haben wir GitLab integriert. Mehr dazu im Blog. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Nat\u00fcrlich sind wir nicht die Ersten, die eine solche Aufgabe l\u00f6sen, aber wir glauben, dass unsere praktischen Erfahrungen von Interesse sein k\u00f6nnten, und wir sind bereit, sie zu teilen.<\/p>\n<p><\/p>\n<p>Da in unserem Unternehmen eine Open-Source-Politik verfolgt wird, haben wir nach einer L\u00f6sung mit offenem Quellcode gesucht. Im Gegenzug teilen wir unsere Entwicklungen und stellen sie bereit. Zum Beispiel gibt es auf GitHub <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/molnia-com\/nextcloud-safe-trash\">unser Plugin f\u00fcr Nextcloud<\/a><\/noindex>, das wir unseren Kunden bereitstellen und das die Datensicherheit im Falle einer versehentlichen oder vors\u00e4tzlichen L\u00f6schung erh\u00f6ht.<\/p>\n<p><\/p>\n<h2 id=\"sredstva-bekapirovaniya\">Backup-Tools<\/h2>\n<p><\/p>\n<p>Wir begannen die Suche nach L\u00f6sungsmethoden mit der Auswahl eines Tools zur Erstellung von Backups.<\/p>\n<p><\/p>\n<p>Das normale tar + gzip funktioniert schlecht \u2013 die Daten werden dupliziert. In der Tat enth\u00e4lt das Inkrement oft sehr wenig \u00c4nderungen, und der gr\u00f6\u00dfte Teil der Daten innerhalb einer Datei wiederholt sich.<br \/>\nEs gibt noch ein weiteres Problem \u2013 die Redundanz des verteilten Datenspeichers. Wir verwenden minio, und seine Daten sind grunds\u00e4tzlich redundant. Entweder h\u00e4tte das Backup \u00fcber minio selbst gemacht werden m\u00fcssen \u2013 es zu belasten und alle Schichten zwischen dem Dateisystem zu nutzen, und was nicht weniger wichtig ist, es besteht das Risiko, Teile der Buckets und Metainformationen zu vergessen. Oder man m\u00fcsste Deduplication verwenden.<\/p>\n<p><\/p>\n<p>Backup-L\u00f6sungen mit Deduplication gibt es im Open Source (auf Habr\u00e9 gab es <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/449282\/\">des Artikels<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/420055\/\">zu diesem Thema<\/a><\/noindex>) und unsere Finalisten wurden <noindex><a rel=\"nofollow\" href=\"https:\/\/borgbackup.readthedocs.io\/en\/stable\/\">Borg<\/a><\/noindex> und <noindex><a rel=\"nofollow\" href=\"https:\/\/restic.net\/\">Restic<\/a><\/noindex>. \u00dcber unseren Vergleich der beiden Anwendungen unten, und vorher erz\u00e4hlen wir, wie wir das gesamte System organisiert haben.<\/p>\n<p><\/p>\n<h2 id=\"upravlenie-sozdaniem-rezervnyh-kopiy\">Management der Backup-Erstellung<\/h2>\n<p><\/p>\n<p>Borg und Restic sind gut, aber kein Produkt hat einen zentralisierten Management-Mechanismus. F\u00fcr das Management und die Kontrolle haben wir ein Tool gew\u00e4hlt, das bereits eingef\u00fchrt ist, ohne das wir unsere Arbeit, einschlie\u00dflich Automatisierung, nicht denken k\u00f6nnen \u2013 das bekannte CI\/CD \u2013 GitLab.<\/p>\n<p><\/p>\n<p>Die Idee ist die folgende: Auf jeder Node, die Daten von Nextcloud speichert, wird ein gitlab-runner installiert. Der Runner startet gem\u00e4\u00df dem Zeitplan ein Skript, das den Backup-Prozess \u00fcberwacht und Borg oder Restic ausf\u00fchrt.<\/p>\n<p><\/p>\n<p>Was haben wir erreicht? Feedback von der Ausf\u00fchrung, bequeme Kontrolle \u00fcber die \u00c4nderungen, Details im Fehlerfall.<\/p>\n<p><\/p>\n<p>Hier <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/molnia-com\/backup-by-runner\">hier auf GitHub<\/a><\/noindex> haben wir Skriptbeispiele f\u00fcr verschiedene Aufgaben ver\u00f6ffentlicht, und wir haben es letztendlich nicht nur f\u00fcr das Nextcloud-Backup, sondern auch f\u00fcr viele andere Dienste integriert. Dort gibt es auch einen Scheduler, falls man ihn nicht manuell konfigurieren m\u00f6chte (was wir nicht wollen) und die .gitlab-ci.yml<\/p>\n<p><\/p>\n<p>Im GitLab-API gibt es bisher keine M\u00f6glichkeit, das CI\/CD-Timeout zu \u00e4ndern, und es ist sehr kurz. Es muss erh\u00f6ht werden, sagen wir auf <code>1d<\/code>.<\/p>\n<p><\/p>\n<p>Gl\u00fccklicherweise kann GitLab nicht nur nach dem Commit, sondern auch nach Zeitplan starten, das ist genau, was wir brauchen.<\/p>\n<p><\/p>\n<p>Jetzt zum Wrapper-Skript.<\/p>\n<p><\/p>\n<p>Wir haben solche Bedingungen f\u00fcr dieses Skript festgelegt:<\/p>\n<p><\/p>\n<ul>\n<li>Es muss sowohl von einem Runner als auch manuell \u00fcber die Konsole mit denselben Funktionen ausgef\u00fchrt werden.<\/li>\n<li>Es m\u00fcssen unbedingt Fehlerbehandler vorhanden sein:<\/li>\n<li>Return-Code.<\/li>\n<li>Suche nach einer Zeile im Protokoll. Zum Beispiel kann f\u00fcr uns eine Fehlermeldung eine Meldung sein, die das Programm nicht als fatal ansieht.<\/li>\n<li>Timeout-Verarbeitung. Die Ausf\u00fchrungszeit muss angemessen sein.<\/li>\n<li>Wir ben\u00f6tigen ein detailliertes Protokoll. Aber nur im Fehlerfall.<\/li>\n<li>Au\u00dferdem werden eine Reihe von Tests vor Beginn durchgef\u00fchrt.<\/li>\n<li>Einige n\u00fctzliche Extras, die wir w\u00e4hrend des Supports als hilfreich erachtet haben:<\/li>\n<li>Der Start und das Ende werden im Syslog des lokalen Rechners festgehalten. Das hilft, systembedingte Fehler mit der Backup-Arbeit zu verkn\u00fcpfen.<\/li>\n<li>Ein Teil des Fehlerprotokolls, wenn vorhanden, wird in stdout ausgegeben, das gesamte Protokoll wird in eine separate Datei geschrieben. Es ist praktisch, sofort im CI einen Blick darauf zu werfen und einen trivialen Fehler zu erkennen, falls vorhanden.<\/li>\n<li>Debugging-Modi.<\/li>\n<\/ul>\n<p><\/p>\n<p>Das vollst\u00e4ndige Protokoll wird als Artefakt in GitLab gespeichert; wenn kein Fehler aufgetreten ist, wird das Protokoll gel\u00f6scht. Das Skript wird in Bash geschrieben.<\/p>\n<p><\/p>\n<p>Wir freuen uns \u00fcber Vorschl\u00e4ge und Anmerkungen zum Open Source \u2014 willkommen.<\/p>\n<p><\/p>\n<h2 id=\"kak-eto-rabotaet\">Die DANE-Spezifikation ist in<\/h2>\n<p><\/p>\n<p>Auf dem zu sichernden Knoten wird ein Runner mit einem Bash-Executor gestartet. Gem\u00e4\u00df dem Scheduler wird in einem speziellen Repository ein CI\/CD-Job gestartet. Der Runner f\u00fchrt ein universelles Wrapper-Skript f\u00fcr solche Aufgaben aus, in dem Validit\u00e4tspr\u00fcfungen des Backup-Repositories, der Mount-Punkte und alles, was wir wollen, durchgef\u00fchrt werden, danach erfolgt das Backup und die Bereinigung der alten Daten. Das fertige Backup wird an S3 gesendet.<\/p>\n<p><\/p>\n<p>Wir arbeiten nach diesem Schema \u2014 es ist ein externer Anbieter wie AWS oder ein russisches Pendant (das ist schneller und die Daten verlassen nicht die RF). Alternativ installieren wir dem Kunden einen separaten Minio-Cluster auf seinem Gel\u00e4nde f\u00fcr diese Zwecke. Normalerweise geschieht dies aus Sicherheitsgr\u00fcnden, wenn der Kunde absolut nicht m\u00f6chte, dass die Daten ihren Bereich verlassen.<\/p>\n<p><\/p>\n<p>Wir haben die Funktion zum Senden von Backups per SSH nicht genutzt. Das tr\u00e4gt nicht zur Sicherheit bei, und die Netzwerkbandbreite des S3-Anbieters ist erheblich h\u00f6her als die einer unserer SSH-Maschinen.<\/p>\n<p><\/p>\n<p>Um sich vor Hackern auf dem lokalen Rechner zu sch\u00fctzen \u2014 denn sie k\u00f6nnten Daten auf S3 l\u00f6schen \u2014 ist es unbedingt notwendig, die Versionierung zu aktivieren.<br \/>\nDer Backuper verschl\u00fcsselt immer das Backup.<\/p>\n<p><\/p>\n<p>Borg hat einen Modus ohne Verschl\u00fcsselung <code>none<\/code>, aber wir empfehlen dringend, ihn nicht zu aktivieren. In diesem Modus gibt es nicht nur keine Verschl\u00fcsselung, sondern es wird auch keine Pr\u00fcfziffer f\u00fcr die geschriebenen Daten berechnet, was bedeutet, dass die Integrit\u00e4t nur indirekt, \u00fcber die Indizes, \u00fcberpr\u00fcft werden kann.<\/p>\n<p><\/p>\n<p>Mit einem separaten Scheduler wird die Integrit\u00e4t der Backups anhand der Indizes und Inhalte gepr\u00fcft. Die \u00dcberpr\u00fcfung erfolgt langsam und lange, daher starten wir sie einmal im Monat separat. Sie kann mehrere Tage dauern.<\/p>\n<p><\/p>\n<h2 id=\"ridmi-na-russkom\">Lesen Sie auf Russisch<\/h2>\n<p><\/p>\n<h3 id=\"osnovnye-funkcii\">Hauptfunktionen<\/h3>\n<p><\/p>\n<ul>\n<li><code>vorbereiten<\/code> Vorbereitung<\/li>\n<li><code>testcheck<\/code> Bereitschaftspr\u00fcfung<\/li>\n<li><code>Hauptbefehl<\/code> Basisbefehl<\/li>\n<li><code>Zwangs-Postscriptum<\/code> Die Funktion, die am Ende oder bei einem Fehler ausgef\u00fchrt wird. Wird verwendet, um die Partition zu demontieren.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"service-functions\">Dienstfunktionen<\/h3>\n<p><\/p>\n<ul>\n<li><code>Bereinigung<\/code> Wir protokollieren Fehler oder l\u00f6schen die Protokolldatei.<\/li>\n<li><code>Protokollpr\u00fcfung<\/code> Wir analysieren das Protokoll auf das Vorkommen einer Fehlerzeile.<\/li>\n<li><code>ret<\/code> Exit-Handler.<\/li>\n<li><code>Timeout \u00fcberpr\u00fcfen<\/code> \u00dcberpr\u00fcfung auf Zeit\u00fcberschreitungen.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"environment\">Umgebung<\/h3>\n<p><\/p>\n<ul>\n<li><code>VERBOSE=1<\/code> Fehler werden sofort auf dem Bildschirm (stdout) ausgegeben.<\/li>\n<li><code>SAVELOGSONSUCCESS=1<\/code> Protokoll wird im Erfolgsfall gespeichert.<\/li>\n<li><code>INIT_REPO_IF_NOT_EXIST=1<\/code> Wir erstellen ein Repository, falls es nicht vorhanden ist. Standardm\u00e4\u00dfig deaktiviert.<\/li>\n<li><code>ZEIT\u00dcBERSCHREITUNG<\/code> maximale Zeit f\u00fcr die Hauptoperation. Sie k\u00f6nnen es am Ende als &#8216;m&#8217;, &#8216;h&#8217; oder &#8216;d&#8217; festlegen.<\/li>\n<\/ul>\n<p><\/p>\n<p>Modus zur Aufbewahrung alter Kopien. Standardm\u00e4\u00dfig:<\/p>\n<p><\/p>\n<ul>\n<li><code>HALTE_T\u00c4GLICH=7<\/code><\/li>\n<li><code>HALTE_W\u00d6CHENTLICH=4<\/code><\/li>\n<li><code>HALTE_MONATLICH=6<\/code><\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"peremennye-vnutri-skripta\">Variablen innerhalb des Skripts<\/h2>\n<p><\/p>\n<ul>\n<li><code>FEHLERSTRING<\/code> \u2014 Zeichenfolge zur \u00dcberpr\u00fcfung im Protokoll auf Fehler.<\/li>\n<li><code>EXTRAHIEREN_FEHLERSTRING<\/code> \u2014 Ausdruck zur Anzeige der Zeichenfolge im Fehlerfall.<\/li>\n<li><code>KILL_TIMEOUT_SIGNAL<\/code> \u2014 Signal zum Abbrechen im Falle einer Zeit\u00fcberschreitung.<\/li>\n<li><code>TAIL<\/code> \u2014 wie viele Fehlerzeilen auf dem Bildschirm angezeigt werden.<\/li>\n<li><code>FARBMELDUNG<\/code> \u2014 Farbe der Meldung (standardm\u00e4\u00dfig gelb).<\/li>\n<\/ul>\n<p><\/p>\n<p>Das Skript, das \"wordpress\" genannt wird, hat den Vorteil, dass es auch die MySQL-Datenbank sichert. Das bedeutet, es kann f\u00fcr einmalige Installationen von Nextcloud verwendet werden, bei denen auch die Datenbank gesichert wird. Der Vorteil liegt nicht nur darin, dass alles an einem Ort ist, sondern dass der Inhalt der Datenbank dem Inhalt der Dateien sehr \u00e4hnlich ist, da die Zeitdifferenz minimal ist.<\/p>\n<p><\/p>\n<h2 id=\"restic-vs-borg\">Restic vs Borg<\/h2>\n<p><\/p>\n<p>Vergleiche zwischen Borg und Restic sind unter anderem <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/454734\/\">hier auf Habr\u00e9<\/a><\/noindex>, und wir hatten nicht die Aufgabe, einfach nur einen weiteren Vergleich zu machen, sondern unseren eigenen. Es war uns wichtig, wie es mit unseren Daten und unserer Spezifikationen aussehen w\u00fcrde. Wir stellen sie dar.<\/p>\n<p><\/p>\n<p>Unsere Auswahlkriterien, neben den bereits erw\u00e4hnten (Deduplizierung, schnelle Wiederherstellung usw.):<\/p>\n<p><\/p>\n<ul>\n<li>Widerstandsf\u00e4higkeit gegen unvollst\u00e4ndige Arbeiten. \u00dcberpr\u00fcfung auf kill -9.<\/li>\n<li>Speicherplatz auf der Festplatte.<\/li>\n<li>Ressourcenerfordernisse (CPU, Arbeitsspeicher).<\/li>\n<li>Gr\u00f6\u00dfe der gespeicherten Blobs.<\/li>\n<li>Arbeiten mit S3.<\/li>\n<li>Integrit\u00e4tspr\u00fcfung.<\/li>\n<\/ul>\n<p><\/p>\n<p>F\u00fcr die Tests haben wir einen Kunden mit realen Daten und einer Gesamtspeichergr\u00f6\u00dfe von 1,6 TB genommen.<br \/>\nBedingungen.<\/p>\n<p><\/p>\n<p>Borg kann nicht direkt mit S3 arbeiten, und wir haben es als FUSE-Laufwerk \u00fcber <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kahing\/goofys\">goofys<\/a><\/noindex>. Restic hat direkt an S3 gesendet.<\/p>\n<p><\/p>\n<p>Goofys arbeitet sehr schnell und gut, und es gibt einen <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kahing\/catfs\">Festplattencache-Modul<\/a><\/noindex>, das die Arbeit weiter beschleunigt. Es befindet sich im Beta-Stadium, und um ehrlich zu sein, ist es uns bei Tests (anderen) mit Datenverlust abgest\u00fcrzt. Der Vorteil besteht jedoch darin, dass der Sicherungsprozess nicht viel Lesevorgang erfordert, haupts\u00e4chlich wird geschrieben, deshalb nutzen wir den Cache nur w\u00e4hrend der Integrit\u00e4tspr\u00fcfung.<\/p>\n<p><\/p>\n<p>Um den Einfluss des Netzwerks zu reduzieren, haben wir einen lokalen Anbieter - Yandex Cloud - verwendet.<\/p>\n<p><\/p>\n<p>Ergebnisse der Testvergleiche.<\/p>\n<p><\/p>\n<ul>\n<li>Kill -9 mit anschlie\u00dfendem Neustart, beide sind erfolgreich durchgelaufen.<\/li>\n<li>Gr\u00f6\u00dfe auf der Disk. Borg kann komprimieren, daher sind die Ergebnisse zu erwarten.<\/li>\n<\/ul>\n<p><\/p>\n<p>Backuper<br \/>\nGr\u00f6\u00dfe<\/p>\n<p>Borg<br \/>\n562Gb<\/p>\n<p>Restic<br \/>\n628Gb<\/p>\n<p><\/p>\n<ul>\n<li>Zu CPU<br \/>\nBorg selbst verbraucht wenig, mit der Standardkompression, aber man sollte das zusammen mit dem Prozess von goofys bewerten. Zusammen vergleichen sie sich und ben\u00f6tigen etwa 1,2 Kerne auf der gleichen Test-VM.<\/li>\n<li>Speicher. Restic ben\u00f6tigt ungef\u00e4hr 0,5Gb, Borg etwa 200Mb. Aber das ist alles unbedeutend im Vergleich zum Dateispeicher-Cache des Systems. Daher sollte man mehr Speicher zuweisen.<\/li>\n<li>Der Unterschied in der Gr\u00f6\u00dfe der Blobs war erstaunlich.<\/li>\n<\/ul>\n<p><\/p>\n<p>Backuper<br \/>\nGr\u00f6\u00dfe<\/p>\n<p>Borg<br \/>\nungef\u00e4hr 500Mb<\/p>\n<p>Restic<br \/>\nungef\u00e4hr 5Mb<\/p>\n<p><\/p>\n<ul>\n<li>Die Arbeit mit S3 von Restic ist ausgezeichnet. Die Arbeit von Borg \u00fcber goofys wirft keine Fragen auf, es wurde jedoch festgestellt, dass es ratsam ist, nach Abschluss des Backups ein umount durchzuf\u00fchren, um den Cache vollst\u00e4ndig zur\u00fcckzusetzen. Eine Besonderheit der Arbeit mit S3 ist, dass unvollst\u00e4ndig heruntergeladene Chunks niemals in den Bucket gesendet werden, was bedeutet, dass nicht vollst\u00e4ndig hochgeladene Daten zu gro\u00dfen Sch\u00e4den f\u00fchren.<\/li>\n<li>Die Integrit\u00e4tspr\u00fcfung funktioniert in beiden F\u00e4llen gut, aber die Geschwindigkeit unterscheidet sich erheblich.<br \/>\nRestic \u2013 <strong>3,5 Stunden<\/strong>.<br \/>\nBorg, mit einem Dateispeicher-Cache von 100Gb SSD \u2013 <strong>5 Stunden<\/strong>. Ungef\u00e4hr gleiches Ergebnis hinsichtlich der Geschwindigkeit, wenn die Daten auf der lokalen Festplatte liegen.<br \/>\nBorg liest direkt von S3 ohne Cache <strong>33 Stunden<\/strong>. Furchtbar lange.<\/li>\n<\/ul>\n<p><\/p>\n<p>Im Endeffekt kann Borg komprimieren und hat gr\u00f6\u00dfere Blobs - das macht die Speicherung und GET\/PUT-Operationen in S3 g\u00fcnstiger. Daf\u00fcr muss man jedoch f\u00fcr eine kompliziertere und langsamere \u00dcberpr\u00fcfung zahlen. Was die Wiederherstellungsgeschwindigkeit betrifft - da haben wir keinen Unterschied bemerkt. Die nachfolgenden Backups (nach dem ersten) macht Restic etwas l\u00e4nger, aber nicht signifikant.<\/p>\n<p><\/p>\n<p>Nicht zuletzt war die Gr\u00f6\u00dfe der Community bei der Auswahl wichtig.<\/p>\n<p><\/p>\n<p>Und wir haben Borg gew\u00e4hlt.<\/p>\n<p><\/p>\n<h2 id=\"paru-slov-o-szhatii\">Ein paar Worte zur Kompression<\/h2>\n<p><\/p>\n<p>Borg hat einen gro\u00dfartigen neuen Kompressionsalgorithmus in seinem Arsenal \u2013 zstd. In Bezug auf die Kompressionsqualit\u00e4t nicht schlechter als gzip, aber deutlich schneller. Und in Bezug auf die Geschwindigkeit mit der Standardversion lz4 vergleichbar.<\/p>\n<p><\/p>\n<p>Zum Beispiel komprimiert ein MySQL-Dump ungef\u00e4hr doppelt so gut wie lz4 bei gleicher Geschwindigkeit. Allerdings zeigt die Erfahrung mit echten Daten, dass der Grad der Kompression bei Nextcloud-Knoten sehr gering ist.<\/p>\n<p><\/p>\n<p>In Borg gibt es einen ziemlich bonufartigen Kompressionsmodus \u2013 wenn die Datei eine hohe Entropie hat, dann wird die Kompression \u00fcberhaupt nicht angewendet, was die Geschwindigkeit erh\u00f6ht. Aktiviert wird das mit einer Option bei der Erstellung<br \/>\n<code>-C auto,zstd<\/code><br \/>\nf\u00fcr den zstd-Algorithmus<br \/>\nMit dieser Option haben wir im Vergleich zur Standardkompression Folgendes erhalten<br \/>\n560Gb und 562Gb entsprechend. Die Daten aus dem obigen Beispiel, erinnere ich daran, ohne Komprimierung sind das 628Gb. Das Ergebnis mit 2Gb Unterschied war etwas \u00fcberraschend f\u00fcr uns, aber wir entschieden uns dennoch daf\u00fcr. <code>auto,zstd<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"metodika-proverki-bekapa\">Methode zur \u00dcberpr\u00fcfung des Backups<\/h2>\n<p><\/p>\n<p>Die virtuelle Maschine wird laut Zeitplan direkt beim Anbieter oder beim Kunden gestartet, was die Netzwerkbelastung erheblich reduziert. Mindestens ist es g\u00fcnstiger, als es selbst hochzufahren und den Traffic zu steuern.<\/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>Nach demselben Schema pr\u00fcfen wir die Dateien mit Antivirus (nachtr\u00e4glich). Denn die Nutzer laden unterschiedliche Inhalte in Nextcloud hoch und nicht alle haben einen Antivirus. Eine Pr\u00fcfung zum Zeitpunkt des Uploads dauert zu lange und beeintr\u00e4chtigt das Gesch\u00e4ft.<\/p>\n<p><\/p>\n<p>Die Skalierbarkeit wird durch das Starten von Runnern auf verschiedenen Knoten mit unterschiedlichen Tags erreicht.<br \/>\nIn unserem Monitoring werden die Status von Backups \u00fcber die GitLab API in einem Fenster gesammelt, bei Bedarf werden Probleme leicht erkannt und ebenso leicht lokalisiert.<\/p>\n<p><\/p>\n<h2 id=\"zaklyuchenie\">Fazit<\/h2>\n<p><\/p>\n<p>Letztendlich wissen wir genau, dass wir Backups durchf\u00fchren, dass unsere Backups g\u00fcltig sind, und dass die Probleme, die dabei auftreten, wenig Zeit in Anspruch nehmen und auf Ebene des diensthabenden Administrators gel\u00f6st werden. Backups nehmen im Vergleich zu tar.gz oder Bacula wirklich wenig Platz ein.<\/p>\n<p>Quelle: <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\/de\/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=\"de_DE\" \/>\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\/de\/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\udd47Wie GitLab hilft, Backups gro\u00dfer NextCloud-Speicher zu erstellen | ProHoster","description":"Hallo, Habr! Heute m\u00f6chte ich \u00fcber unsere Erfahrungen zur Automatisierung der Datensicherung gro\u00dfer Nextcloud-Speicher in verschiedenen Konfigurationen berichten.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/86904","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=86904"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/86904\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/86905"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=86904"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=86904"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=86904"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}