4D Backup, VSS-Snapshots und die neuen Befehle zum Sperren des Datenspeichers

4D bietet Ihnen mehrere integrierte Möglichkeiten zur Sicherung Ihrer Daten: 4D Backup und die Verwendung eines Spiegelservers. Mit 4D v20 stellt 4D interne Befehle zum Sperren des Datenspeichers zur Verfügung, sodass Sie Ihre Daten kopieren können, während 4D läuft.
Lassen Sie uns zunächst über die verschiedenen Möglichkeiten zur Sicherung Ihrer Daten mit 4D sprechen.

Automatische Sicherung und Wiederherstellung

Das eingebaute Backup erstellt nicht nur eine automatische Vollkopie Ihrer Daten, sondern verwaltet auch ein Transaktionsprotokoll, das alle Vorgänge in Ihren Daten enthält. Dies ist der beste Schutz für Ihre Arbeit. Wenn etwas passiert, wie z.B. ein Stromausfall, eine beschädigte Festplatte oder ein Systemabsturz, erkennt 4D beim nächsten Start automatisch den Fehler und integriert – falls nötig – die fehlenden Operationen aus dem Log oder führt eine vollständige Wiederherstellung plus Log-Integration durch. Aus diesem Grund empfehlen wir 4D Backup für die meisten Anwendungsfälle.

Lesen Sie https://developer.4d.com/docs/Backup/overview für weitere Details.

SERVER spiegeln

Für 24/7-Installationen, bei denen Sie die Datendatei nicht für ein vollständiges Backup sperren können oder bei denen Sie eine minimale Wiederherstellungszeit wünschen, sollten Sie einen Mirror Server verwenden. 4D repliziert automatisch alle Änderungen auf dem Mirror Server, sodass bei einem Ausfall des Hauptservers der Mirror Server innerhalb von Sekunden wieder in Betrieb genommen werden kann.

Die Einrichtung einer Mirror-Konfiguration ist aufwändiger und komplizierter als die Verwendung eines Backups. Wir haben bereits vielen unserer Kunden geholfen, diese Konfiguration einzurichten. Zögern Sie also nicht, das 4D Professional Service Team um Hilfe und Rat zu bitten.

Windows Volumen-Schattenkopie

Besonders in virtuellen Umgebungen bevorzugen Systemadministratoren die Verwendung von Volume Shadow Copy (VSS) basierten Snapshots. 4D unterstützt dies mit seinem eigenen 4D VSS Writer. Lesen Sie https://blog.4d.com/enterprise-virtual-machine-snapshot-support/ für Details.

Seien Sie vorsichtig, denn ein Snapshot ersetzt nicht 4D Backup, da er nur die Daten eines bestimmten Zeitpunkts enthält. Alle Operationen, die nach dem Snapshot stattgefunden haben, können nicht wiederhergestellt werden, da das Journal und das Transaktionsprotokoll fehlen.

Eine visuelle Erklärung, wie 4D Backup funktioniert

Wie funktionieren das Backup und VSS?

Ich lasse das Mirror Backup beiseite, da es eine ganz andere Art der Datensicherung ist, und konzentriere mich darauf, wie 4D Backup und 4D VSS funktionieren.

Der erste Punkt, der zu beachten ist, ist, dass 4D nicht jede Änderung an der Datendatei sofort und in Echtzeit vornimmt. Dies würde zu viele Festplattenzugriffe erfordern und die Leistung Ihrer Anwendung erheblich beeinträchtigen. 4D verwendet einen Cache im Speicher, in den alle Änderungen zuerst übernommen werden. In regelmäßigen Abständen leert 4D den Cache und übernimmt alle Änderungen an der Datendatei in einem Zug. Wenn also das Backup startet oder VSS aufgerufen wird, leert 4D zuerst den Cache, damit die Datendatei aktuelle Daten enthält.

Ein weiterer wichtiger Punkt ist, dass das Kopieren einer Datendatei nicht funktioniert, während sie in Benutzung ist: Wenn die Datendatei während des Kopierens verändert wird, kann die resultierende Datendatei beschädigt werden oder es können Unterschiede zwischen der Datendatei und dem Journal oder den Indizes auftreten. Der zweite Schritt besteht also darin, die Datendatei zu sperren, indem Schreibvorgänge während des Kopiervorgangs verhindert werden. Lesevorgänge werden zwar weiterhin unterstützt, aber jeder Prozess, der versucht, einen Schreibvorgang durchzuführen, wird blockiert, bis der Backup/VSS-Snapshot abgeschlossen ist.

Zum Schluss möchte ich Ihnen noch etwas über das Journal erzählen. Das Journal enthält alle Operationen, die Sie seit Ihrer letzten Sicherung durchgeführt haben. Es wird in 2 Hauptfällen verwendet: Wenn Ihre Datendatei beschädigt wird oder wenn Sie einige unglückliche Benutzeroperationen rückgängig machen wollen. Diese Datei ist sehr wichtig, wenn Sie nicht eine einzige Änderung an Ihrer Datendatei verlieren wollen.

