MongoDB Einwegreplikation

8

Sie müssen eine Möglichkeit finden, Daten von der Client-Datenbank in die zentrale Datenbank zu übertragen.Basisch, es gibt mehrere Instanzen von MongoDB, die auf Remote-Rechnern [Clients] laufen und eine Methode benötigen, um die zentrale Mongo-Datenbank periodisch mit neu hinzugekommenen und modifizierten Dokumenten in Clients zu aktualisieren .it muss seine Datensätze auf den einzelnen zentralen Server replizieren

ZB:

Wenn ich 3 Mongo-Instanzen auf 3 Rechnern mit Daten von je 10 GB laufen lasse, muss die mongoDB der 4. Maschine nach der Datenmigration 30 GB Daten haben. Und central mongoDB Maschine muss regelmäßig mit Daten von all diesen 3 Maschinen aktualisiert werden. Aber diese 3 Maschinen erhalten nicht nur neue Dokumente, sondern auch vorhandene Dokumente können aktualisiert werden. Ich möchte, dass der zentrale mongoDB-Rechner auch diese Aktualisierungen erhält.

    
frisky 14.12.2012, 12:30
quelle

2 Antworten

6

Ihre gewünschte Replikationsstrategie wird von MongoDB nicht offiziell unterstützt.

Ein MongoDB-Replikatsatz besteht aus einer einzelnen Primärdatenbank mit asynchroner Replikation auf einen oder mehrere sekundäre Server in derselben Replik einstellen. Sie können einen Replikatsatz mit mehreren Primärknoten oder Replikation nicht auf einen anderen Replikatsatz konfigurieren.

Es gibt jedoch einige mögliche Ansätze für Ihren Anwendungsfall, je nachdem, wie aktiv Sie Ihren zentralen Server auf dem neuesten Stand halten möchten und wie viele Daten / Updates Sie verwalten müssen.

Einige allgemeine Vorbehalte:

  • Das Zusammenführen von Daten von mehreren eigenständigen Servern kann zu unerwarteten Konflikten führen. Zum Beispiel würden eindeutige Indizes nichts über Dokumente wissen, die auf anderen Servern erstellt wurden.

  • Idealerweise werden die Daten, die Sie konsolidieren, immer noch durch einen eindeutigen Datenbanknamen pro Ursprungsserver getrennt, so dass Sie kein merkwürdiges Nebeneinander zwischen verschiedenen Dokumenten haben, die denselben Namespace und _id für unterschiedliche Herkunft haben Server.

Ansatz # 1: verwende mongodump und mongorestore

Wenn Sie Inhalte nur periodisch mit Ihrem zentralen Server synchronisieren müssen, verwenden Sie mongodump und mongorestore . Sie können periodische mongodump von jeder Ihrer Standalone-Instanzen einplanen und mongorestore verwenden, um sie in den zentralen Server zu importieren.

Vorbehalte:

  • Es gibt einen Parameter --db für mongorestore , mit der Sie bei Bedarf eine andere Datenbank als den ursprünglichen Namen wiederherstellen können

  • mongorestore führt nur Einfügungen in die vorhandene Datenbank durch (d. h. nicht führt Aktualisierungen oder Upserts durch). Wenn vorhandene Daten mit demselben _id bereits in der Zieldatenbank vorhanden sind, ersetzt mongorestore sie nicht.

  • Sie können mongodump Optionen wie --query Selektive Auswahl der zu exportierenden Daten (z. B. nur aktuelle Daten statt aller auswählen)

  • Wenn Sie die Datenmenge auf dump & amp; Bei jedem Lauf wiederherstellen (z. B. nur "geänderte" Daten exportieren), müssen Sie herausfinden, wie mit Aktualisierungen und Löschungen auf dem zentralen Server umgegangen wird.

Angesichts der Vorbehalte wäre die einfachste Verwendung dieses Ansatzes eine vollständige Dump & Amp; Wiederherstellen (zB mithilfe von mongorestore --drop ), um sicherzustellen, dass alle Änderungen kopiert werden.

Approach # 2: verwende einen tailable Cursor mit dem MongoDB oplog .

Wenn Sie mehr Echtzeit- oder inkrementelle Replikation benötigen, können Sie tailable cursors erstellen auf der MongoDB-Replikation oplog .

Dieser Ansatz ist im Grunde "rollen Sie Ihre eigene Replikation". Sie müssten eine Anwendung schreiben, die das oplog auf jeder Ihrer MongoDB-Instanzen zurückschaltet und nach interessanten Änderungen sucht, die auf Ihrem zentralen Server gespeichert werden sollen. Beispielsweise möchten Sie möglicherweise nur Änderungen für ausgewählte Namespaces (Datenbanken oder Sammlungen) replizieren.

Ein verwandtes Tool, das von Interesse sein könnte, ist der experimentelle Mongo Connector aus 10gen Labors. Dies ist ein Python-Modul, das eine Schnittstelle für die Weitergabe der Replikation oplog bereitstellt.

Vorbehalte:

  • Sie müssen dazu Ihren eigenen Code implementieren und erfahren, wie Sie mit oplog documents

  • arbeiten
  • Möglicherweise gibt es ein alternatives Produkt, das Ihr gewünschtes Replikationsmodell "out of the box" besser unterstützt.

Stennie 03.01.2013 07:16
quelle
0

Sie sollten beachten, dass nur Replikate für die Replikation festgelegt sind. Ein Replikatsatz bedeutet immer: eine primäre, mehrere sekundäre. Schreiben Sie immer auf den primären Server. Anscheinend möchten Sie Multi-Master-Replikation, die nicht von MongoDB unterstützt wird. Sie möchten also in eine andere Technologie wie CouchDB oder CouchBase schauen. MongoDB ist hier burst.

    
Andreas Jung 14.12.2012 15:46
quelle

Tags und Links