Alle über ausgegebenen Daten mongodump
müssen vom MongoDB-Server in den Speicher eingelesen werden. Es ist auch erwähnenswert, dass mongodump
Daten und Indexdefinitionen gesichert werden. Die Wiederherstellungszeit kann im Vergleich zu anderen Ansätzen auch erheblich länger sein, da mongorestore
nach dem Laden der Daten alle Sekundärindizes neu erstellt werden müssen.
Wie in der MongoDB-Dokumentation erwähnt , mongodump
eignet es sich zum Sichern und Wiederherstellen kleiner Bereitstellungen, ist jedoch nicht ideal zum Erfassen vollständiger Sicherungen größerer Systeme:
Bei Verbindung mit einer MongoDB-Instanz kann Mongodump die Leistung von Mongod beeinträchtigen. Wenn Ihre Daten größer als der Systemspeicher sind, wird der Arbeitssatz durch die Abfragen aus dem Speicher verschoben, was zu Seitenfehlern führt.
Ein eigenständiger Server schränkt Ihre Sicherungsoptionen ein, wenn Sie Ihre Bereitstellung auch während der Sicherung verfügbar halten möchten.
Hier sind einige vorgeschlagene Ansätze in der Reihenfolge der meisten bis am wenigsten empfohlenen:
Ansatz 1: Verwenden Sie einen Cloud-Sicherungsdienst
Für die einfachste kurzfristige Lösung würde ich die Verwendung eines kommerziellen Cloud-Backup-Dienstes wie MongoDB Cloud Manager in Betracht ziehen . MongoDB Cloud Manager bietet eine kontinuierliche Sicherung mit geplanten Snapshots und einer Aufbewahrungsrichtlinie ( weitere Informationen finden Sie unter Sicherungsvorbereitungen ). Ein Cloud-Dienst vermeidet außerdem, dass Sie zusätzliche Server / Infrastrukturen bereitstellen müssen. Selbst wenn Sie dies in Zukunft planen, ist dies eine hilfreiche kurzfristige Lösung.
Der allgemeine Ansatz wäre:
Als zusätzlichen Vorteil enthält Cloud Manager auch einen Überwachungsagenten, mit dem der Metrikverlauf Ihrer Bereitstellung erfasst und Warnungen konfiguriert werden können.
Ansatz 2: Konvertieren Sie Ihre Bereitstellung in ein Replikatset und sichern Sie sie von einer versteckten sekundären Seite
Dieser Ansatz erfordert die Bereitstellung einer zusätzlichen Infrastruktur, entlastet jedoch die Auswirkungen der Sicherung von Ihrem Primärserver. In der Regel werden Replikatsätze mit mindestens drei Mitgliedern für hohe Verfügbarkeit und automatisches Failover bereitgestellt. Wenn Ihr einziges Ziel jedoch die Sicherung ist, können Sie eine weniger ideale Konfiguration mit zwei Servern verwenden.
Der allgemeine Ansatz wäre:
- Stellen Sie einen zweiten Server bereit, der für die Sicherung verwendet wird
- Konvertieren Sie Ihren eigenständigen Server in ein Replikatset .
- Fügen Sie Ihren Sicherungsserver als versteckten sekundären Server mit einer Priorität von 0 (er wird niemals primär) und 0 Stimmen hinzu.
- Verwenden Sie eine der unterstützten Sicherungsmethoden , um Sicherungen auf Ihrem versteckten sekundären Server durchzuführen. Die Sicherungsmethoden sind in der allgemeinen Reihenfolge der Empfehlungen aufgeführt: Dateisystem-Snapshots (sofern von Ihrer Konfiguration unterstützt) oder Dateikopien (vorausgesetzt, Sie stoppen
mongod
) sind vorzuziehen mongodump
.
- Fügen Sie (idealerweise) eine weitere datenführende Sekundärseite hinzu, wenn Sie die Hochverfügbarkeits- und Failover-Vorteile einer Replikatsatzkonfiguration nutzen möchten.
Ansatz 3: Verwenden Sie Dateisystem-Snapshots (falls verfügbar und angemessen).
Eine weniger effektive Sicherungsstrategie als Ihre derzeitige mongodump
wäre die Verwendung von Dateisystem-Snapshots , vorausgesetzt, Sie haben ein Dateisystem, das Snapshots unterstützt (und alle Ihre Daten- und Journaldateien befinden sich auf einem einzigen Volume, sodass Sie einen konsistenten Snapshot einer Ausführung erhalten können mongod
). Der Vorteil von Dateisystem-Snapshots besteht darin, dass nicht alle Daten von in den Speicher eingelesen werden mongod
müssen. Snapshots können jedoch weiterhin Auswirkungen haben (insbesondere beim Erstellen des ersten Snapshots auf einem ausgelasteten System). Aufeinanderfolgende Snapshots sind effizienter und weniger wirkungsvoll, stellen jedoch keine vollständige Sicherungslösung dar, da die Snapshots lokal auf Ihrem Server sind (und Sie derzeit nur über einen Standalone verfügen).
Vorsichtsmaßnahmen
Die Ansätze Nr. 1 und Nr. 2 beinhalten beide das Aktivieren der Replikation, um Sicherungen zu erleichtern. Durch die Replikation werden einige zusätzliche lokale E / A auf Ihrem Primärserver hinzugefügt, da alle Schreibvorgänge in einer speziellen gekappten Sammlung namens oplog (Operationsprotokoll) vermerkt sind .
Sie haben einen wahrscheinlichen Bedarf an Sharding in der Zukunft erwähnt, aber vorher würde ich Ihre MongoDB-Workload von den anderen Prozessen isolieren, die denselben Server gemeinsam nutzen. Wenn Sie Ihre Sicherungsstrategie auf eine effizientere Strategie als ändern können mongodump
, entfernen Sie Ressourcenkonflikte und erfassen Sie einen Basismetrikverlauf zur Überprüfung. Möglicherweise ist Sharding noch nicht erforderlich.