So sichern Sie eine große MongoDB-Datenbank

14

Was ist die empfohlene Methode zum Sichern großer Datenmengen in MongoDB? Nehmen wir an, wir haben eine Datengröße in der Größenordnung von 10 TB - wie würden Sie das belegen?

Wir erwägen einen versteckten, möglicherweise verzögerten Replikatsatzknoten. Die Verzögerung würde uns vor versehentlichem Löschen der gesamten Datenbank schützen. Ist dies eine praktikable Lösung und welche anderen Optionen würden Sie zur Untersuchung empfehlen?

Vielen Dank!

Malakim
quelle

Antworten:

19

Da 10 TB gesichert werden müssen, wird dies etwas kompliziert.

Replikate sind kein Ersatz für ordnungsgemäße Sicherungen

Verspätete Replikatsatzmitglieder bieten zwar eine relativ einfache Möglichkeit, Ihnen bei versehentlichen Vorgängen zu helfen, es gibt jedoch keinen Ersatz für ordnungsgemäße Sicherungen, so wie RAID keinen Ersatz für dateisystembasierte Sicherungen darstellt.

Empfehlungen

Das hängt stark davon ab, wie Ihr Setup aussieht.

SAN-Snapshots

Bei 10 TB haben Sie vermutlich eine Art SAN angeschlossen. Der einfachste Weg, um MongoDB in diesen Umgebungen zu sichern, besteht darin, sicherzustellen, dass Sie das Journaling sowohl im Dateisystem als auch in MongoDB aktiviert haben, und einfach einen Snapshot des SAN-Volumes eines der Secondaries zu erstellen, wahrscheinlich einen versteckten, um sicherzustellen, dass Ihre Vorgänge nicht ausgeführt werden nicht unterbrochen werden. Dies dauert in der Regel nur Sekunden, aber stellen Sie sicher, dass Ihr Replikations-Oplog-Fenster ausreicht. Andernfalls müssen Sie möglicherweise die Sekundärdaten erneut synchronisieren.

Verwenden Sie keinen Mongodump

Ich muss mit RolandoMySQLDBA über die Verwendung von Mongodump nicht einverstanden sein. Zunächst werden dem Server Sperren auferlegt. Obwohl sie relativ schnell aufgehoben werden, kann sich die Anzahl der Sperren summieren und Ihre Vorgänge beeinträchtigen, es sei denn, sie werden auf einem verborgenen Knoten ausgeführt oder es gibt keine Lesevorlieben, die auf die sekundären Knoten treffen. Außerdem ist es nicht gerade schnell. Ich würde davon ausgehen, dass es stundenlang läuft und höchstwahrscheinlich länger dauert als Ihr Backup-Fenster. Randnotiz: Immer Mongodump mit der --oplogOption ausführen. Denken Sie auch daran, dass mongodump keine Indizes sichert, sondern die Operationen zum Erstellen von Indizes. Diese Indizes müssen während einer Wiederherstellung neu erstellt werden. Dies kann die dafür erforderliche Zeit erheblich verlängern. Wenn Sie eine Datenbank wiederherstellen müssen, möchten Sie sie meiner Erfahrung nach so schnell wie möglich haben. Ein weiterer Grund, warum Mongodump nicht zum Sichern von 10 TB geeignet ist.

Hinweise zu LVM-Snapshots

Sie können einen LVM-Snapshot auf einer laufenden Mongod-Instanz erstellen, vorausgesetzt, Sie haben das Journaling in Mongod aktiviert (und meiner Erfahrung nach tut es nicht weh, es auch auf der FS-Ebene zu aktivieren). LVM-Snapshots haben jedoch einige Auswirkungen. Erstens müssen Sie offensichtlich über genügend Speicherplatz verfügen, um die Änderungen während der Sicherungsvorgänge durchführen zu können. Lassen Sie mich das klarstellen.

Angenommen, Sie haben eine stündliche Änderungsrate von 500 GB. Und dass Sie möchten, dass Ihr Backup gelöscht wird, bevor es in einen Speicher hochgeladen wird. Selbst bei Verwendung von parallelem bzip2 würde die Komprimierung von 10 TB einige Stunden dauern, einfach weil die Tatsache, dass der Massenspeicher-Durchsatz am wahrscheinlichsten ist, zu Ihrem begrenzenden Faktor wird. Nehmen wir an, es würde 2 Stunden dauern, um die Daten auf 2 TB zu komprimieren. Inzwischen benötigen wir also 2 TB + 2 * 500 GB freien Speicherplatz, 1 TB für den LVM-Snapshot. Dies würde dazu führen, dass Ihr Dateisystem mindestens um mehr als das erforderliche Maß bereitgestellt werden muss30%. Wenn Sie eine angemessene Sicherheitsmarge wünschen, kann sich diese leicht auf 60-70% erhöhen (20% für einen Auslastungsfaktor von 0,8 für das ursprüngliche Dateisystem, das gleiche für die Größe des Snapshots plus den für das betreffipped Backup selbst benötigten Speicherplatz) ). In den meisten Produktionsumgebungen wäre dies inakzeptabel, da die Überbereitstellung statisch wäre (Sie möchten nicht, dass ein Sicherungsskript dynamisch mit Ihrem LVM zusammenarbeitet, oder?).

