Sicherung und Wiederherstellung in IBM Cloudant
Obwohl Daten redundant in einem IBM Cloudant-Cluster gespeichert werden, ist es wichtig, zusätzliche Sicherungsmaßnahmen in Betracht zu ziehen. Redundanter Datenspeicher schützt beispielsweise nicht vor Fehlern beim Ändern von Daten.
Lesen Sie die IBM® Cloudant® for IBM Cloud®-Anleitung zur Disaster-Recovery, um zu verstehen, wo Sicherungen mit anderen Funktionen zusammenarbeiten, die IBM Cloudant bietet, um Disaster-Recovery- (DR) und Hochverfügbarkeitsanforderungen (HA) zu unterstützen.
Einführung in CouchBackup
IBM Cloudant stellt ein unterstütztes Tool für Momentaufnahmesicherungen und -wiederherstellungen bereit. Dieses Open-Source-Tool heißt CouchBackup. Es handelt sich um eine node.js
-Bibliothek, die Sie unter NPMinstallieren können.
Das CouchBackup-Paket enthält die Bibliothek und zwei Befehlszeilentools:
couchbackup
, das einen Speicherauszug von JSON-Daten aus einer Datenbank in einer Sicherungstextdatei erstellt.couchrestore
, das Daten aus einer Sicherungstextdatei in einer Datenbank wiederherstellt.
Die CouchBackup-Tools haben Einschränkungen.
IBM Cloudant-Daten sichern
Sie können eine einfache Sicherung mithilfe des Tools couchbackup
durchführen. Um die animaldb
-Datenbank in einer Textdatei namens backup.txt
zu sichern, können Sie einen Befehl ähnlich dem folgenden absetzen:
couchbackup --url "$SERVICE_URL" --db animaldb > backup.txt
In der NPM-Readme-Datei finden Sie weitere Optionen, einschließlich der Optionen in der folgenden Liste:
-
Umgebungsvariablen zum Festlegen der Namen von Datenbank und URL.
-
Protokolldateien zum Aufzeichnen des Fortschritts einer Sicherung.
-
Möglichkeit, eine unterbrochene Sicherung fortzusetzen.
Diese Option ist nur mit der Protokolldatei für die nicht unterbrochene Sicherung verfügbar.
-
Senden der Sicherungstextdatei an eine angegebene Ausgabedatei, statt Weiterleiten der
stdout
-Ausgabe.Die CouchBackup-Tools haben Einschränkungen.
IBM Cloudant-Daten wiederherstellen
Zum Wiederherstellen Ihrer Daten verwenden Sie das Tool couchrestore
. Verwenden Sie couchrestore
, um die Sicherungsdatei in eine neue IBM Cloudant-Datenbank zu importieren. Stellen Sie sicher, dass Sie über alle Indizes
erstellt verfügen, bevor eine Anwendung versucht, die wiederhergestellten Daten zu verwenden.
Gehen Sie beispielsweise wie folgt vor, um die Daten, die in dem früheren Beispiel gesichert wurden, wiederherzustellen:
couchrestore --url "https://myaccount.cloudant.com" --db newanimaldb < backup.txt
Die NPM-Readme-Datei enthält Details zu anderen Zurückschreibungsoptionen.
Einschränkungen
Die CouchBackup-Tools haben die folgenden Einschränkungen:
_security
-Einstellungen werden von den Tools nicht gesichert.- Anhänge werden von den Tools nicht gesichert.
- Die Sicherungen sind keine präzisen zeitpunktgesteuerten Momentaufnahmen. Der Grund dafür ist, dass die Dokumente in der Datenbank in Stapeln abgerufen werden, aber andere Anwendungen zur gleichen Zeit Dokumente aktualisieren können. Deshalb können sich die Daten in der Datenbank zwischen dem Lesen des ersten und letzten Stapels ändern.
- Indexdefinitionen, die in Entwurfsdokumenten enthalten sind, werden gesichert, aber der Inhalt der Indizes wird nicht gesichert. Diese Einschränkung bedeutet, dass die Indizes erneut erstellt werden müssen, wenn Daten wiederhergestellt werden. Das Neuerstellen kann abhängig davon, wie viele Daten wiederhergestellt werden, ziemlich lange dauern.
Tools verwenden
Auf der Seite NPM finden Sie grundlegende Informationen zur Verwendung der Befehlszeilentools für die Sicherung und Wiederherstellung von Daten. Die folgenden Beispiele zeigen, wie diese Details in die Praxis umgesetzt werden können, indem die Verwendung der Tools für bestimmte Tasks beschrieben wird.
Das CouchBackup-Paket bietet zwei Möglichkeiten zur Verwendung seiner Kernfunktionen.
- Die Befehlszeilentools können in Standardbefehlspipelines von UNIX™ eingebettet werden. In vielen Szenarios ist eine Kombination von
cron
und einfachem Shell-Scripting der Anwendungcouchbackup
ausreichend. - Eine Bibliothek, die von Node.js verwendet werden kann. Die Bibliothek ermöglicht die Erstellung und Bereitstellung von komplexeren Sicherungsprozessen, z. B. das dynamische Bestimmen, welche Datenbanken gesichert werden müssen.
Verwenden Sie entweder das Befehlszeilen-Sicherungstool oder die Bibliothek mit Anwendungscode, um Sicherungen aus IBM Cloudant-Datenbanken als Teil komplexerer Situationen zuzulassen. Ein hilfreiches Szenario ist das Planen von Sicherungen
mithilfe von cron
und das automatische Hochladen von Daten in
Cloud Object Storage für die langfristige Aufbewahrung.
Beispiele für das Befehlszeilenscripting
Häufig müssen die beiden folgenden Anforderungen erfüllt werden:
- Einsparen von Plattenspeicherplatz durch Komprimieren der Sicheruntsdatei während ihrer Erstellung.
- Automatisches Erstellen von Datenbanksicherungen in regelmäßigen Abständen.
Sicherungsdatei komprimieren
Das Tool couchbackup
kann eine Sicherungsdatei direkt auf Platte schreiben oder die Sicherung in stdout
streamen. Beim Streaming in stdout
können Daten umgewandelt werden, bevor sie auf Platte geschrieben
werden. Diese Funktion wird zum Komprimieren von Daten innerhalb des Streams verwendet.
couchbackup --url "$SERVICE_URL" \
--db "animaldb" | gzip > backup.gz
In diesem Beispiel übernimmt das Tool gzip
die Sicherungsdaten direkt aus stdin
, komprimiert sie und gibt sie in stdout
wieder aus. Der resultierende komprimierte Datenstrom wird dann in eine Datei namens
backup.gz
umgeleitet und geschrieben.
Wenn die Datenbank die Angabe von Zugriffsberechtigungsnachweisen erfordert, verwenden Sie $SERVICE_URL
mit dem Format https://$USERNAME:$PASSWORD@$ACCOUNT
, z. B. https://myusername:mypassword@myhost.cloudant.com
.
Wenn Sie die Daten auf eine andere Weise umwandeln möchten, sollte die Pipeline erweitert werden. Beispiel: Sie möchten die Daten verschlüsseln, bevor sie auf Platte geschrieben werden. Sie können die Daten auch direkt mithilfe der zugehörigen Befehlszeilentools in einen Objektspeicherservice schreiben.
Stündliche oder tägliche Sicherungen, die cron
verwenden
Das Planungstool cron
kann so konfiguriert werden, dass es in regelmäßigen Abständen Momentaufnahmen von Daten macht.
Ein sinnvoller Ausgangspunkt ist es, couchbackup
anzuweisen, eine einzelne Sicherung in eine Datei zu schreiben, wobei der Dateiname das aktuelle Datum und die aktuelle Uhrzeit enthält, wie im folgenden Beispiel gezeigt:
couchbackup --url "https://$USERNAME:$PASSWORD@$ACCOUNT.cloudant.com" \
--db "animaldb" > animaldb-backup-`date -u "+%Y-%m-%dT%H:%M:%SZ"`.bak
Nachdem Sie den Befehl geprüft und festgestellt haben, dass er ordnungsgemäß funktioniert, kann er in einen Cron-Job eingegeben werden:
- Installieren Sie die CouchBackup-Tools auf dem Server, der die Sicherungen durchführen soll.
- Erstellen Sie einen Ordner zum Speichern der Sicherungen.
- Erstellen Sie einen Cron-Eintrag, der angibt, wie häufig die Sicherung durchgeführt werden soll.
Sie können einen Cron-Eintrag mithilfe des Befehls crontab -e
erstellen. In der Systemdokumentation finden Sie spezifische Angaben zu den Cron-Optionen.
Ein Cron-Eintrag, von dem täglich eine Sicherung ausgeführt wird, ähnelt dem folgenden Beispiel:
0 5 * * * couchbackup --url "https://$USERNAME:$PASSWORD@$ACCOUNT.cloudant.com" --db "animaldb" > /path/to/folder/animaldb-backup-`date -u "+%Y-%m-%dT%H:%M:%SZ"`.bak
Dieser Cron-Eintrag erstellt eine tägliche Sicherung um 05:00 Uhr. Sie können das Cron-Muster bei Bedarf ändern, um stündliche, tägliche, wöchentliche oder monatliche Sicherungen durchzuführen.
CouchBackup als Bibliothek
Die Befehlszeilentools couchbackup
und couchrestore
sind Wrapper für eine Bibliothek, die in Ihren eigenen Node.js-Anwendungen verwendet werden kann.
Die Bibliothek kann in komplexeren Szenarios wie den folgenden hilfreich sein:
- Sichern verschiedener Datenbanken in einer Task. Sie können diese Sicherung ausführen, indem Sie alle Datenbanken mit dem Aufruf
_all_dbs
identifizieren und dann eine Sicherung jeder Datenbank einzeln durchführen. - Längere Pipelines erhöhen das Fehlerrisiko. Mithilfe der CouchBackup-Bibliothek kann Ihre Anwendung alle Fehler bei frühester Gelegenheit erkennen und adressieren.
Weitere Informationen finden Sie auf der Seite NPM.
Das folgende Beispielscript zeigt, wie die Bibliothek couchbackup
mit IBM® Cloud Object Storage kombiniert werden kann. Dieser Code stellt dar, wie Sie die regionsübergreifende S3-API zum Sichern einer Datenbank in einem Objektspeicher
verwenden können.
Eine Voraussetzung für den Code ist, dass Sie das S3 -Clientobjekt für IBM Cloud Object Storage initialisieren, indem Sie die Anweisungen in IBM Cloud Object Storage - S3 API Introbefolgen.
/*
Backup directly from Cloudant to an S3 bucket via a stream.
@param {string} couchHost - URL of database root
@param {string} couchDatabase - backup source database
@param {object} s3Client - S3 client object
@param {string} s3Bucket - Destination S3 bucket (must exist)
@param {string} s3Key - Destination object's key (shouldn't exist)
@param {boolean} shallow - Whether to use couchbackup's shallow mode
@returns {Promise}
*/
function backupToS3(sourceUrl, s3Client, s3Bucket, s3Key, shallow) {
return new Promise((resolve, reject) => {
debug('Setting up S3 upload to ${s3Bucket}/${s3Key}');
// A pass through stream that has couchbackup's output
// written to it and it then read by the S3 upload client.
// It has a 10 MB internal buffer.
const streamToUpload = new stream.PassThrough({highWaterMark: 10485760});
// Set up S3 upload.
const params = {
Bucket: s3Bucket,
Key: s3Key,
Body: streamToUpload
};
s3Client.upload(params, function(err, data) {
debug('S3 upload done');
if (err) {
debug(err);
reject(new Error('S3 upload failed'));
return;
}
debug('S3 upload succeeded');
debug(data);
resolve();
}).httpUploadProgress = (progress) => {
debug('S3 upload progress: ${progress}');
};
debug('Starting streaming data from ${sourceUrl}');
couchbackup.backup(
sourceUrl,
streamToUpload,
(err, obj) => {
if (err) {
debug(err);
reject(new Error('CouchBackup failed with an error'));
return;
}
debug('Download from ${sourceUrl} complete.');
streamToUpload.end(); // must call end() to complete S3 upload.
// resolve() is called by the S3 upload
}
);
});
}
Andere Disaster-Recovery-Optionen
Kehren Sie zur IBM Cloudant-Anleitung zur Disaster-Recovery zurück und lernen Sie die anderen Features kennen, die IBM Cloudant für die Konfiguration einer vollständigen Disaster-Recovery bietet.