Sobald der Cache geleert und die Datendatei gesperrt ist, erstellt 4D Backup (aber nicht VSS) eine neue Journal-Datei. Dann können die Datendatei, die Indexdatei und das Journal kopiert werden, bevor die Daten entsperrt werden.

Wie Sie sehen können, ist der gesamte Vorgang recht komplex. Deshalb raten wir unseren Kunden dringend, das 4D-Backup zu verwenden, da es sowohl vollautomatisch als auch sicher ist. Einige von Ihnen entwickeln jedoch ihren eigenen Snapshot-Mechanismus. Für sie haben wir die Möglichkeit geschaffen, den Datenspeicher zu sperren, während 4D läuft!

Neue Funktion: Sperren des Datenspeichers

Wir haben Ihnen 3 neue Befehle zur Verfügung gestellt: ds.flushAndLock(), ds.locked() und ds.unlock().

ds.flushAndLock() leert den Cache und sperrt dann den Datenspeicher für die anderen Prozesse. Solange der Datenspeicher gesperrt ist, werden alle Schreibvorgänge anderer Prozesse auf Eis gelegt, bis die Sperre aufgehoben wird. Von diesem Moment an wissen Sie, dass weder Ihre Datendatei noch Ihre Indexdatei oder Ihr Journal verändert werden, sodass Sie sie frei kopieren und sicher sein können, dass sie synchronisiert und nicht beschädigt sind.

Sobald Sie mit dem Kopieren fertig sind, können Sie ds.unlock() in demselben Prozess aufrufen. Damit wird die Sperre des Datenspeichers aufgehoben, sodass Schreibvorgänge wieder möglich sind.

Der Befehl ds.locked() zeigt Ihnen an, ob ein Prozess den Datenspeicher derzeit gesperrt hat.

Mit diesen 3 Befehlen können Sie nun nachvollziehen, wie 4D backup und VSS den Datenspeicher vor dem Kopieren sperren.

Code zur Durchführung eines Archivs des Datenordners

Zur Veranschaulichung dieser neuen Funktion möchte ich Ihnen einen Codeschnipsel zeigen. Dieser Code führt eine Archivierung des Datenordners (und damit der Daten- und Indexdateien) und des Journals durch:

$destination:=Folder(fk documents folder).folder("Archive")
$destination.create() // The folder where we will copy the archive
ds.flushAndLock() // We first lock the datastore, blocking write operations from other processes

$dataFolder:=Folder(fk data folder)
$dataFolder.copyTo($destination) // We can now copy the data folder

$oldJournalPath:=New log file() // We create a new journal
$oldJournal:=File($oldJournalPath; fk platform path)
$oldJournal.moveTo($destination) // We move the old journal

ds.unlock() // Our copy is over, we can now unlock the datastore

Wie Sie sehen können, müssen trotz des recht kleinen Codes viele wichtige Schritte durchgeführt werden, um sicherzustellen, dass das Archiv nicht beschädigt wird: Der Code sorgt dafür, dass der Cache geleert und der Datenspeicher gesperrt wird, dass ein neues Journal erstellt und das alte gespeichert wird und natürlich, dass der Datenspeicher am Ende der Operation wieder freigegeben wird. Ich empfehle Ihnen, diesen Code als Grundlage für Ihre eigenen Snapshot-Mechanismen zu verwenden, damit Sie keinen wichtigen Schritt vergessen.

Das war’s für den Moment. Ich hoffe, dieser Blog-Beitrag hilft Ihnen, die interne Funktionsweise von 4D Backup besser zu verstehen.
Wenn Sie Fragen oder Kommentare haben, zögern Sie bitte nicht, diese im Forum zu stellen.

Nicolas Brachfogel
Product Owner & Senior Developer - Nicolas Brachfogel kam 2017 als Senior Developer (4D Server und Netzwerke) zu 4D. Als Product Owner, der die Freigabe von Apple Silicon verwaltet, ist er für das Schreiben von User Stories und deren Umsetzung in funktionale Spezifikationen zuständig und stellt sicher, dass die Implementierungen der Funktionen den Kundenanforderungen entsprechen. Nicolas ist Absolvent des Institut Supérieur d'Informatique Appliquée (INSIA) und begann seine Karriere als Softwareentwickler im Jahr 2001. Nachdem er mehrere Jahre in Java und C++ programmiert hatte, spezialisierte er sich auf die Client-Server-Entwicklung für Videospielunternehmen. Als Server-Entwickler/Architekt arbeitete er erfolgreich an den Server-Architekturen vieler Spiele (Dofus Arena, Drakerz, Trivial Pursuit Go!).