MMS-Sicherung

Während MMS-Backup einige großartige Funktionen bietet (kontinuierliches Backup, einfache Wiederherstellung zu einem bestimmten Zeitpunkt), weist es einen schwerwiegenden Nachteil auf: Der Preis für große Bereitstellungen kann leicht bei Tausenden liegen. Bei einer angenommenen stündlichen Änderungsrate von 500 GB für diese 10 TB wäre dies eine mittlere sechsstellige Summe für Cloud-Backups . Monatlich.

Mein Vorschlag wäre, ein Unternehmensabonnement für Ihre Server abzuschließen, um eine lokale MMS-Instanz, einschließlich Sicherung, zu erhalten.

Zusammenfassung

Hier sind die Optionen, die ich in absteigender Reihenfolge auswählen würde.

  1. SAN-Snapshots: einfach zu implementieren, relativ günstig
  2. Enterprise-Abonnement: Beste Funktionen. Installiere es, konfiguriere es, vergiss es, es ist da, wenn du es brauchst
  3. LVM-Snapshots: Einfach zu implementieren, aber die Kosten für die erforderliche Über-Bereitstellung können sich mit der Zeit summieren.
Markus W. Mahlberg
quelle
5

Es gibt zwei Möglichkeiten

PHYSISCHE SICHERUNG

Wenn es Ihnen nichts ausmacht, ist es am einfachsten, dies zu tun

service mongod stop

Führen Sie einen LVM-Snapshot oder eine Brute Force cpdes Mongo-Datenordners auf einer anderen Festplatte durch

service mongod start

Natürlich möchten Sie keine Ausfallzeit, wenn sich die 10 TB Daten auf einem eigenständigen Computer befinden.

VERZÖGERTES REPLIKAT-SET

Wenn Sie einen Replikatsatz mit drei Knoten haben, verwenden Sie einen der Knoten für Sicherungen

{
        "_id" : "myreplica",
        "version" : 1,
        "members" : [
                {
                        "_id" : 1,
                        "host" : "10.20.30.40:27017",
                        "priority" : 2
                },
                {
                        "_id" : 2,
                        "host" : "10.20.30.41:27017"
                },
                {
                        "_id" : 3,
                        "host" : "10.20.30.42:27017",
                        "priority" : 0,
                        "slaveDelay" : 3600
                }
        ]
}

Verwenden Sie den Knoten mit "_id' : 3all Ihren physischen Sicherungen. Daher keine Ausfallzeiten. Um einen Mitternachtsschnappschuss zu erhalten, können Sie die Sicherung um 01:00 Uhr starten, da der verborgene Knoten 1 Stunde zurückliegt.

Der Nachteil besteht natürlich darin, dass zwei weitere Server mit jeweils 10 TB zur Verfügung stehen und der Systemadministrator gefährdet ist.

MONGODUMP

Sie können mongodump für den Standalone-Computer verwenden, müssen jedoch mit Leistungseinbußen rechnen, da mongodump ein Client-Programm ist, das eine Verbindung wie jede andere Verbindung verwendet.

Wenn Sie eine Sicherung zu einem bestimmten Zeitpunkt wünschen, sollten Sie verwenden

mongodump --oplog 

Das logische BSON-Backup ist kleiner (insbesondere gzipped oder bzipped) als das physische Backup.

Die Verwendung erfolgt mongodump --oplogam besten gegen den versteckten Knoten. Auf diese Weise hat der Master keine Leistungseinbußen.

HAFTUNGSAUSSCHLUSS

Ich bin relativ neu in MongoDB (zufällige / zufällige MongoDBA). Ich hoffe meine Antwort hilft.

RolandoMySQLDBA
quelle
1
MongoDB hat auch einen kostenpflichtigen Dienst, der Ihre Daten sichert
James Wahlin
Ich kann die Verwendung eines verzögerten Replikatsatzmitglieds nicht sehen. Künstlich entsteht eine Lücke zwischen den Live-Daten und dem Backup. Dafür kann jedes normale Replikat-Set-Mitglied verwendet werden, da die Sicherung ohnehin während des Replikations-Oplog-Fensters durchgeführt werden muss.
Markus W Mahlberg