So migrieren Sie MongoDB 2.6 mit WiredTiger auf 3.0

9

MongoDB 3.0 führt eine neue Speicher-Engine namens ein, wiredTigerdie zu einer stark reduzierten Speicher- und Speicherplatznutzung führt.

Da sich meine Datenbank derzeit bei ~ 20 Millionen Objekten befindet und ~ 70 GB RAM verbraucht, kommt dieses Update genau zum richtigen Zeitpunkt, um ein Hardware-Update zu verschieben.

Wie migrieren Sie eine vorhandene Installation von MongoDB 2.6 auf 3.0 und profitieren gleichzeitig von den Vorteilen von wiredTiger?

Die Dokumentation bezieht sich auf Optionen, die zu Startfehlern führen, die den Start von MongoDB verhindern. Außerdem stimmen die Speicherorte der Dateien nicht mit denen in Ubuntu (Server 14.04 LTS) überein.

Emanuel Ey
quelle
Ist dies eine einzelne Instanz (kein Replikatsatz)?
Adam C

Antworten:

15

In Standardinstallationen befindet sich die Konfigurationsdatei unter /etc/mongod.conf. In den MongoDB-Dokumenten wird nicht erwähnt, dass bei der Migration zu WiredTiger auch die Konfigurationsdatei auf das in 2.6 eingeführte neue YAML-Format aktualisiert werden muss.
Soweit ich das beurteilen kann, ist die engineOption nur im neuen Konfigurationsformat verfügbar.
Die Migration von der alten Speicher-Engine besteht darin, einen Datenbank-Dump zu erstellen, mongodb herunterzufahren, Einstellungen zu ändern und den Dump dann in die neue Speicher-Engine zu importieren.

  1. Erstellen Sie ein Backup. Ernsthaft. Wir benötigen einen Datenbankspeicherauszug, den wir dann in das neue Datenbankmodul importieren:

    mongodump -d db_name /backup/path/  
    
  2. Stoppen Sie den Mongodb-Dienst

    sudo service mongod stop  
    
  3. Verschieben Sie Daten vom aktuellen Speicherort an einen anderen Ort (MongoDB wird nicht gestartet, wenn das Datenverzeichnis Dateien enthält, die von der alten Speicher-Engine generiert wurden).

    sudo mv /var/lib/mongodb /var/lib/mongodb_26/
    
  4. Aktualisieren Sie MongoDB auf Version 3.0 (von http://docs.mongodb.org/v3.0/tutorial/install-mongodb-on-ubuntu/ ):

    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10  
    echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list  
    sudo apt-get update  
    sudo apt-get install mongodb-org mongodb-org-server mongodb-org-shell mongodb-org-mongos mongodb-org-tools  
    
  5. Konvertieren Sie die Konfigurationsdatei von alt (vor 2.6) in das aktuelle YAML-Format. Das absolute Minimum ist:

    storage:  
        dbPath: "/var/lib/mongodb"  
        engine: wiredTiger  
    
    systemLog:  
       destination: file  
       path: "/var/log/mongodb/mongod.log"  
       logAppend: true  
    
    net:  
        bindIp: 127.0.0.1  
        port: 27017  
        # Enable the HTTP interface (Defaults to port 28017).  
        http:  
            enabled: false  
    

    Stellen Sie sicher, dass keine Zeilen im alten Format mehr vorhanden sind. Andernfalls wird MongoDB nicht gestartet.

    Die vollständige Dokumentation für die Konfigurationsdatei finden Sie unter: http://docs.mongodb.org/v3.0/reference/configuration-options/

  6. Optional können Sie eine Sicherungskopie des Protokolls erstellen:

    sudo mv /var/log/mongodb/mongod.log /var/log/mongodb/mongod_26.log
    
  7. Starten Sie mongodb neu

    sudo service mongod start
    
  8. Laden Sie die Sicherung, um Daten in eine neue Speicher-Engine zu konvertieren

    mongorestore /backup/location
    

Nachdem Sie überprüft haben, ob alle Ihre Daten in Ordnung sind, können Sie das Verzeichnis mit dem alten Datenformat löschen

sudo rm -r /var/lib/mongodb_26/

Beachten Sie, dass für Replikatsätze und Sharded-Cluster einige zusätzliche Schritte erforderlich sind: http://docs.mongodb.org/v3.0/release-notes/3.0-upgrade/?_ga=1.86531032.1131483509.1428671022#change-replica-set-storage -Motor-zu-Draht-Tiger

Emanuel Ey
quelle
1
Hinweis: Ausführlichere
Adam C
1

Mit dem alten Konfigurationsdateiformat hatte ich Erfolg mit:

storageEngine = wiredTiger
unkx80
quelle
Das ist ziemlich interessant, denn als ich meinen Beitrag schrieb, habe ich genau das versucht und einen Fehler erhalten (an den ich mich nicht erinnere).
Emanuel Ey